我有以下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()
,但打印出的内容相同。
为什么会出现这种情况?我最近做了非常类似的事情并且它已经奏效了,但出于某种原因,它在这种情况下无法正常工作。
由于
答案 0 :(得分:1)
您可以尝试evaluate()
- 如果getText()
无法获取文字,则应评估范围变量
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)
})