并行运行Selenium测试时出现TimeoutException

时间:2014-10-17 08:12:14

标签: java multithreading maven selenium junit

上下文 目前,我正在使用基于Selenium的Java系统,该系统使用JUnit和Maven运行测试。通过Maven Surefire插件,我可以并行运行测试。我确保了以下事项 -

  • ThreadLocal用于单件对象
  • 每个线程单独的WebDriver
  • 使用显式等待(例如(new WebDriverWait(webdriver, timeout)).until(ExpectedConditions.________(_____));

问题: 但是,当并行运行测试时,我在WebDriverWait显式等待时获得TimeoutExceptions。这可以在测试中使用显式等待的任何位置发生。当测试按顺序运行时,不会发生这些超时异常。

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

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

1 个答案:

答案 0 :(得分:1)

首先,我不确定如何正确使用多线程与JUnit,上次我尝试我没有成功,无论如何,我用TestNG得到了更好的结果。其他的,事情与你的相似,基本上来自maven(surefire)我打电话给testng.xmlreference

现在,开箱即用的webdriver 是线程安全的。线程可能会混乱,所有类型的“几乎不可能调试”的东西都可能发生。无论如何,最近WebDriver的人试图解决这个问题,我们现在有ThreadGuard类可用(source)。那是,根据文件:

  

多线程客户端代码应该使用它来断言它访问   webdriver以线程安全的方式。

所以在你的情况下,你可以简单地使用它(从我的头顶,抱歉打字错误):

ThreadLocal<WebDriver> driverStore = new ThreadLocal<>();
WebDriver driver = ThreadGuard.protect(new FirefoxDriver());
driverStore.set(driver);

我使用此设置取得了成功。