深入理解testcafe超时时间,优化自动化测试
testcafe能够操作元素的先决条件
testcafe不能和看不见的元素做交互。testcafe将下面这三类元素认定为看不见的元素:
display:none
visibility: hidden or collapse
width:0;
height:0
此外,testcafe还提供了方法去筛选出来可见元素:
const visibleSelectors = Selector('div').filterVisible();
当尝试操作看不见的元素时,testcafe会报下面的错误:
ERROR: the element that matches the specififed selector is not visible
超时时间
超时时间是等待元素或页面加载的最大时间,是最大等待时间,如果在超时时间内元素没有加载出来或者操作无法完成,测试脚本会自动失败。在测试框架中设置合理的超时时间可以保证测试用例能够在规定时间内完成执行,避免测试用例长时间挂起或者失败。
testcafe的超时时间分类
超时类型 | 解释 | 默认超时时间 |
---|---|---|
selectorTimeout | 等待元素出现的最大时间 | 10000ms |
assertionTimeout | 断言会尝试多次执行在这段等待时间内 | 3000ms |
pageLoadTimeout | 从DOMContentLoaded--> window.load的最大间隔时间[2] | 3000ms |
ajaxRequestTimeout | 等待XHR响应的最大时间 | 120000ms |
pageRequestTimeout | 等待HTML页面的最大时间 | 25000ms |
browserInitTimeout | Testcafe连接到浏览器并且浏览器准备了测试的最大等待时间 | 本地浏览器:120000ms远程浏览器:360000ms |
testExecutionTimeout | 单个测试用例执行的最大时间 | 无 |
runExecutionTimeout | 整个测试脚本(包含这一次运行时指定的所有测试用例)的最大执行时间 | 无 |
智能断言查询机制
Testcafe会在默认的最大断言等待时间内重复进行断言,直到断言成功或超时为止,因为有默认的断言超时时间,所以我们在写代码时无需手动指定等待时间。例如,当用户点击保存后,校验页面是否有成功信息展示,但由于保存到数据库和获取返回结果需要一定的时间,立即急性断言可能会失败。Testcafe的智能断言查询机制很好的解决了这个问题。
但是,智能断言查询机制有适用范围,只有当第一个操作符符号属于以下类别时,断言才会自动重试
1. client functions
2. Selector 属性 (Selector有哪些属性可以在断言中用,可以通过查询DOMNodeState object API[1]
3. HTTP requests and responses
容易混淆的点
selectorTimeout对Selector.exists 和 Selector.count 属性不起作用,如果想对 Selector.exists 和 Selector.count 增加超时时间,是断言的超时时间。
参考文档
[1]: DOMNodeState API
[2]: Navigation timing