条件等待vs implicitlyWait -Selenium

时间:2016-05-07 06:48:11

标签: selenium selenium-webdriver automated-tests selenide

请帮助我理解以下问题。请。

我必须获取所有链接并稍后检查它们。我使用了以下代码:

open(url);
List<String> links = new ArrayList<>();
for (SelenideElement link : $$("a"))
    links.add(link.attr("href"));

当我在Linux上使用这些api版本时:     Maven 3.1     Selenide v3.5     硒v2.53     Firefox v45.0.1 然后代码不能花时间来捕获页面中的链接。然后我必须在获取链接之前添加驱动程序等待。 我添加以下内容(这是条件等待):

WebDriverWait waitLog = new WebDriverWait(WebDriverRunner.getWebDriver(), 20);
waitLog.until(ExpectedConditions.visibilityOf($(By.tagName(Selector))));

它工作正常,我运行了一次以上。

  

我昨天跑步时感到很惊讶,它没有用,也没时间得到链接!

所以我用隐式等待替换条件等待,并添加以下内容:

WebDriverRunner.getWebDriver().manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);    

现在工作正常。

  • 发生什么事了?

  • 这件事有时会让它起作用,有时却无法发挥作用?

  • 如何在保持代码正常运行的情况下返回条件等待?

那么如何恢复这个问题呢?并防止将来发生此问题。

1 个答案:

答案 0 :(得分:0)

第二次加载网址可能会有一些延迟。请尝试增加条件等待的延迟时间。显式和隐式等待的主要区别如下。

显式或条件等待会使WebDriver停止指定的时间,直到提到的元素可用。而对于页面上找不到的每个元素,隐式等待将跳过WebDriver执行指定的时间。

希望这有帮助。