Java 将隐式WAIT与getElements一起使用会严重减慢测试时间

Java 将隐式WAIT与getElements一起使用会严重减慢测试时间,java,scala,selenium,selenium-webdriver,scalatest,Java,Scala,Selenium,Selenium Webdriver,Scalatest,我们使用的是遗留代码,并且在测试中遇到了问题 我想增加默认超时时间,但是driver.findElement在很多地方都使用-覆盖每个调用以使用WebDriverWait将是一项艰巨的任务 我发现建议使用隐式等待,这看起来很理想,因为它只需要设置一次: getDriver().manage().timeouts().implicitlyWait(5000, TimeUnit.MILLISECONDS); 我将此添加到初始化代码块中。不幸的是,当我运行一个测试用例时,有50个测试我的性能炸弹——

我们使用的是遗留代码,并且在测试中遇到了问题

我想增加默认超时时间,但是driver.findElement在很多地方都使用-覆盖每个调用以使用WebDriverWait将是一项艰巨的任务

我发现建议使用隐式等待,这看起来很理想,因为它只需要设置一次:

getDriver().manage().timeouts().implicitlyWait(5000, TimeUnit.MILLISECONDS);
我将此添加到初始化代码块中。不幸的是,当我运行一个测试用例时,有50个测试我的性能炸弹——从大约30秒增加到600秒

我不明白为什么性能变得如此糟糕——我认为只有在测试通过时元素不存在的情况下才会花费最长的时间。我以为这通电话能证明病情。但我也看不到在哪里设置投票间隔。。。它确实在文档中提到应该明智地使用它,但这是完全不可用的

我们使用隐式wait的方法正确吗?有没有其他方法来强化我们的测试

更新
在调查中,它似乎正在使用隐式wait和driver.getElements,这减慢了我们的速度-如果我取消隐式wait,然后在调用后直接重新应用它,那么测试运行得更快。我们在400多个地方使用getElements有关于如何继续的建议吗?

我们无法找到隐式等待发生这种情况的原因。为了使构建更加可靠,我们使用自己的轮询机制编写了overrode getElement,轮询间隔相当低,为100ms

这在不影响构建持续时间的情况下提高了测试的准确性

override def findElement(selector: By): WebElement = {
      val timeoutTime = System.currentTimeMillis() + timeout
      def helper(): WebElement = {
        try {
          super.findElement(selector)
        } catch {
          case exception: NoSuchElementException => {
            if (System.currentTimeMillis() >= timeoutTime) {
              throw exception
            } else {
              Thread.sleep(pollInterval)
              helper()
            }
          }
        }
      }
      helper()
    }

我强烈怀疑这种情况比你在这里发布的一行代码所暗示的要多。理论上,您是对的,如果找不到元素,隐式等待超时应该只等待完全超时。查看测试用例的实际代码可能会很有用,因为它已经开始执行得很差。了解这种情况是在所有浏览器中发生还是仅在一个浏览器中发生,以及是否只有一个浏览器或您仅在一个浏览器上运行,以及使用哪种浏览器和版本也是很有用的。谢谢您的回复。我们开始有同样的怀疑。不幸的是,由于遗留代码的扩展性,很难显示有用的代表性代码示例。。。我们正在寻找问题的根源。很高兴知道我们走在了正确的道路上——谢谢!问题更新了更多信息