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

时间:2017-06-23 18:28:58

标签: webdriver selenium-chromedriver webdriver-io

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

当我使用ChromeDriver时,并非所有Selenium设置都适用,设置browser.timeouts('implicit', 30000)(或scriptpageLoad)会引发错误:unknown error: unknown type of timeout:pageLoad

only other timeouts I have found

  • 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'))
});

1 个答案:

答案 0 :(得分:2)

我完全可以理解你的挫败感。 WebdriverIO非常模块化和可配置,但这会带来更高的复杂程度,这往往会导致混淆。

为此:

 // Mocha timeout
 this.timeout(50000);

!!! 这没有任何效果,因为您正在使用Mocha阻止的 arrow function 配置/设置Mocha超时。详细了解 here

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

  • 使用 WebdriverIO test-runner 运行您的脚本并设置mochaOpts: { timeout: <desiredTimeout>},或者您甚至可以在测试运行中覆盖它:wdio wdio.config.js --mochaOpts.timeout=<desiredTimeout>;
  • 在您的根timeout语句中设置describe,或者甚至更好地在before挂钩中设置before(function() { this.timeout(<desiredTimeout>); (...)});;
  • 如果您使用Mocha运行测试用例,请将超时传递到CLI命令(如果您使用它来运行测试):mocha yourTestFile.js --timeout <desiredTimeout>,或更改{{1}中的值文件;

注意:我确信还有更多方法可以做到这一点,但这些方法对我有用。

为此:

mocha.opts

!!! 在超时之前,这将始终等待 browser.waitUntil( function() { return browser.isExisting('[name=lastName]'); }); 属性为element的{​​{1}}。可以通过name="lastName"更改此值。

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

  • 明确地为您的1000 ms / waitforTimeout命令提供超时:waitUntil...;
  • 使用 WebdriverIO test-runner 运行您的脚本并设置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标志,但在幕后,一切仍然是异步的。

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

希望它有所帮助。干杯!