是否有一种方法可以期望元素最终出现在页面上?例如一种方法
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,尽管它是一个棱角的应用程序,并且使用茉莉花(至少目前是这样)。
发布于 2016-05-11 10:18:44
利用事实
browser.wait返回一个承诺,一旦条件函数返回真实,这个承诺就会得到解决,如果超时,则返回拒绝。expect被传递给一个承诺,它只在承诺被解析时运行期望。您可以创建一个函数来包装对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原型进行猴子补丁。
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}。
发布于 2016-05-11 04:06:45
与presenceOf一起使用的browser.wait()预期条件允许在测试中有一行:
var EC = protractor.ExpectedConditions;
browser.wait(EC.presenceOf(element(by.partialLinkText('Continue'))), 1000, 'Unable to find continue link');其中EC是protractor.ExpectedConditions -我通常通过global命名空间在onPrepare()中使用把它变成全球性的。
请注意,如果发生故障,则会出现超时错误,但需要使用Unable to find continue link错误描述。
顺便提一句,提供有意义的自定义错误描述非常重要,就像您已经做过的那样。如果要强制执行,则有一个插件 to ESLint静态代码分析工具,如果存在没有显式错误描述文本的browser.wait(),则为会警告你。
https://stackoverflow.com/questions/37139499
复制相似问题