最近,我發現被添加到文檔量角器一個新的定位器 - 的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的筆記! –