量角器first()工作,get(0)不工作

时间:2016-08-18 13:55:01

标签: protractor

在量角器

中有一个页面对象的troncated代码

该代码正在运行:

var HomePage = function() {   
    this.publishedShows = element.all(by.repeater('show in showsHomePage'));
    this.getFirstShow = function(){
        return this.publishedShows.first();
    }
};

这个不是:

var HomePage = function() {   
    this.publishedShows = element.all(by.repeater('show in showsHomePage'));
    this.getFirstShow = function(){
        return this.publishedShows.get(0);
    }
};

我收到此错误: 索引超出范围。试图访问index:0处的元素,但是只有0个元素匹配locator by.repeater(“show in showsHomePage”)

任何人都能看到我吗?

2 个答案:

答案 0 :(得分:0)

不是var combinations = []; arr1.forEach(function(a1){ arr2.forEach(function(a2){ combinations.push(a1 + a2); }); }); vs get(0) - 它们在实施方面完全相同。在用它做任何动作之前,它可能与时间wait for the presence of the element有关:

first()

答案 1 :(得分:0)

alecxe确实有一个关于等待元素存在的要点,所以你可能想要等待所提到的或者是browser.waitForAngular();

我所看到的是,如果你将一个finder解析为一个变量,那么这可能会留在未实现的promise状态(即使内部已经解析了查询)。需要做的是解决承诺,然后你应该能够得到你需要的元素:

所以从您的代码:

var HomePage = function() {   
    this.publishedShows = element.all(by.repeater('show in showsHomePage'));
    this.getFirstShow = function() {
            return this.publishedShows.then(function(items){
                =>return items[0].getText();
            });
    }
};

var hp = new HomePage();
=>expect(hp.getFirstShow()).toEqual('hello');

仍将是一个承诺,而不是发布的。

这会在我尝试您的代码时返回项目(我的转发器略有不同)。

{{1}}

显然会改变您对要检查的内容以及返回的期望。标有=>

还要确保如果您使用任何track by语句,那么您应该查看 by.exactRepeater 命令,以便仅与转发器部分完全匹配。 这对我有用,请注意已解决的承诺会返回一系列查找程序。