结合量角器定位器

时间:2015-03-23 16:01:07

标签: javascript protractor

如果我想找到一个也有特定课程的转发器,我该怎么办?或者,如果我想找到包含文本的绑定?

如果我想通过转发器 OR CSS选择器(具有特定转发器表达式OR的匹配元素,例如特定的类/属性)来查找元素,该怎么办?

这是一个非常普遍的问题。我对这些特定情况并不完全感兴趣,但通常会将这些定位器组合起来。

量角器允许定位器链接(即:element(by.this(...)).element(by.that(...))),但这将寻找子元素。我想做类似的事情,但使用多个定位器过滤元素,或找到与 n 定位器匹配的元素。

目前有可能吗?由于某些原因,这样的功能是不合需要的还是难以实现的?

过滤示例:

// Template:
<li ng-repeat="fruit in fruits">...</li>

// Locator:
var evenFruitElements = element.all(by.repeater("fruit in fruits")).filter(by.css(":nth-child(even)"));

或者示例:

// Template:
<span class="something-interesting">...</span>
<span class="something-else-similarly-interesting">...</span>

// Locator:
var interestingElements = element.all(by.css(".something-interesting"), by.css(".something-else-similarly-interesting"));

1 个答案:

答案 0 :(得分:1)

  1. 有一个用于添加自定义定位器的API:http://angular.github.io/protractor/#/api?view=ProtractorBy.prototype.addLocator

    // Add the custom locator.
    by.addLocator('buttonTextSimple',
    function(buttonText, opt_parentElement, opt_rootSelector) {
    // This function will be serialized as a string and will execute in the
    // browser. The first argument is the text for the button. The second
    // argument is the parent element, if any.
    var using = opt_parentElement,
        buttons = using.querySelectorAll('button');
    
    // Return an array of buttons with the text.
    return Array.prototype.filter.call(buttons, function(button) {
        return button.textContent === buttonText;
    });
    
    // Use the custom locator.
    element(by.buttonTextSimple('Go!')).click();
    
  2. CSS选择器有时可以创造奇迹:

    var interestingElements = element.all(by.css(".something-interesting"), by.css(".something-else-similarly-interesting"));
    

    可以实际实现(如下所示:https://stackoverflow.com/a/2144801):

    element.all(by.css(".something-interesting,.something-else-similarly-interesting"))