我正在编写一个用于测试AngularJS Web应用程序的中间件框架,我希望能够等待某些条件得到满足,然后再继续我的测试中的另一个操作。我对Protractor相当新,从我在他们的文档和其他论坛中找到的内容,使用browser.driver.wait
或使用Condition
或{{1}的类似技术有几种不同的方法可以做到这一点包含此answer。
我特别想要实现的是遵循我的框架中的页面对象模型设计,并允许每个页面提供自己的功能来确定该页面是否在浏览器中可见。为了做到这一点,我最终编写了如下的页面对象:
promise
我正试图解决两个问题:
var pages = {
home: {
name: 'home',
url: server + '/#/home',
title: 'Home',
isVisible: until.titleIs(this.title)
},
...
}
未定义。我还没有找到正确的方法来使用这个对象,我的所有搜索都会导致等待元素可见或预期条件成立的替代方法。如何直接访问此对象?那,这被认为是糟糕/过时的设计吗?假设我找到了直接使用until
对象的方法,我可以在Protractor源代码中看到until
函数返回until.titleIs()
,所以我的下一个问题我是如何使用这个Condition
对象在等待结束(或超时)后得到它的布尔结果?我需要针对一些特殊情况执行此操作,例如:
Condition
我真的很感谢你对此的帮助!
答案 0 :(得分:1)
until
是protractor.ExpectedConditions
个对象。我将全局定义它,将以下内容放入配置中的onPrepare()
函数中:
onPrepare: function () {
global.until = protractor.ExpectedConditions;
},
关于你的第二个问题,我会让isVisible
成为一个函数,它会返回一个承诺:
isVisible: function () {
return browser.wait(until.titleIs(this.title), 5000).then(function () {
return true;
},
function () {
return false;
});
},
然后,您可以在测试中看到它:
expect(myPageObject.isVisible()).toBe(true);