量角器:自定义定位器

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'));