无论设置如何,始终在10秒钟内脱颖而出



我正在运行一个简单的WebDriverio脚本,并且插入任何数量的异步行为正在使其在10秒的阈值(或之前?(处超时。我想控制超时设置,但是无论我尝试什么,我都无法增加它。

当我使用Chromedriver时,并非所有硒设置都适用,并且设置browser.timeouts('implicit', 30000)(或scriptpageLoad(会抛出错误: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中使用过硒超时(implicitpageLoadscript(,但是我以前从未有过这种必需品,因为waitforTimeout&amp;摩卡的timeout对我的测试方案非常有效。

小提及:此语句inserting any amount of async behaviour is making it time out at the 10 sec threshold不正确。首先,WDIO完全异步。您可能正在使用sync: true标志,但是在幕后,一切仍然是异步的。

这是一个广泛的话题,我试图在手头的信息中尽可能多地介绍。抱歉,如果我没有完全回答您的问题。在评论中告诉我,我将尝试通过相关信息更新答案。

希望它有帮助。欢呼!

相关内容

  • 没有找到相关文章

最新更新