2016-04-26 23 views
10

Ostatnio zauważyłem nowy lokator dodawanych do dokumentacji Kątomierz - z by.js():Co to jest lokalizator by.js w Kątomierz/WebDriverJS?

lokalizuje elementy oceniając wyrażenie JavaScript, który może być albo funkcja lub ciąg.

rozumiem co to lokalizator zapewnia, ale jestem brakuje rzeczywistych przypadków użycia gdy lokator może być przydatna. Kiedy powinienem używać by.js zamiast innych wbudowanych lokalizatorów, takich jak by.css?

Odpowiedz

12

Uważam, że przypadkiem użycia jest uzyskanie elementów za pomocą podstawowych funkcji javascript, gdy tylko css i inne lokalizatory elementów nie pomogą lub nie mają właściwości, których moglibyśmy użyć. Scenariusze -

  1. Jeśli otrzymujesz element za pomocą języka JavaScript funkcje przekazaniem go do browser.executeScript następnie by.js można stosować go zastąpić.

Przykład: -

Załóżmy, że jeśli trzeba było uzyskać element, który pojawia się na szczycie między nimi, można dostać to w ten sposób -

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; 
})); 
  1. Jeśli chcesz uzyskać element za pomocą jego wartości css, takich jak kolor, czcionka, itp. ... Chociaż filter może być używany w tym przypadku, ale obsługuje go także by.js.
  2. Jeśli elementy nie są dostępne css lub XPath lub innych lokalizatorów np pseudoelementy które mają animacji lub przejścia.

Przykład: -

Załóżmy, że jeśli istnieje element, który ma :before i :after przejścia -

.element:before { 
    color: rgb(255, 0, 0); 
} 

Aby sprawdzić kolor elementu, możemy użyć by.js przekazując javascript rachunku Aby uzyskać element -

var ele = element(by.js(function(){ 
    return window.getComputedStyle(document.querySelector('.element'), ':before'); 
})); 
expect(ele.getCssValue('color')).toEqual('rgb(255, 0, 0)'); 

Mam nadzieję, że to pomaga.

+0

Interesujące przypadki użycia, teraz mogę sobie wyobrazić, gdzie mogłem użyć 'by.js'. Dzięki! – alecxe

+1

Świetne punkty! Uwielbiam notatkę o computedStyle! –

5

Myślę, że przypadki do tego są dość cienkie, ale widzę, że jest to użyteczne, gdy dane na temat klienta są niedostępne (lub niesłusznie) przez selen.

Przykład na stronie docs zawiera odniesienie do offsetWidth:

spans[i].offsetWidth > 100 

używany w kontekście:

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'); 

Alternatywnie, może się okazać zastosowanie, jeśli istnieje jedna trzecia API partia na okno lub inną usługę, która może pomóc w zlokalizowaniu elementu.