我有以下 html
<div data-ng-controller="exampleCtrl as ec">
<div data-ng-repeat="item in ec.items">
<blockquote>
{{item.name}}
</blockquote>
</div>
</div>
在我的 example.page.js 文件中,我尝试使用获取 item.name 列表
this.names= element.all(by.repeater('item in ec.items').column('item.name')).map(function (names) {
return names.getText();
});
然后在我的 example.step.js 文件中我这样做
examplePage.names.then(function (names) {
console.log("Names length : " + names.length);
};
(这里的 examplePage 是一个新的 example.page.js)
根据日志,名称的长度为 0,但屏幕上有 2 个可见项目,每个项目都有名称。
此外,如果我只是这样做 this.names = element.all(by.repeater('item in ec.items').column('item.name'))
,那么我可以看到名称的长度为 2,但不知道如何获取“名称”文本。当我记录它们时,我只得到 [object Object]、[object Object]。
所以看来调用 map 函数会以某种方式丢失这 2 个项目。
按照建议使用评估函数,我得到 items.length = 1,然后如果我这样做 console.log(items[0])
我会打印整个元素,如下
元素查找器{ ptor_: Protractor { ......
我尝试过对该元素执行getText()
,但打印出相同的内容。
有什么建议吗?我最近做了非常类似的事情并且它有效,但由于某种原因这次它不起作用。
谢谢
最佳答案
除了Adityas的回答之外,您可以直接使用evaluate()
,而不是使用map()
函数。
this.names= element.all(by.repeater('item in ec.items').evaluate('item.name').then(function(itemNameAsArray){
console.log(itemNameAsArray.length)
})
关于javascript - 在 Protractor 测试中从 ng-repeat 返回空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39897961/