我正在使用Protractor
和Jasmine
为Angular2
应用程序编写e2e测试用例。
我有两个问题:
1.关于DefaultTimeoutInterval
我知道每当一个承诺开始时倒计时开始,如果承诺没有在defaultTimeoutInterval
中指定的protractor.conf.js
内完成,量角器将导致控制台出错。但如果承诺在defaultTimeoutInterval
内完成,那么倒计时将被重置并在下一个承诺开始时开始。
如果上述情况属实,我想澄清一下,如果我有一系列承诺,那么倒计时什么时候重置?在链中的所有承诺完成之后还是在每个承诺完成之后?
如果在链中的所有承诺完成后倒计时重置,那么正确的做法是将承诺作为it()/fit() blocks
的直接子女吗?
我在下面有一个示例代码来解释我想要问的更多内容。
it("when does protractor's default timeout interval gets reset?", () => {
expect("a single promise here").toBe('something'); // I believe, after the promise inside the expect block finishes, the defaultTimeoutInterval should Reset.
// what happens if I have a chain of promises, like below?
// whether the defaultTimeoutInterval resets after every single promise inside the method `validateSuccessAlert()` and then the chained promises are finsihed?
// or will it reset on completion of every single promise?
PO.validateSuccessAlert('a method which has chained promises inside itself, returns a promise').then(() => {
browser.waitForAngularEnabled(false).then(() => {
PO.getEmailActivationLink('xxxxxx').then((activationCode) => {
PO.openNewTab(activationCode).then(() => {
PO.switchToTab(1).then(() => {
expect(PO.isVisible(element(by.css('.activateMailBox h3 small')))).toBeTruthy();
expect(element(by.css('.activateMailBox h3 small')).getText()).toBe('Congratulations!!');
expect(PO.isNotVisible(PO.getButtonByText('Proceed')));
PO.switchToTab(0);
browser.waitForAngularEnabled(true); // Re-enable the angular wait
})
})
});
});
})
})
2.关于allScriptsTimeout
我真的不明白这一点,这是重要的:每个文件中有一个规格?如果你能解释一下这一点,那就太好了。
1)defaultTimeoutInterval是每个it
的jasmine超时,不会让测试运行永久或很长 - http://www.protractortest.org/#/timeouts#timeouts-from-jasmine
将其设置为您认为it
不应超过的默认值。如果您的测试使用以下语法运行的次数远远少于或超过默认超时,则覆盖:
describe('Some feature', function () {
it('can be really slow', function () {
}, 5 * 60 * 1000) // 5 minutes
it('can be really fast', function () {
}, 5000) //5 seconds
})
2)allScriptsTimeout是量角器中EACH异步命令的超时,不执行太长时间。
http://www.protractortest.org/#/timeouts#timeouts-from-webdriver
我通常不会设置超过10秒,不要使每个命令(如.sendKeys(),。click()等)花费很多时间。有时需要在网格中运行时增加,或者制作一些长命令,如巨大的.executeScript()等。