Javascript 如何访问';直到';物体直接在量角器中?
我正在编写一个用于测试AngularJS web应用程序的中间件框架,我希望能够等待某些条件得到满足,然后再进行测试中的另一个操作。我对量角器相当陌生,从我在他们的文档和其他论坛中发现的情况来看,有几种不同的方法可以使用Javascript 如何访问';直到';物体直接在量角器中?,javascript,angularjs,testing,protractor,pageobjects,Javascript,Angularjs,Testing,Protractor,Pageobjects,我正在编写一个用于测试AngularJS web应用程序的中间件框架,我希望能够等待某些条件得到满足,然后再进行测试中的另一个操作。我对量角器相当陌生,从我在他们的文档和其他论坛中发现的情况来看,有几种不同的方法可以使用browser.driver.wait或使用条件或承诺的类似技术来实现这一点 我特别想要实现的是遵循框架中的页面对象模型设计,允许每个页面提供自己的功能,以确定该页面在浏览器中是否可见。为此,我最终编写了页面对象,如下所示: var pages = { home: {
browser.driver.wait
或使用条件
或承诺
的类似技术来实现这一点
我特别想要实现的是遵循框架中的页面对象模型设计,允许每个页面提供自己的功能,以确定该页面在浏览器中是否可见。为此,我最终编写了页面对象,如下所示:
var pages = {
home: {
name: 'home',
url: server + '/#/home',
title: 'Home',
isVisible: until.titleIs(this.title)
},
...
}
var condition = until.titleIs('some title');
var result = browser.wait(condition, timeout).then(function(res) { return res; });
if (result)
// do something
else
// do another thing
有两个问题我正在努力解决:
until
是未定义的。我还没有找到正确的方法来使用这个对象,我所有的搜索都导致了等待元素可见或预期条件为真的替代方法。如何直接访问此对象?而且,这是否被认为是糟糕/过时的设计until
对象的方法,我可以在量角器源代码中看到until.titleIs()
函数返回一个条件
,那么我的下一个问题是如何使用这个条件
对象在等待结束(或超时)后获得布尔结果?对于某些特殊情况,我需要这样做,例如:
var pages = {
home: {
name: 'home',
url: server + '/#/home',
title: 'Home',
isVisible: until.titleIs(this.title)
},
...
}
var condition = until.titleIs('some title');
var result = browser.wait(condition, timeout).then(function(res) { return res; });
if (result)
// do something
else
// do another thing
直到对象为
。我将全局定义它,将以下内容放入配置中的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);
谢谢@alecxe。有道理,我会试试看。如果我正确理解了您的答案,那么为了能够使用此承诺作为条件,我必须执行如下操作:browse.wait(直到.titleIs(this.title),5000)。然后(function(res){If(res)do this;else do that;});对吗?@exfounda如果您需要使用
isVisible
结果来做出某种决定:myPageObject.isVisible().then(函数(res){if(res)do smth else do smth else})代码>。。希望有帮助,明白了。最后一个问题。。。在第一种情况下,使用browser.wait(条件,超时)。然后使用(func1,func2)
,当等待时间超过超时时,是否使用第二个函数func2
?此解决方案非常有效。非常感谢你!