Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Protractor 量角器first()正在工作,而get(0)不工作_Protractor - Fatal编程技术网

Protractor 量角器first()正在工作,而get(0)不工作

Protractor 量角器first()正在工作,而get(0)不工作,protractor,Protractor,在量角器中有一个页面对象的指定代码 该代码正在运行: var HomePage = function() { this.publishedShows = element.all(by.repeater('show in showsHomePage')); this.getFirstShow = function(){ return this.publishedShows.first(); } }; 这不是: var HomePage = funct

在量角器中有一个页面对象的指定代码

该代码正在运行:

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);
    }
};
我得到这个错误: 索引越界。正在尝试访问索引为0的元素,但只有0个元素与locator by.repeater匹配(“showsHomePage中显示”)

任何人都可以告诉我吗?

这不是关于
get(0)
vs
first()
——它们在实现上完全相同。这可能与时间有关,在采取任何行动之前:

var elm = myPageObject.getFirstShow();
var EC = protractor.ExpectedConditions;

browser.wait(EC.presenceOf(elm), 5000);

// do smth with elm
它不是关于
get(0)
vs
first()
——它们在实现方面完全相同。这可能与时间有关,在采取任何行动之前:

var elm = myPageObject.getFirstShow();
var EC = protractor.ExpectedConditions;

browser.wait(EC.presenceOf(elm), 5000);

// do smth with elm

alecxe在等待元素出现方面确实有一个要点,因此您可能希望按照前面提到的那样等待浏览器。waitForAngular()

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

因此,从您的代码:

`this.publishedShows = element.all(by.repeater('show in showsHomePage'));`
将仍然是一个承诺,而不是发布展示

当我尝试您的代码时(我有一个稍微不同的中继器),它会返回项目

显然,改变你的期望,你想检查什么,也返回。标记为=>

还要确保如果使用任何track by语句,则应查看by.exactRepeater命令,以便仅在repeater部分上进行精确匹配。
这对我来说很有效,请注意,解析的promise返回一个查找器数组

alecxe确实需要等待元素出现,因此您可能需要像前面提到的那样等待浏览器。waitForAngular()

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

因此,从您的代码:

`this.publishedShows = element.all(by.repeater('show in showsHomePage'));`
将仍然是一个承诺,而不是发布展示

当我尝试您的代码时(我有一个稍微不同的中继器),它会返回项目

显然,改变你的期望,你想检查什么,也返回。标记为=>

还要确保如果使用任何track by语句,则应查看by.exactRepeater命令,以便仅在repeater部分上进行精确匹配。
这对我来说很有效,请注意,解析的promise返回一个查找器数组

非常感谢。但是量角器不应该在继续测试之前等待任何角度元素吗?@MathieuBergeron理论上是的,但在实践中,有些情况下你必须在测试中进行这些等待。谢谢。我尝试了这个解决方案,但仍然不起作用。同样的错误。还有别的想法吗?非常感谢。但是量角器不应该在继续测试之前等待任何角度元素吗?@MathieuBergeron理论上是的,但在实践中,有些情况下你必须在测试中进行这些等待。谢谢。我尝试了这个解决方案,但仍然不起作用。同样的错误。还有别的想法吗?