【问题标题】:Protractor: custom locators量角器:自定义定位器
【发布时间】:2015-08-21 10:00:54
【问题描述】:
我有这个代码:
by.addLocator('Name',
function(spanText, opt_parentElement) {
var using = opt_parentElement || document;
var td = using.querySelectorAll('td');
return Array.prototype.filter.call(td, function(teg) {
return teg.getAttribute("Name") === spanText;
});
});
这是一种通过属性“名称”进行搜索的简单方法。但它不是通用的,因为它搜索带有标签td 的元素。我怎样才能让它独立于标记?
【问题讨论】:
标签:
angularjs
protractor
angularjs-e2e
e2e-testing
【解决方案1】:
您可以向定位器添加任意数量的参数,因此在spanText 之后您可以添加例如tagName。您可以走得更远,不要将自己置于使用仅标签参数的范围内,而是使用querySelectorAll() 支持的任何选择器:
by.addLocator('Name', function (spanText, selector, opt_parentElement) {
var using = opt_parentElement || document;
var els = using.querySelectorAll(selector);
return Array.prototype.filter.call(els, function (el) {
return el.getAttribute('Name') === spanText;
});
});
用法:
// find all span on the page with Name="Alice"
element(by.Name('Alice', 'span'))
// find all .row within #container with Name="Bob"
element(by.Name('Bob', '#container .row'));