如何在页面上返回链接并单击它们

时间:2016-09-20 19:57:27

标签: angularjs protractor

我正在使用量角器编写一些e2e测试。页面链接可能会更改名称和链接数。我想要做的是让页面告诉我链接名称和链接数量,然后迭代每个链接并单击它。

html看起来像这样:

<div class="ng-scope" ng-repeat="Transition in DirectTransitions">
<p class="ng-binding" ng-click="selectTransition(Transition)">Draft</p>
</div>
<div class="ng-scope" ng-repeat="Transition in DirectTransitions">
<p class="ng-binding" ng-click="selectTransition(Transition)">Approved</p>
</div>
<div class="ng-scope" ng-repeat="Transition in DirectTransitions">
<p class="ng-binding" ng-click="selectTransition(Transition)">Posted</p>
</div>

我可以单独点击每个链接:

it('should select Draft', function() {
   element.all(by.repeater('Transition in DirectTransitions'));.filter(function(elem) {
    return elem.getText().then(function(text) {
      return text === 'Draft';
    });
  }).click();
  });

我目前正在做的,但是如果文本更改或其他链接被添加/删除到页面。我必须再次返回并重构以添加/删除链接或更改我要避免的文本。

我能够得到类似这样的链接名称。

it('should get link names', function() {
  element.all(by.repeater('<locator>')).map(function(item) {
  return item.getText();
  }).then(function(labels) {
  expect(labels).toEqual(['one', 'two', 'three']);
  });
 });

但是无法弄清楚如何迭代每个链接并点击每个链接。

1 个答案:

答案 0 :(得分:0)

您可以使用each()迭代每个链接:

var links = element.all(by.repeater('Transition in DirectTransitions'));
links.each(function (link) {
    link.click();
});
expect(links.getText()).toEqual(['one', 'two', 'three']);

根据点击时发生的情况,您可能会得到&#34;陈旧元素参考&#34;错误(参见后续线程的注释,有几种方法可以解决这个问题)。