在量角器
中有一个页面对象的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”)
任何人都能看到我吗?
答案 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 命令,以便仅与转发器部分完全匹配。 这对我有用,请注意已解决的承诺会返回一系列查找程序。