WATIR 7.0.0.beta5出现WindowCollection索引报错及超时参数配置疑问
WATIR 7.0.0.beta5 问题解答
1. @browser.windows.last.use 报错原因
WATIR 7.x 版本重构了窗口管理逻辑,由于不同浏览器驱动的窗口排序规则不统一、且窗口顺序会随着新窗口打开/旧窗口关闭动态变化,依赖索引(包括first、last、[下标])访问WindowCollection的操作本身存在不可靠的偶发问题,因此7.x版本直接拦截了这类访问方式,抛出indexing not reliable on WindowCollection报错。
你可以通过两种方式修复该问题:
- 优先使用属性匹配定位目标窗口,稳定性更高,示例:
# 按完整标题匹配 @browser.window(title: "目标窗口标题").use # 按URL关键字模糊匹配 @browser.window(url: /example.com/).use - 如果确实需要按打开顺序取最后一个窗口,可将窗口集合转为数组后再操作,示例:
@browser.windows.to_a.last.use
2. 超时参数设置说明
WATIR 7.x 调整了capabilities的传递逻辑,需要分别单独设置page_load_timeout和read_timeout,两个参数作用互不重叠:
page_load_timeout:控制浏览器加载完整页面的最长等待时间,超时后会抛出页面加载异常read_timeout:控制测试脚本与浏览器驱动通信时,发送指令后等待驱动返回结果的最长时间,适用于所有Selenium指令的响应等待
3. open_timeout参数作用
open_timeout是测试脚本与浏览器驱动/远端Selenium节点建立TCP连接的最长等待时间,仅作用于连接建立阶段。本地启动浏览器测试时默认值足够使用,如果你使用远端Selenium Grid执行测试,可以根据网络环境适当调大该参数避免连接失败。
内容的提问来源于stack exchange,提问作者Rajagopalan
相关产品推荐
相关产品推荐

