我正在运行一个简单的WebDriverio脚本,并且插入任何数量的异步行为正在使其在10秒的阈值(或之前?(处超时。我想控制超时设置,但是无论我尝试什么,我都无法增加它。
当我使用Chromedriver时,并非所有硒设置都适用,并且设置browser.timeouts('implicit', 30000)
(或script
或pageLoad
(会抛出错误:unknown error: unknown type of timeout:pageLoad
。
我发现的唯一其他超时是
- mochaopts.timeout
- waitfortimeout
这是我的测试:
it.only('should be able to register', ()=>{
// Mocha timeout
this.timeout(50000)
browser.url('/encounter/new');
browser.waitUntil( function() {
return browser.isExisting('[name=lastName]');
});
browser.setValue('#problem', 'something fishy');
// this is problematic: comment this out and everything works
// also works with very small timeouts
browser.executeAsync(function(done){
setTimeout(done, 1000);
});
browser.click('#appdetailsheader button');
console.log(browser.getUrl(), browser.log('browser'))
browser.waitUntil( function() {
return !browser.isExisting('[name=lastName]');
});
console.log(browser.getTitle(), browser.getUrl());
console.log(browser.log('browser'))
});
我完全可以理解您的挫败感。WebDriverio非常模块化&可配置,但这会带来更高的复杂性,通常会导致混乱。
为此:
// Mocha timeout
this.timeout(50000);
!!! 这没有效果,因为您在箭头函数中配置/设置摩卡式超时, 被摩卡咖啡所劝阻。在此处阅读有关的更多信息。
解决方案(选择适用于您的设置(:
- 使用 WebDreviverio test-Runner 运行脚本并设置
mochaOpts: { timeout: <desiredTimeout>}
,或者您甚至可以从测试运行中覆盖它:wdio wdio.config.js --mochaOpts.timeout=<desiredTimeout>
; - 在root
describe
语句中设置您的timeout
,甚至更好,在before
钩子中:before(function() { this.timeout(<desiredTimeout>); (...)});
; - 如果您使用Mocha运行测试案例,请将超时发送到CLI命令(如果您使用它来运行测试(:
mocha yourTestFile.js --timeout <desiredTimeout>
,或在mocha.opts
文件中更改其值;
注意:我敢肯定还有更多的方法可以做到这一点,但是这些对我有用。
为此:
browser.waitUntil( function() {
return browser.isExisting('[name=lastName]');
});
!!! 这将始终等待 element
的存在,并在计时之前,默认的1000 ms
属性name="lastName"
。可以通过waitforTimeout
更改此值。
解决方案(选择适用于您的设置(:
- 明确给您的
waitUntil...
/waitfor...
命令超时:browser.waitUntil( function() { return browser.isExisting('[name=lastName]');}, <desiredTimeout>, <errorMessage>);
; - 使用 WebDreviverio test-Runner 运行脚本并设置
waitforTimeout: <desiredTimeout>
,或者您甚至可以从测试运行中覆盖它:wdio wdio.config.js --waitforTimeout=<desiredTimeout>
;
最后,我尝试运行一些具有淫秽超时值(50000 ms
(的测试用例,并且它对您上面提到的每个问题都按预期工作。
waitfortimeout示例:
logs (1 failing (57s)
(:
[chrome #0-0] ConnectWeb Devices Content Test Suite
[chrome #0-0] 1) "before all" hook
[chrome #0-0]
[chrome #0-0]
[chrome #0-0] 1 failing (57s)
[chrome #0-0]
[chrome #0-0] 1) ConnectWeb Devices Content Test Suite "before all" hook:
[chrome #0-0] Oups! An error occured.
Timed out waiting for element ('span[connectqa-device="events"]') to exist
注意:我从未在WebDriverio中使用过硒超时(implicit
,pageLoad
,script
(,但是我以前从未有过这种必需品,因为waitforTimeout
&amp;摩卡的timeout
对我的测试方案非常有效。
小提及:此语句inserting any amount of async behaviour is making it time out at the 10 sec threshold
不正确。首先,WDIO完全异步。您可能正在使用sync: true
标志,但是在幕后,一切仍然是异步的。
这是一个广泛的话题,我试图在手头的信息中尽可能多地介绍。抱歉,如果我没有完全回答您的问题。在评论中告诉我,我将尝试通过相关信息更新答案。
希望它有帮助。欢呼!