Selenium FindElements将等待多长时间?

Selenium FindElements将等待多长时间?,selenium,selenium-webdriver,Selenium,Selenium Webdriver,假设隐式超时为10秒。 然后我用一些XPath执行FindElements(复数!) 问题 FindElements等待多长时间,直到决定返回?(请忽略任何语言的任何延迟执行功能。然后我将我的问题重新表述为FindElements(…).Count()) 推理问题 我想如果没有比赛,它将等待10秒。 然而,如果至少有一个匹配,那么它会立即返回吗?在本例中,如果在10秒内使用页面的javascript填充下列元素,我们将错过这些元素 我的一般问题如下: 我们不希望一直无条件地等待超时(这将是糟糕

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

问题

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

推理问题

我想如果没有比赛,它将等待10秒。 然而,如果至少有一个匹配,那么它会立即返回吗?在本例中,如果在10秒内使用页面的javascript填充下列元素,我们将错过这些元素

我的一般问题如下:

  • 我们不希望一直无条件地等待超时(这将是糟糕的#1)
  • 我们不想错过任何在超时时间内可用的比赛(这将是糟糕的#2)
问题重新表述


哪个坏(#1或#2)关于FindElements行为,这是事实吗?

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

为了不丢失任何匹配项,您可以通过检查是否等于complete来等待页面完全加载,然后调用
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");
                    }
                };
public void waitForPageLoaded(){
预期条件预期=新
期望条件(){
公共布尔应用(WebDriver驱动程序){
return((JavascriptExecutor)driver.executeScript(“return document.readyState”).toString().equals(“complete”);
}
};

我已经使用document.readyState。不幸的是,当动态页面加载并用ajax填充表格时,它不能使用(根据我的经验,始终是“完整的”。你能给我们提供更多关于有问题的web元素和应用程序所使用的web开发框架的详细信息吗?页面上肯定有一些视觉指示器,让最终用户知道页面加载已完成。请尝试显式等待这些元素,而不是您是否有mi足够多的元素,这样您就可以继续了?如果是这样,您就可以放弃隐式等待,转而使用ExpectedCondition->