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 を返さないようにする必要があります。そして、あなたがどこに行くかを見てください。typeMubin が提案したように、メソッド内で入力を読み取る場合は、入力パラメーターを手放すことができます。ただし、この回答へのコメントの議論に基づいて、メソッド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 が述べたように、メソッドに null を渡しているため、NPE を取得する必要がありますgetWebDriver。ただし、それはさておき、コードでは、scan.next()ステートメントを使用して文字列を読み取っていますが、読み取った値を variable に割り当てていませんtype

そうは言っても、あなたの声明は次のようになるはずです:

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

それとは別に、type変数をメソッドに渡すことの使用は見られません。とにかく、メソッド内でgetWebDriverユーザーからの入力を取得しています。typegetWebDriver

于 2013-07-16T08:31:39.683 に答える