条件等待与隐含等待-Selenium



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

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

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

当我将其与以下api版本的Linux一起使用时:Maven 3.1硒化物v3.5硒v2.53Firefox v45.0.1这样代码就不会花足够的时间来捕捉页面中的链接。然后我必须添加驱动程序等待,然后才能获得链接。I添加以下内容(这是有条件等待):

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

它运行得很好,我运行了不止一次

昨天运行它时我很惊讶,它没有工作,也没有足够的时间来获取链接!

因此,我将条件等待替换为隐式等待,并添加以下内容:

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

现在运行良好。

  • 发生了什么?

  • 是什么让它有时工作,有时不工作?

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

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

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

显式或条件等待会在指定的时间内停止WebDriver,直到上述元素可用。而隐式等待将为页面上未找到的每个元素跳过指定时间量的WebDriver执行。

希望这能有所帮助。

最新更新