在量角器测试中从ng-repeat返回空数组

时间:2016-10-06 13:56:57

标签: 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,但在屏幕上有两个可见的项目。

另外,如果我只是this.names = element.all(by.repeater('item in ec.items').column('item.name')),那么我可以看到名字长度为2,但不知道如何掌握这些名称&#39;文本。当我记录它们时,我只得到[object Object],[object Object]。

所以看来调用map函数会以某种方式丢失2个项目。

按照建议使用evaluate函数我得到items.length = 1,然后如果我console.log(items[0])我打印出整个元素

ElementFinder {   ptor_:    量角器{    ......

我已尝试对此元素进行getText(),但打印出的内容相同。

为什么会出现这种情况?我最近做了非常类似的事情并且它已经奏效了,但出于某种原因,它在这种情况下无法正常工作。

由于

2 个答案:

答案 0 :(得分:1)

您可以尝试evaluate() - 如果getText()无法获取文字,则应评估范围变量

Documentation on evaluate

this.names= element.all(by.repeater('item in ec.items')).map(function (elm) {
    return elm.evaluate('item.name');
});

names.then(function(allValues){
    console.log(allValues.length)
})

答案 1 :(得分:1)

除了Adityas的回答,您可以直接使用map()而不是evaluate()功能。

this.names= element.all(by.repeater('item in ec.items').evaluate('item.name').then(function(itemNameAsArray){
 console.log(itemNameAsArray.length)
})