[英]Remote WebDriver does not get initialized if i try to make my WebDriver threadSafe
我試圖使我的WebDriver線程安全,但是當我運行測試時,我得到了nullPointerException。 然后,我檢查了是否對遠程WebDriver進行了初始化,但是沒有初始化,並且不確定哪里出了問題。 我正在使用在線幫助,因此我不知道如何使WebDriver threadSafe安全。
這是我的代碼。
DesiredCapabilities cap = null;
private List<WebDriver> webDriverPool = Collections.synchronizedList(new ArrayList<WebDriver>());
private ThreadLocal<WebDriver> driverThread;
@Parameters ({"browser"})
@BeforeTest
public void launchBrowser(String browser) {
//initLogs(this.getClass());
initConfigurations();
if(browser.equals("firefox")){
cap = DesiredCapabilities.firefox();
cap.setBrowserName("firefox"); //
cap.setPlatform(Platform.WINDOWS);
}else if (browser.equals("chrome")){
cap = DesiredCapabilities.chrome(); // no need path of chrome exe
cap.setBrowserName("chrome");
cap.setPlatform(Platform.WINDOWS);
}else if (browser.equals("internet explorer")){
cap = DesiredCapabilities.internetExplorer(); // no need path of ie exe
cap.setBrowserName("internet explorer");
cap.setPlatform(Platform.WINDOWS);
cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
cap.setCapability("ie.ensureCleanSession", true);
}
this.driverThread = new ThreadLocal<WebDriver>() {
@Override
protected WebDriver initialValue(){
WebDriver webDriver = null;
System.out.println(webDriver);
try {
webDriver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"),cap);
webDriverPool.add(webDriver);
} catch (MalformedURLException e) {
e.printStackTrace();
}
System.out.println(webDriver);
return webDriver;
}
};
getDriver().manage().window().maximize();
getDriver().manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
}
public WebDriver getDriver() {
return this.driverThread.get();
}
@AfterTest
public void afterTest() {
for (WebDriver driver : this.webDriverPool) {
driver.quit();
}
}
異常跟蹤
java.lang.NullPointerException
at org.openqa.selenium.support.pagefactory.DefaultElementLocator.findElement(DefaultElementLocator.java:59)
at org.openqa.selenium.support.pagefactory.internal.LocatingElementHandler.invoke(LocatingElementHandler.java:34)
at com.sun.proxy.$Proxy9.sendKeys(Unknown Source)
at ww5.pages.LoginPage.doLogin(LoginPage.java:31)
at ww5.testcases.storageRuleSuite.GoToStorageRulePageTest.goToStorageRulePageTest(GoToStorageRulePageTest.java:34)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:84)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:714)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
at org.testng.TestRunner.privateRun(TestRunner.java:767)
at org.testng.TestRunner.run(TestRunner.java:617)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
at org.testng.internal.thread.ThreadUtil$2.call(ThreadUtil.java:64)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
嘗試像這樣實例化:
public static ThreadLocal<Webdriver> driver=new ThreadLocal<Webdriver>();
然后,在驅動程序實例上調用任何方法之前,請按以下步驟進行設置:
driver.set(new FirefoxDriver());
然后使用它:
driver.get();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.