最近,我注意到一个新的定位器被添加到量角器文档 –
by.js()
:
Locates an elements by evaluating a JavaScript expression,which may be either a function or a string.
我明白这个定位器提供了什么,但是当这个定位器可以使用时,我错过了真实的用例.我什么时候应该喜欢使用by.js而不是其他内置的定位器,如by.css?
解决方法
我觉得用例是使用核心JavaScript函数来获取元素,每当css和其他元素定位器不能帮助或者没有可以使用的属性时.情景 –
>如果您使用核心JavaScript函数将其传递给browser.executeScript,那么可以使用by.js替换它.
示例: –
假设如果你必须得到一个出现在两者之间的元素,你可以这样获得 –
- 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;
- }));
>如果你想使用它的css值,如颜色,字体等获取元素.虽然过滤器可以在这种情况下使用,但是by.js也支持它.
>如果元素不能被css或xpath或任何其他定位符访问,例如具有动画或转换的伪元素.
示例: –
假设有元素具有:before和:在转换之后 –
- .element:before {
- color: rgb(255,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)');
希望它有帮助.