无论设置如何,总是在 10 秒时超时

Always times out at 10 seconds regardless of setting

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

由于我使用的是 ChromeDriver,并非所有的 Selenium 设置都适用,设置 browser.timeouts('implicit', 30000)(或 scriptpageLoad)将抛出错误: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'))
});

我完全能理解你的沮丧。 WebdriverIO 是高度模块化和可配置的,但这带来了更高的复杂性,这往往会导致混淆。


为此:

 // Mocha timeout
 this.timeout(50000);

!!! 这没有效果,因为你 configuring/setting 你的摩卡超时 arrow function which is discouraged by Mocha. Read more about it here .

解决方案(选择适用于您的设置):

  • 运行 你的脚本 WebdriverIO test-runner 并设置 mochaOpts: { timeout: <desiredTimeout>},或者你甚至可以从你的测试中覆盖它 运行 : wdio wdio.config.js --mochaOpts.timeout=<desiredTimeout>;
  • 在你的根 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]');
  });

!!! 这将始终等待具有属性 name="lastName"element 存在,默认 1000 ms 超时.该值可以通过 waitforTimeout 更改。

解决方案(选择适用于您的设置):

  • 明确给你的 waitUntil.../waitfor... 命令超时:browser.waitUntil( function() { return browser.isExisting('[name=lastName]');}, <desiredTimeout>, <errorMessage>);
  • 运行 你的脚本 WebdriverIO test-runner 并设置 waitforTimeout: <desiredTimeout>,或者你甚至可以从你的测试中覆盖它 运行 : wdio wdio.config.js --waitforTimeout=<desiredTimeout>;

最后,我尝试了 运行 几个具有令人厌恶的超时值 (50000 ms) 的测试用例,并且对于您上面提到的每个问题,它都按预期工作。

waitforTimeout 示例:

日志 (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 中使用过 Selenium 超时(implicitpageLoadscript),但我从来没有之前有过这种必要性,因为 waitforTimeout 和 Mocha 的 timeout 对我的测试场景非常有效。

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

这是一个很大的话题,鉴于手头的信息,我试图尽可能多地涵盖。对不起,如果我没有完全回答你的问题。在评论中告诉我,我会尝试用相关信息更新答案。

希望对您有所帮助。干杯!