javascript - 如何在 Protractor 中直接访问 'until' 对象?

标签 javascript angularjs testing protractor pageobjects

我正在编写一个用于测试 AngularJS 网络应用程序的中间件框架,我希望能够等待满足某些条件,然后再继续测试中的另一个操作。我是 Protractor 的新手,根据我在他们的文档和其他论坛中发现的内容,有几种不同的方法可以使用 browser.driver.wait 或使用 的类似技术来做到这一点包含此 answer 的条件 promise .

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

var pages = {
  home: {
    name: 'home',
    url: server + '/#/home',
    title: 'Home',
    isVisible: until.titleIs(this.title)
  },
  ...
}

有两个问题我正在努力解决并解决:

  1. 首先,我收到一条错误消息,提示 until 未定义。我还没有找到使用这个对象的正确方法,我的所有搜索都导致了等待元素可见或预期条件为真的替代方法。我怎样才能直接访问这个对象?而且,这是否被认为是糟糕/过时的设计?
  2. 假设我找到了一种直接使用 until 对象的方法,我可以在 Protractor 源代码中看到 until.titleIs() 函数返回一个Condition,所以我的下一个问题是在等待结束(或超时)后如何使用此 Condition 对象获取其 bool 结果?对于某些特殊情况,我需要执行此操作,例如:

    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
    

非常感谢您对此的帮助!

最佳答案

untilprotractor.ExpectedConditions目的。我会在全局范围内定义它,将以下内容放入配置中的 onPrepare() 函数中:

onPrepare: function () {
    global.until = protractor.ExpectedConditions;
},

关于你的第二个问题,我会让 isVisible 成为一个函数,它会返回一个 promise :

isVisible: function () {
    return browser.wait(until.titleIs(this.title), 5000).then(function () {
        return true;
    },
    function () {
        return false;
    });
},

然后,您可以在测试中期待它:

expect(myPageObject.isVisible()).toBe(true);

关于javascript - 如何在 Protractor 中直接访问 'until' 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34819695/

相关文章:

Javascript代码执行顺序

javascript - 如何使用 jQuery 和 HTML 5 制作一些动画?

javascript - AngularJS 未知提供程序错误(Firebase 和 AngularFire)

javascript - 如何使用 ng-model 为复选框发布值?

javascript - 如何在 Web API 中正确注入(inject) Angular 模块的依赖项?

java - 对具有同一项目的不同版本的所有子目录运行 JUnit 测试

ruby-on-rails - RSpec 无法在共享示例中使用定义的变量

javascript - 将数组排序为具有键和值对的对象,具有相同值的对象被插入相同的键/值

javascript - window.popstate之后如何恢复原来的内容?

javascript - 当订单很重要时,如何在嵌套 promise 中使用 Jasmine 时钟(setTimeout)? (jasmine.DEFAULT_TIMEOUT_INTERVAL 错误)