量角器:自定义定位器
Protractor: custom locators
我有这个代码:
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;
});
});
这是一种简单的按属性搜索的方法"Name"。但它不是通用的,因为它搜索带有标签 td
的元素。我怎样才能让它独立于标记?
您可以向定位器添加任意数量的参数,因此在 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'));
我有这个代码:
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;
});
});
这是一种简单的按属性搜索的方法"Name"。但它不是通用的,因为它搜索带有标签 td
的元素。我怎样才能让它独立于标记?
您可以向定位器添加任意数量的参数,因此在 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'));