如果我想找到一个也有特定课程的转发器,我该怎么办?或者,如果我想找到包含文本的绑定?
如果我想通过转发器 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"));
答案 0 :(得分: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();
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"))