源: http://www.protractortest.org/#/api?view=ElementArrayFinder.prototype.locator
// returns by.css('#ID1')
$('#ID1').locator()
// returns by.css('#ID2')
$('#ID1').$('#ID2').locator()
// returns by.css('#ID1')
$$('#ID1').filter(filterFn).get(0).click().locator()
我相信,除了locator()之外,它也可以完成相同的工作;此API的任何原因或具体原因?
答案 0 :(得分:3)
就个人而言,我只是用它来更好地记录错误。即。
it('should display the facility name', function () {
var el = element(by.css('div.facilityName'));
expect(el.isDisplayed()).toBe(true, 'Expected element ' + el.locator() + ' to be present and visible';
});
这在我的控制台中返回:
失败:
1)应显示设施名称
预期false为true,'Expected By(css selector,div.facilityName)存在且可见'。
类似地,我将它与一些辅助函数一起使用(我在Non-Angular上使用Protractor,所以我没有等待Angular同步的能力,所以我使用下面的帮助器:
/**
* @description Prevents test execution until the given element is present in the DOM
* @param [el] The element locator [time] The optional max timeout in ms [opts] The options
*/
Util.prototype.waitForElementPresent = function (el, time, opts) {
var timeout = time || 0,
counter = 0,
verbose = opts ? opts.verbose : false;
return browser.wait(function() {
if (verbose) {
process.stdout.write( !counter ? 'waitForElementPresent [' + el.locator() + '] ' : '.');
counter = counter + 1;
}
return el.isPresent();
}, timeout).then(function () {
if (verbose) {
process.stdout.write('\n');
}
});
};
用法:
it('should display the facility name', function () {
var el = element(by.css('div.facilityName'));
Util.waitForPresentAndVisible(el, 10000, {verbose: true});
expect(el.isDisplayed()).toBe(true, 'Expected element ' + el.locator() + ' to be present and visible';
});
打印到控制台:
waitForElementPresent [By(css selector,div.facilityName)] ..........
这有点微不足道,因为错误将包括失败代码的行和索引。但我发现在某些情况下只是为了改进错误记录。
我很好奇其他人如何使用它。
答案 1 :(得分:2)
在现实世界中使用locator()
并不多,但是通过获取父元素的定位器并将其与直接子元素连接到动态,这是另一个用例 - avoid using by.xpath()
in solving the "getting direct child of a current element" problem with CSS selectors生成一个完整的CSS选择器。