量角器定位器by.repeater使用'包含'而不是等于'

时间:2014-08-27 17:46:31

标签: javascript angularjs protractor

在我的页面中有2 ng-repeat,'widget in Widgets','widget in widgetsOnPage'。当我尝试通过element.all(by.repeater('widget in widgets'));找到元素时,它会从两个重复中找到元素。

我也尝试在量角器示例测试("\node_modules\protractor\example\example_spec.js")上将'todo in todos'转发器更改为:

todoList = element.all(by.repeater('to'));

测试通过。

  • 如何找到与字符串完全相同的重复?
  • 这种行为是量角器或功能的缺陷吗?

感谢。

3 个答案:

答案 0 :(得分:2)

by.repeater定位符基于findRepeaterElement()函数。根据它的implementation,它正在ng-repeat属性值中搜索传递的转发器子字符串,请参阅循环中的indexOf调用:

for (var i = 0; i < repeatElems.length; ++i) {
  if (repeatElems[i].getAttribute(attr).indexOf(repeater) != -1) {
    rows.push(repeatElems[i]);
  }
}

由于widget in widgetswidget in widgetsOnPage的子字符串,因此匹配。


由于行为有点令人惊讶,我会向protractor github issue tracker提交一个问题。

答案 1 :(得分:1)

您可以随时尝试使用css选择器,其中可能包含额外的文本:

$$('[ng-repeat="widget in widgets"]');
$$('[ng-repeat="widget in widgetsOnPage"]');

这会将输出限制为您想要的输出。

答案 2 :(得分:0)

在这种情况下,我可能只是制作自己的定位器!见protractor's documentation