最近,我发现被添加到文档量角器一个新的定位器 - 的by.js()
:什么是量角器/ WebDriverJS中的by.js定位器?
定位通过评估一个JavaScript的表达,这可以是一个函数或字符串的元素。
我明白这是什么定位器提供,但我错过了真实使用情况下当此定位可能是有用的。何时应该使用by.js
而不是其他内置定位器,如by.css
?
最近,我发现被添加到文档量角器一个新的定位器 - 的by.js()
:什么是量角器/ WebDriverJS中的by.js定位器?
定位通过评估一个JavaScript的表达,这可以是一个函数或字符串的元素。
我明白这是什么定位器提供,但我错过了真实使用情况下当此定位可能是有用的。何时应该使用by.js
而不是其他内置定位器,如by.css
?
我觉得用例是获取使用核心JavaScript函数的元素,只要css
和其他元素定位器不会帮助或没有我们可以使用的属性。场景 -
browser.executeScript
然后by.js
核心JavaScript函数获取元素可以用来取代它。例子: -
假设,如果你要得到的是在顶部出现两者之间的元素,你可以得到这样说 -
var ele = element(by.js(function(){
var ele1 = document.getElementById('#ele1');
var ele2 = document.getElementById('#ele2');
var val = ele1.compareDocumentPosition(ele2);
if(val === 4) return ele1;
else return ele2;
}));
filter
可以在这种情况下使用,但by.js
也支持它。例子: -
假设,如果有其中有:before
和:after
过渡元素 -
.element:before {
color: rgb(255, 0, 0);
}
要验证元素的颜色,我们可以使用by.js
传递一个JavaScript语句获取元素 -
var ele = element(by.js(function(){
return window.getComputedStyle(document.querySelector('.element'), ':before');
}));
expect(ele.getCssValue('color')).toEqual('rgb(255, 0, 0)');
希望它有帮助。
我认为这种情况非常渺茫,但是当客户端上的数据通过硒不可用(或不可靠)时,我可以看到这种情况正在使用。
文档页面上的例子包括对offsetWidth
参考:
spans[i].offsetWidth > 100
用于背景:
var wideElement = element(by.js(function() {
var spans = document.querySelectorAll('span');
for (var i = 0; i < spans.length; ++i) {
if (spans[i].offsetWidth > 100) {
return spans[i];
}
}
}));
expect(wideElement.getText()).toEqual('Three');
另外,也有可能是用例,如果有一个第三方API上窗口或其他可以帮助定位元素的服务。
有趣的用例,现在我可以想象我可以在哪里使用'by.js'。谢谢! – alecxe
好点!喜欢关于computedStyle的笔记! –