FindElements会等多久?

时间:2018-05-31 04:33:23

标签: selenium selenium-webdriver

假设隐含超时为10秒。 然后我用一些XPath执行FindElements(复数!)。

问题

FindElements等待多长时间,直到决定返回? (请忽略任何语言的任何延迟执行功能。然后我将我的问题改为FindElements(...)。Count())

推理问题

我认为如果没有匹配则会等待10秒。 但是,如果至少有一场比赛,那么它会立即返回吗?在这种情况下,如果它们在10秒内被页面的javascript填充,我们将错过可能的以下元素。

我的一般问题如下:

  • 我们不想一直等待超时无条件(这将是糟糕的#1)
  • 我们不想错过超时内可用的任何匹配(这将是糟糕的#2

问题改述

关于FindElements行为,哪个不好(#1或#2)是现实?

1 个答案:

答案 0 :(得分:1)

此方法受执行时有效'implicit wait'次的影响。当隐式等待时,只要找到的集合中有超过0个项目,此方法就会返回,或者如果达到超时,则返回空列表。

你可以做什么,这样你就不会错过任何匹配是等待页面完全加载,方法是检查document.readyState是否等于完成,然后调用driver.findElements方法。 / p>

public void waitForPageLoaded() {
        ExpectedCondition<Boolean> expectation = new
                ExpectedCondition<Boolean>() {
                    public Boolean apply(WebDriver driver) {
                        return ((JavascriptExecutor) driver).executeScript("return document.readyState").toString().equals("complete");
                    }
                };