首页 > 解决方案 > 关于 Selenium Webdriver 中隐式等待的问题

问题描述

我正在阅读有关使用 Webdriver 进行隐式等待的文档,但我不确定我是否完全理解。

据我了解,

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

这将在查找任何元素时设置 10 秒的超时。

这究竟是做什么的?

标签: seleniumselenium-webdriverautomated-tests

解决方案


这将查找元素最多 10 秒,尝试每 500 毫秒定位一次(默认超时)。

文档

指定驱动程序在搜索元素时应等待的时间(如果该元素没有立即出现)。

搜索单个元素时,驱动程序应轮询页面,直到找到该元素,否则此超时在引发 NoSuchElementException 之前到期。搜索多个元素时,驱动程序应轮询页面,直到找到至少一个元素或此超时已过期。

W3C 规范中描述了定位算法

Find Element、Find Elements、Find Element From Element 和 Find Elements From Element 命令允许查找单个元素和元素集合。元素检索搜索是使用与提供的选择器表达式匹配的文档节点的前序遍历来执行的。元素被序列化并作为 Web 元素返回。

当需要使用参数查找起始节点、使用和值时,远程端必须运行以下步骤:

  1. 让结束时间为当前时间加上会话隐式等待超时。

  2. 让定位策略等于使用。

  3. 让选择器等于值。

  4. 让返回的元素是尝试使用参数 start node 和 selector 调用相关元素定位策略的结果。

  5. 如果在元素定位策略执行过程中出现 DOMException、SyntaxError、XPathException 或其他错误,则返回错误无效选择器。

  6. 如果返回的元素为空且当前时间小于结束时间,则返回步骤4。否则,继续下一步。

  7. 让 result 是一个空的 JSON 列表。

  8. 对于返回的元素中的每个元素,将元素的序列化附加到结果中。

  9. 使用数据结果返回成功。

implicitlyWait定义一次WebDriver并持续其生命周期。


推荐阅读