【问题标题】:TimeoutException when running Selenium tests in parallel并行运行 Selenium 测试时出现 TimeoutException
【发布时间】:2014-10-17 08:12:14
【问题描述】:

背景: 目前我正在使用 Java 中的基于 Selenium 的系统,该系统使用 JUnit 和 Maven 运行测试。通过 Maven Surefire 插件,我能够并行运行测试。我已确保以下事项 -

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

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

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

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

【问题讨论】:

    标签: java multithreading maven selenium junit


    【解决方案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);
    

    我已成功使用此设置。

    【讨论】:

      猜你喜欢
      • 2011-01-25
      • 2015-02-17
      • 1970-01-01
      • 1970-01-01
      • 2021-02-18
      • 2016-08-20
      • 1970-01-01
      • 2016-11-24
      • 1970-01-01
      相关资源
      最近更新 更多