循环通过量角器中的键/值对Promises

时间:2015-10-27 15:25:16

标签: javascript angularjs promise protractor

我使用量角器来测试一系列网页(实际上大多是一个Angular设计的网页,但其他网页也是如此)。我创建了一系列页面对象来处理这个问题。为了最大限度地减少代码维护,我创建了一个具有键值对的对象,如下所示:

var object = {
    pageLogo: element(by.id('logo')),
    searchBar: element.all(by.className('searchThing')),
    ...
    };

假设我只需要在对象中添加一些内容,使其在页面对象文件中的任何位置都可用。当然,该文件具有函数(假设您不熟悉页面对象模式):

var pageNamePageObject = function () {
var object = {...};  //list of elements
this.get = function() {
    brower.get('#/someWebTag');
}
this.getElementText = function(someName){
     if (typeof someName == 'number')
            ... (convert or handle exception, whatever)
     return object[name].getText();
}
...

*请注意这些只是示例,这些承诺可以在页面对象或主要测试中以各种方式处理

问题来自于尝试"循环"通过对象。鉴于特定测试试图验证,除其他外,所有元素都在特定网页上,我试图使用" isPresent()"来尝试循环这些对象。功能。我做了很多尝试,为了简单起见,我不会在这里列出它们,但是它们包括创建一个包装器承诺(使用" Q",我必须承认我不知道它是如何工作的)并尝试在期望'中运行该功能希望茉莉核心等待所有循环的承诺解决,然后读取输出(这真的是最后的努力)。

1 个答案:

答案 0 :(得分:1)

你应该像以前一样在所有元素上循环,如果你想按特定的顺序,创建一个递归函数,只用JSON中的下一个元素调用自己。

现在,要处理之前完成的茉莉花规格和那些东西。 需要将此功能添加到量角器的流量控制中,以便它等待继续,阅读更多相关信息here。并且,不要在量角器中使用Q,使用量角器实现webdriverJS承诺。

此外,请考虑使用isDisplayed,假设您希望在页面上取消显示。

基本上,你的代码框架看起来像这样:

it(.....{
    var flow = webdriver.promise.controlFlow();
    return webdriver.execute(function () {//your checks on the page here,
//if you need extract to external function as i described in my first paragraph

我认为应该为您提供足够的信息,告诉您如何处理量角器中的等待承诺,希望我帮助过。