我正在运行一个简单的WebDriverIO脚本,并且插入任何数量的异步行为会使它在10秒阈值(或之前?)超时。我想控制超时设置,但无论我尝试什么,我都无法增加它。
当我使用ChromeDriver时,并非所有Selenium设置都适用,设置browser.timeouts('implicit', 30000)
(或script
或pageLoad
)会引发错误:unknown error: unknown type of timeout:pageLoad
。
only other timeouts I have found
这是我的测试:
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'))
});
答案 0 :(得分:2)
我完全可以理解你的挫败感。 WebdriverIO非常模块化和可配置,但这会带来更高的复杂程度,这往往会导致混淆。
为此:
// Mocha timeout
this.timeout(50000);
!!! 这没有任何效果,因为您正在使用Mocha阻止的 arrow function 配置/设置Mocha超时。详细了解 here 。
解决方案(选择适用于您的设置):
mochaOpts: { timeout: <desiredTimeout>}
,或者您甚至可以在测试运行中覆盖它:wdio wdio.config.js --mochaOpts.timeout=<desiredTimeout>
; timeout
语句中设置describe
,或者甚至更好地在before
挂钩中设置before(function() { this.timeout(<desiredTimeout>); (...)});
; mocha yourTestFile.js --timeout <desiredTimeout>
,或更改{{1}中的值文件; 注意:我确信还有更多方法可以做到这一点,但这些方法对我有用。
为此:
mocha.opts
!!! 在超时之前,这将始终等待 browser.waitUntil( function() {
return browser.isExisting('[name=lastName]');
});
属性为element
的{{1}}。可以通过name="lastName"
更改此值。
解决方案(选择适用于您的设置):
1000 ms
/ waitforTimeout
命令提供超时:waitUntil...
; waitfor...
,或者您甚至可以在测试运行中覆盖它:browser.waitUntil( function() { return browser.isExisting('[name=lastName]');}, <desiredTimeout>, <errorMessage>);
; 最后,我尝试使用淫秽超时值(waitforTimeout: <desiredTimeout>
)运行一些测试用例,并且它对您上面提到的每个问题都按预期工作。
waitforTimeout示例:
记录(wdio wdio.config.js --waitforTimeout=<desiredTimeout>
):
50000 ms
注意:我之前从未在WebdriverIO中使用Selenium超时(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
,implicit
),但我之前从未有过这种必要性pageLoad
&amp; Mocha的script
对我的测试场景非常有效。
小提及:此声明waitforTimeout
不正确。首先,WDIO是完全异步的。您可能正在使用timeout
标志,但在幕后,一切仍然是异步的。
这是一个很大的话题,我试图尽可能多地报道手头的信息。对不起,如果我没有完全回答你的问题。在评论中告诉我,我将尝试用相关信息更新答案。
希望它有所帮助。干杯!