在使用Jasmine和Protractor进行测试时,有人能为我提供一个如何使用多个定位器的示例吗?
假设我有LINKS形式的3个列表元素,并且所有这些LIST ELEMENTS具有相同的属性;但是,每个都是具有唯一名称的链接,以导航到新的“Angular State”......
示例所有三个链接都包含以下内容:
<li> ng-repeat="bb" ng-class="{'active': dropdown.isActive}" class="ng-scope active"</li>
然后每个链接都有自己的名称,例如:
<a ui-sref="search" class="ng-binding" href="#/Search"> Search </a>
<a ui-sref="home" class="ng-binding" href="#/Search"> Home </a>
<a ui-sref="todo" class="ng-binding" href="#/Search"> ToDo </a>
3页对象之间唯一独特的是:
ui-sref="search"
,ui-sref="home"
,ui-sref="todo"...
如何使用list元素中的一个公共定位器和link元素中的唯一定位器来确保每次都与正确的链接进行交互?
答案 0 :(得分:4)
我使用custom locator来处理ui-sref
:
// Usage:
var searchLinkElm = element(by.uisref('search'));
var homeLinkElm = element(by.uisref('home'));
var todoLinkElm = element(by.uisref('todo'));
// Interaction
it('works', function() {
expect(searchLinkElm.isPresent()).toBeTruthy();
searchLinkElm.click();
});
// within your onPrepare block
by.addLocator('uisref', function(toState, opt_parentElement) {
var using = opt_parentElement || document;
var prefixes = ['ui-sref'];
for (var p = 0; p < prefixes.length; ++p) {
var selector = '*[' + prefixes[p] + '="' + toState + '"]';
var inputs = using.querySelectorAll(selector);
if (inputs.length) {
return inputs;
}
}
});