我有几个量角器测试,有时我会收到错误说:
Message:
timeout: timed out after 10000 msec waiting for spec to complete
Stacktrace:
undefined
它可能会在某些测试中随机发生。 我通常在BrowserStack上测试,它在3-5版本中显示错误一次。但最近我尝试了SauceLabs几乎每一个(每个!)但并非所有的测试都失败了。可能,SauceLabs只是显着变慢,所以我更经常地得到错误......
以下是问题:
以下是示例:
it('should check that login gives error on empty or incorrect email', function () {
p.get('/#/login');
p.findElement(protractor.By.css('button[type="submit"]')).click();
expect(p.findElement(protractor.By.css('.alert-danger')).getText()).toEqual('E-mailadres is niet geldig');
p.findElement(protractor.By.model('user.email')).sendKeys('test-1xtc.vc');
p.findElement(protractor.By.css('button[type="submit"]')).click();
expect(p.findElement(protractor.By.css('.alert-danger')).getText()).toEqual('E-mailadres is niet geldig');
p.findElement(protractor.By.model('user.email')).clear();
});
该应用正在使用 AngularJS,硒2.20,量角器0.20.1
答案 0 :(得分:3)
在Protractor / Selenium中是否有办法改变测试运行超时?
是:)您可以通过量角器配置中的allScriptsTimeout
(来自Protractor FAQ)
您还可以在defaultTimeoutInterval
选项中设置jasmineNodeOpts
(来自Protractor referenceConf.js)
为什么我经常收到错误?我的测试有什么问题吗?大多数似乎并不复杂或长期运行。再次,在本地机器上,它几乎总是很好。
很难说没有看到你的测试。你提供的例子对我来说很好。
答案 1 :(得分:2)
您的项目是一个angularjs项目吗?你在某处使用任何$ interval或$ timeout服务?如果是这样,请尝试使用$ interval而不是$ timeout并尝试调整可选的'计数'参数为1,例如(https://docs.angularjs.org/api/ng/service/ $ interval#usage)。 我最近遇到了类似的问题,我就这样解决了。
答案 2 :(得分:1)
我使用config
文件的不同属性解决了这个问题,我在上面的答案中没有看到。
getPageTimeout : 100000 //in millis, i.e., 100 secs
答案 3 :(得分:0)
我相信酱油的默认时间是90秒。它可以使用idleTimeout变量通过conf.js文件进行更改,该变量的值为秒。例子
idleTimeout = 90; // equals 90 seconds
exports.config = {
//Includes test sub-sub-foldersbefore any tests in sub folders
specs: ['tests/*/*/*.js', 'tests/*/*.js', ],
// use jasmine 2
framework: 'jasmine2',
capabilities : {
browserName: "chrome",
// this takes seconds so 120 would be 120 seconds.
idleTimeout = 120;
},
},
现在,如果您需要更改特定规格文件的值,您可以在spec文件中使用它,当然如果您的saucelabs idleTimeout低于此值,那么它将首先在saucelabs上超时。或者如果您的saucelabs值更高但DEFAULT_TIMEOUT_INTERVAL更低,那么它将超时。
// this takes in miliseconds so 1000 = 1 second
jasmine.DEFAULT_TIMEOUT_INTERVAL = 120000;
答案 4 :(得分:0)
Jasmine对每个规范都有超时,即jasmine框架中的每个it
。因此,如果任何规范(it
)超过jasmine规范的默认超时,那么它将失败该规范。
<强>解决方案强>:
要覆盖单个规范的jasmine规范超时,请将第三个参数传递给它:
it(description, testFn, timeout_in_millis)
it('description of test case', function() {
/*your test
steps
here*/
},120000);//120 seconds timeout for this spec
的更多信息