有没有办法期望元素最终出现在页面上?例如一种方法
browser.wait(protractor.ExpectedConditions.presenceOf(element(by.partialLinkText('Continue'))), 1000, 'Unable to find continue link');
因期望错误而不是超时而失败?本质上是一种在下面的行中使用 isEventuallyPresent()
而不是 isPresent()
的方法
expect(element(by.partialLinkText('Continue')).isPresent()).toBe(true);
作为引用,我正在使用 browser.ignoreSynchronization = true
,即使它是一个 Angular 应用程序,并且使用 Jasmine(至少目前如此)。
最佳答案
利用事实
browser.wait
返回一个 Promise,一旦条件函数返回 true,该 Promise 就会被解决;如果超时,该 Promise 将被拒绝。如果
expect
传递了一个 Promise,它仅在 Promise 解决时运行期望
您可以创建一个函数来包装对 browser.wait
的调用
function eventual(expectedCondition) {
return browser.wait(expectedCondition, 2000).then(function() {
return true;
}, function() {
return false;
});
}
然后创造一个期望
expect(eventual(protractor.ExpectedConditions.presenceOf(element(by.partialLinkText('Continue'))))).toBe(true);
或者,要使其在任何浏览器实例上工作,您可以对 Protractor 原型(prototype)进行猴子修补
protractor.Protractor.prototype.eventual = function(expectedCondition) {
return this.wait(expectedCondition, 2000).then(function() {
return true;
}, function() {
return false;
});
}
并且可以用作
expect(browser.eventual(protractor.ExpectedConditions.presenceOf(element(by.partialLinkText('Continue'))))).toBe(true);
为了避免超时,您必须确保传递给 browser.wait
的超时小于 Jasmine 异步测试超时,指定为 jasmineNodeOpts: {defaultTimeoutInterval: timeout_in_millis}
在 Protractor 配置文件中
关于angularjs - Protractor 期望元素最终出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37139499/