0

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

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

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

当我在 Linux 上使用这些 api 版本时: Maven 3.1 Selenide v3.5 Selenium v​​2.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);    

现在它工作正常。

  • 发生了什么?

  • 这是什么东西让它有时工作有时不能工作?

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

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

4

1 回答 1

0

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

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

希望这可以帮助。

于 2016-05-07T09:29:06.610 回答