首页 > 解决方案 > FindElements 会等多久?

问题描述

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

问题

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

推理问题

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

我的一般问题如下:

问题改写

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

标签: seleniumselenium-webdriver

解决方案


此方法受'implicit wait'执行时有效时间的影响。隐式等待时,一旦找到集合中的项超过 0 个,此方法将立即返回,或者如果达到超时将返回一个空列表。

为了避免错过任何匹配,您可以做的是等待页面完全加载,方法是检查document.readyState是否等于完成,然后调用该driver.findElements方法。

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

推荐阅读