2013-07-16 131 views
1

我使用硒webdriver進行測試,並希望有機會選擇運行每一組測試的瀏覽器。我用一個工廠來實現這一點,但出於某種原因,我似乎無法讓它工作。以下是我有java工廠模式問題

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); 
+0

調用getWebDriver(null)應該讓你NPE?比較 – Jayan

+0

可以把恆定的字符串先放入,但是在我用我的字符串選擇進入後,似乎還沒有做任何事情。 – user2177781

回答

0

如傑恩所提到的,你應該有一個NPE因爲你傳遞null到getWebDriver方法。但是,請保留這一點,在您的代碼中,您正在使用scan.next()語句讀取一個字符串,但是您尚未將讀取值分配給變量type

話說,你的說法應該是如下:

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

除此之外,我沒有看到任何使用經過type變量來getWebDriver方法是什麼,你是無論如何,以從輸入用戶typegetWebDriver方法。

+0

我已經有了嗎? – user2177781

+0

那麼這是getWebDriver方法的問題嗎? – user2177781

0

您應該首先更正方法getWebDriver(type),以便它始終不會返回空值!然後看看你走到哪裏。正如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的期望。作爲傑恩所提到的,我們應該得到一個NullPointerException

+0

好的,謝謝! – user2177781

+0

那麼我最初在測試課上有掃描儀,它會更好嗎? – user2177781

+0

@ user2177781由於它是一種工廠方法,我認爲如果你在測試類讀取輸入,並將其傳遞給'getWebDriver(字符串型)'方法是最好的;另外,確保你沒有傳遞null。 – zEro