java工厂模式问题



我正在使用selenium网络驱动程序进行测试,并希望有机会选择在哪个浏览器中运行每组测试。我使用了一个工厂来实现这一点,但由于某种原因,我似乎无法使其工作。这是我的

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,因为您将null传递给getWebDriver方法。但是,抛开这一点不谈,在代码中,您正在使用scan.next()语句读取字符串,但尚未将读取值分配给变量type

话虽如此,你的声明应该如下:

Scanner scan = new Scanner(System.in);
type = scan.next();

除此之外,我看不到将type变量传递给getWebDriver方法有任何用处,因为无论如何,在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

最新更新