用 Selenium WebDriver 等待构建稳定测试
根据浏览器可观察契约选择 Selenium 等待,让授权测试清晰、可诊断并保持稳定。
暂停只能说明时间流逝。有效等待要说明可观察状态,以及状态未出现时的结果,这样慢页面和错误页面可以区分。
导航、按钮启用、数据到达、新窗口和动态框架都是不同的异步边界,每个边界都应有自己的观察条件。
从用户可见结果开始,例如确认标题或状态区域。Selenium WebDriver 文档说明协议,应用负责定义契约。
将等待匹配浏览器边界
显式条件应只负责一件事。可见并不代表远端更新完成,可点击也不代表结果已经渲染。
选择稳定且有文档的属性,不要依赖动画期间出现的样式类。应用支持的就绪属性通常是更清晰的信号。
Selenium 等待指南区分隐式、显式和流式等待。隐式策略应保持简单。
让定位器表达状态
依据可见标签、无障碍角色或稳定测试标识定位,能表达元素为何重要。生成类名和表格位置容易变化。
把查找和状态断言分开:定位控件、等待可用、执行一次动作,再等待结果。负向路径要等待预期错误。
重复助手应使用契约名称,例如 wait_for_order_confirmation,断言应落在用户能看到的语义表面。
明确处理导航、框架和窗口
到达 URL 不代表主视图准备完成。等待可见里程碑,再检查应用结果,不要把所有测试绑定到用户看不到的网络事件。
打开窗口后等待新句柄,切换并等待其里程碑。动态框架需要等待、进入并明确返回原上下文。
被阻止的窗口和重定向是结果类别。不要自动重复可能已经成功的动作。
用诊断证据取代时间猜测
超时应指出缺失条件、定位器、当前 URL、版本和尝试次数。截图等工件必须遵守隐私规则。
先区分陈旧元素、不可交互元素和超时,再调整时限。Selenium 呈现观察结果,但不解释服务端决定。
使用有界轮询。如果页面变慢,先确认信号仍代表用户可见状态,而不是简单增加等待。
明确配置文件和驱动的所有权
驱动、浏览器、配置文件和 fixture 组成兼容单元。记录输入,为并发会话分配不同目录,并正常关闭驱动。
BotBrowser 为授权流程提供 ChromeDriver 兼容和 Selenium Grid 集成,但不保证所有版本和配置,也不替代等待策略。参阅 Selenium 配置文件指南和浏览器交互验证。
跨主机检查应比较约定结果,而非要求偶然时序一致。操作系统、驱动、图形路径和网络都会改变到达时间。
把决定转成可维护测试
稳定旅程是一条链:声明合成状态、定位可见控件、等待可用、执行一次动作并等待下一个结果。为每个边界命名。
界面改变时同时更新定位器、条件、断言和失败消息,包括拒绝和权限路径。
合并前使用干净且自有的配置文件和记录版本,确认成功与失败都关闭驱动,工件只包含合成数据。
状态表记录起始上下文、动作、结束条件和缺失证据,让页面与测试负责人达成一致。
只有当应用文档保证后续控件安全时,加载指示器消失才是可靠信号。轮询函数不应产生副作用。
为每个边界设置独立预算,允许重试时创建新会话并明确标记。
用保持某个就绪信号的 fixture 演练失败路径;应得到有界且具体的超时,而不是跳过断言的绿色测试。
BotBrowser 为授权流程提供 ChromeDriver 和 Selenium Grid 支持,但不保证每个版本,也不替代等待策略、应用就绪契约或配置文件清理。
评审记录保存契约、预算、负责人和证据,让每次界面变化都有明确责任人。