2016-04-26 84 views
10

最近,我發現被添加到文檔量角器一個新的定位器 - 的by.js()什麼是量角器/ WebDriverJS中的by.js定位器?

定位通過評估一個JavaScript的表達,這可以是一個函數或字符串的元素。

我明白這是什麼定位器提供,但我錯過了真實使用情況下當此定位可能是有用的。何時應該使用by.js而不是其他內置定位器,如by.css

回答

12

我覺得用例是獲取使用核心JavaScript函數的元素,只要css和其他元素定位器不會幫助或沒有我們可以使用的屬性。場景 -

  1. 如果你使用它傳遞給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; 
})); 
  • 如果你想使用它的CSS值,如顏色,字體等獲得元素...雖然filter可以在這種情況下使用,但by.js也支持它。
  • 如果元件不通過CSS的xpath或任何其他定位器訪問,例如僞元素具有動畫或過渡。
  • 例子: -

    假設,如果有其中有: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)'); 
    

    希望它有幫助。

    +0

    有趣的用例,現在我可以想象我可以在哪裏使用'by.js'。謝謝! – alecxe

    +1

    好點!喜歡關於computedStyle的筆記! –

    5

    我認爲這種情況非常渺茫,但是當客戶端上的數據通過硒不可用(或不可靠)時,我可以看到這種情況正在使用。

    文檔頁面上的例子包括對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上窗口或其他可以幫助定位元素的服務。

    相關問題