javascript - 在 Protractor 测试中从 ng-repeat 返回空数组

标签 javascript angularjs protractor

我有以下 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/

相关文章:

javascript - Syncfusion Javascript Tab - 更改选项卡按钮高度/字体大小

javascript - 为什么我与 neo4j 的连接不起作用(通过 Javascript)

javascript - iframe 双击事件不起作用

javascript - Angular JS HTTP Post 不起作用

javascript - 使用 angularjs 将焦点更改为下一个输入文本

javascript - Browserstack Protractor 忽略期望

javascript - Angular JS, Protractor 定位器,获取元素的直接子元素

javascript - 为什么我不能使用我的用户脚本定位特定的 div

javascript - 使用 Angular 发送 ajax 请求以获取 .json 文件时出错?

javascript - Protractor iOS 自动化 : A Jasmine spec timed out. 重置 WebDriver 控制流