selenium - FindElements 会等多久?
问题描述
假设隐式超时为 10 秒。然后我用一些 XPath 执行 FindElements(复数!)。
问题
FindElements 等待多长时间,直到决定返回?(请忽略任何语言的任何延迟执行功能。然后我将我的问题改写为 FindElements(...).Count())
推理问题
我想如果没有匹配,那么它将等待 10 秒。但是,如果至少有一场比赛,那么它会立即返回吗?在这种情况下,如果它们在 10 秒内由页面的 javascript 填充,我们将错过可能的以下元素。
我的一般问题如下:
- 我们不想一直无条件地等待超时(这会很糟糕#1)
- 我们不想错过任何在超时内可用的匹配(这会很糟糕#2
问题改写
关于 FindElements 行为,哪个不好(#1 或 #2)是现实?
解决方案
此方法受'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");
}
};
推荐阅读
- javascript - 将 prettier 作为 NPM 包安装和在 VS Code 中安装 prettier 扩展有什么区别
- javascript - Chrome 质疑任何在此文本框中输入文本的方式?
- python-3.x - 使用 Selenium Python3 向文本区域发送密钥
- vue.js - 即使前端源具有 https URL,是什么让浏览器从 http URL 加载内容?
- javascript - 如何从表中获取所有单元格值并使用 jquery 或 js 转换为 json
- r - 有没有办法循环通过不同级别的因素进行异常检测
- java - 使用 Firestore 数据库在 Android 应用程序中设置分页查询
- svg - 将SVG圆转换为具有特定点数的路径?
- python - 由于 __init__.pyi 文件,xmlsec 在新版本中被破坏
- amazon-s3 - 如何检查 Noobaa 存储桶的内容