我怎样才能访问'直到'直接在Protractor中对象?

时间:2016-01-15 20:54:28

标签: javascript angularjs testing protractor pageobjects

我正在编写一个用于测试AngularJS Web应用程序的中间件框架,我希望能够等待某些条件得到满足,然后再继续我的测试中的另一个操作。我对Protractor相当新,从我在他们的文档和其他论坛中找到的内容,使用browser.driver.wait或使用Condition或{{1}的类似技术有几种不同的方法可以做到这一点包含此answer

我特别想要实现的是遵循我的框架中的页面对象模型设计,并允许每个页面提供自己的功能来确定该页面是否在浏览器中可见。为了做到这一点,我最终编写了如下的页面对象:

promise

我正试图解决两个问题:

  1. 首先,我收到一条错误消息,指出var pages = { home: { name: 'home', url: server + '/#/home', title: 'Home', isVisible: until.titleIs(this.title) }, ... } 未定义。我还没有找到正确的方法来使用这个对象,我的所有搜索都会导致等待元素可见或预期条件成立的替代方法。如何直接访问此对象?那,这被认为是糟糕/过时的设计吗?
  2. 假设我找到了直接使用until对象的方法,我可以在Protractor源代码中看到until函数返回until.titleIs(),所以我的下一个问题我是如何使用这个Condition对象在等待结束(或超时)后得到它的布尔结果?我需要针对一些特殊情况执行此操作,例如:

    Condition
  3. 我真的很感谢你对此的帮助!

1 个答案:

答案 0 :(得分:1)

untilprotractor.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);