簡體   English   中英

Java工廠模式問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM