Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 并行运行Selenium测试时的TimeoutException_Java_Multithreading_Maven_Selenium_Junit - Fatal编程技术网

Java 并行运行Selenium测试时的TimeoutException

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。这可能发生在测试中

上下文: 目前,我正在使用基于Selenium的Java系统,该系统使用JUnit和Maven运行测试。通过Maven Surefire插件,我能够并行运行测试。我保证了以下几点-

  • ThreadLocal用于单例对象
  • 每个线程独立的WebDriver
  • 使用显式等待(例如
    (新的WebDriverWait(webdriver,timeout))。直到(预期条件);
问题: 然而,当并行运行测试时,我在WebDriverWait显式等待中得到TimeoutExceptions。这可能发生在测试中使用显式等待的任何位置。当测试按顺序运行时,不会发生这些超时异常

问题: 我想知道你们中是否有人遇到过这种情况,以及你们如何着手解决这个问题。也欢迎其他相关信息和反馈


提前谢谢!如果您需要任何补充资源,如示例代码,我很乐意提供。

首先,我不确定如何正确使用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);