1

我正在使用 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);
4

2 回答 2

0

您应该首先更正该方法getWebDriver(type),使其不会始终返回 null!然后看看你去哪里。type正如 Mubin 建议的那样,如果您要读取方法内的输入,则可以放开输入参数。但是,根据对此答案的评论中的讨论,该方法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.

于 2013-07-16T08:52:36.533 回答
0

正如 Jayan 所提到的,您应该有一个 NPE,因为您将 null 传递给该getWebDriver方法。但是,撇开这一点不谈,在您的代码中,您正在读取一个字符串 usingscan.next()语句,但您尚未将读取的值分配给变量type

话虽如此,您的陈述应如下所示:

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

除此之外,我看不到将type变量传递给getWebDriver方法的任何用途,无论如何,您将输入来自用户的输入用于typeingetWebDriver方法。

于 2013-07-16T08:31:39.683 回答