[英]java factory pattern issue
我正在使用Selenium Webdriver进行测试,并希望有机会选择在其中运行每个测试集的浏览器。我曾经使用工厂来实现这一点,但是由于某种原因,我似乎无法使其正常运行。 这是我所拥有的
class WebDriverFactory {
private WebDriver driver;
private String baseUrl;
private StringBuffer verificationErrors = new StringBuffer();
private WebDriverFactory() {
}
public static void setChromePath() {
// Set file path here
}
public static void setIEPath() {
// Set file path here
}
public static WebDriver getWebDriver(String type) {
System.out.println("choose a browser:");
Scanner scan = new Scanner(System.in);
scan.next();
if (type.equalsIgnoreCase("chrome")) {
return createChrome();
} else if (type.equalsIgnoreCase("firefox")) {
return createFirefox();
} else if (type.equalsIgnoreCase("IE")) {
return createInternetExplorer();
} else {
return null;
}
}
private static WebDriver createChrome() {
System.setProperty("webdriver.chrome.driver", "C:/Program Files
(x86)/Google/Chrome/Application/chromedriver_win32_2.1/chromedriver.exe");
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
ChromeOptions chromeOptions = new ChromeOptions();
capabilities.setCapability("chrome.binary",
"C:/AppData/Local/Google/Chrome/Application/chrome.exe");
WebDriver driver = new ChromeDriver(capabilities);
return driver;
}
private static WebDriver createFirefox() {
WebDriver driver = new FirefoxDriver();
return driver;
}
private static WebDriver createInternetExplorer() {
File file = new File("C:/Utils/IEDriverServer_Win32_2.33.0/IEDriverServer.exe");
System.setProperty("webdriver.ie.driver", file.getAbsolutePath());
WebDriver driver = new InternetExplorerDriver();
return driver;
}
}
在测试课程中,我有:
String type = null;
WebDriverFactory.getWebDriver(type);
当我输入字符串时,扫描仪似乎什么也不做,浏览器也无法打开? 有人可以帮我吗?
我现在在测试班上有这个:
System.out.println("choose a browser:");
Scanner scan = new Scanner(System.in);
String type = scan.next();
WebDriverFactory.getWebDriver(type);
如Jayan所述,您应该有一个NPE,因为您getWebDriver
null传递给getWebDriver
方法。 但是,除此之外,在代码中,您正在使用scan.next()
语句读取字符串,但尚未将读取值分配给变量type
。
这样说,您的声明应如下所示:
Scanner scan = new Scanner(System.in);
type = scan.next();
除此之外,我看不到将type
变量传递给getWebDriver
方法的任何用法,无论如何,还是将用户的type
作为getWebDriver
方法的type
。
您应该首先更正方法getWebDriver(type)
以便它不会始终返回null! 然后看看你要去哪里。 正如Mubin所建议的,如果要在方法内部读取输入,则可以放弃输入参数type
。 但是,基于对该答案的注释中的讨论,此处是getWebDriver(type)
方法的外观:
public static WebDriver getWebDriver(String type) {
if (type.equalsIgnoreCase("chrome")) {
return createChrome();
} else if (type.equalsIgnoreCase("firefox")) {
return createFirefox();
} else if (type.equalsIgnoreCase("IE")) {
return createInternetExplorer();
} else {
return null;
}
}
OP在测试实现中将null传递给此方法,并且未分配Scanner
读取的值。 目前尚不清楚OP在期待什么。 如Jayan所述,我们应该获得NullPointerException
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.