selenium - 关于 Selenium Webdriver 中隐式等待的问题
问题描述
我正在阅读有关使用 Webdriver 进行隐式等待的文档,但我不确定我是否完全理解。
据我了解,
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
这将在查找任何元素时设置 10 秒的超时。
这究竟是做什么的?
这是否意味着在查找任何元素时,我每次都会等待 10 秒,即使该元素存在?或者,在查找任何元素时,驱动程序是否会给浏览器 10 秒的宽限期来加载该元素,然后再决定该元素是否丢失?
由于这适用于每个元素,我是否正确假设对于 Webdriver 的每个实例只执行一次?
解决方案
这将查找元素最多 10 秒,尝试每 500 毫秒定位一次(默认超时)。
从文档
指定驱动程序在搜索元素时应等待的时间(如果该元素没有立即出现)。
搜索单个元素时,驱动程序应轮询页面,直到找到该元素,否则此超时在引发 NoSuchElementException 之前到期。搜索多个元素时,驱动程序应轮询页面,直到找到至少一个元素或此超时已过期。
W3C 规范中描述了定位算法
Find Element、Find Elements、Find Element From Element 和 Find Elements From Element 命令允许查找单个元素和元素集合。元素检索搜索是使用与提供的选择器表达式匹配的文档节点的前序遍历来执行的。元素被序列化并作为 Web 元素返回。
当需要使用参数查找起始节点、使用和值时,远程端必须运行以下步骤:
让结束时间为当前时间加上会话隐式等待超时。
让定位策略等于使用。
让选择器等于值。
让返回的元素是尝试使用参数 start node 和 selector 调用相关元素定位策略的结果。
如果在元素定位策略执行过程中出现 DOMException、SyntaxError、XPathException 或其他错误,则返回错误无效选择器。
如果返回的元素为空且当前时间小于结束时间,则返回步骤4。否则,继续下一步。
让 result 是一个空的 JSON 列表。
对于返回的元素中的每个元素,将元素的序列化附加到结果中。
使用数据结果返回成功。
implicitlyWait
定义一次WebDriver
并持续其生命周期。
推荐阅读
- python - While 循环只运行一次,即使它之前运行良好
- swift - SwiftUI 将 var 从 View 传递给类
- c# - ModelState 验证使用 Ajax 调用和 JQuery 不显眼
- terraform - Terraform:检查机密是否存在于 azure Vault 中
- javascript - 使用 CSS 和 JS 使通知向右淡出/消失
- sql-server - Seek 运算符中使用包含的列
- excel - 如何加快 excel VBA 用户表单中的搜索结果?
- javascript - Javascript - 创建对象以推入数组
- vba - Microsoft 访问中的用户密码更改表单
- css - Gnome 标题栏调整大小的常见修复不能普遍适用