2016-09-20 76 views
1

我正在使用量角器编写一些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']); 
    }); 
}); 

但一直未能弄清楚如何迭代每个链接并点击每个链接。

回答

0

您可以each()每一个环节遍历:

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

根据上点击发生什么事,你可能会得到“陈旧元素的引用”错误(见后续线程的意见与几个方式来处理这)。

+0

谢谢,我会给这个尝试:) –

+0

这没有点击第一个元素,我带我到下一页,如我所料。然后,我不得不导航回到页面的初始链接它,但没有选择下一个链接,我得到一个错误“失败:陈旧元素引用:元素没有附加到页面文档” –

+0

@ DennisFerguson啊,这个意味着页面在第一次点击后发生变化。这里是一个相关的线程:http://stackoverflow.com/q/29823757/771848。另外,你可以跟踪一个链接样本的当前索引(不在js /量角器中):http://stackoverflow.com/questions/13448091/how-to-fetch-all-links-and-click-those -links-一个接一个使用硒-的webdriver。希望有所帮助。 – alecxe