Java 并行运行Selenium测试时的TimeoutException
上下文: 目前,我正在使用基于Selenium的Java系统,该系统使用JUnit和Maven运行测试。通过Maven Surefire插件,我能够并行运行测试。我保证了以下几点-Java 并行运行Selenium测试时的TimeoutException,java,multithreading,maven,selenium,junit,Java,Multithreading,Maven,Selenium,Junit,上下文: 目前,我正在使用基于Selenium的Java系统,该系统使用JUnit和Maven运行测试。通过Maven Surefire插件,我能够并行运行测试。我保证了以下几点- ThreadLocal用于单例对象 每个线程独立的WebDriver 使用显式等待(例如(新的WebDriverWait(webdriver,timeout))。直到(预期条件);) 问题: 然而,当并行运行测试时,我在WebDriverWait显式等待中得到TimeoutExceptions。这可能发生在测试中
- ThreadLocal用于单例对象
- 每个线程独立的WebDriver
- 使用显式等待(例如
)(新的WebDriverWait(webdriver,timeout))。直到(预期条件);
提前谢谢!如果您需要任何补充资源,如示例代码,我很乐意提供。首先,我不确定如何正确使用JUnit的多线程,上次我尝试时没有成功,无论如何,我使用
TestNG
的效果更好。除此之外,事情与您的类似,基本上是从maven(surefire)调用testng.xml
现在,webdriver开箱即用,不是线程安全的。线程可能会混淆,所有“几乎不可能调试”的事情都可能发生。不管怎么说,最近WebDriver的人试图解决这个问题,我们现在有了可用的类()。根据docs的说法:
多线程客户机代码应该使用它来断言它访问
以线程安全的方式使用webdriver
因此,在您的情况下,您可以简单地像这样使用它(从我的头顶,抱歉输入错误):
ThreadLocal driverStore=new ThreadLocal();
WebDriver-driver=ThreadGuard.protect(新的FirefoxDriver());
driverStore.set(驱动程序);
我已成功使用此设置
ThreadLocal<WebDriver> driverStore = new ThreadLocal<>();
WebDriver driver = ThreadGuard.protect(new FirefoxDriver());
driverStore.set(driver);