2013-10-14 9 views
5

Pracuję nad biblioteką, która rozszerza Selenium 2 o kilka niestandardowych poleceń. Biblioteka powinna być użyteczna z powiązań Java i Python Selenium, a także z Selenium IDE. Z mojego research te trzy wiązania docelowe powinny obejmować co najmniej 80% wszystkich skryptów Selenium 2.Selenium WebDriver: Do jakiego stopnia mogę polegać na JavaScript?

W celu wdrożenia moich własnych poleceń dla Selenium IDE, myślę, że muszę napisać wtyczkę dla niego w JavaScript.

Moje pytanie jest następujące:: Jeśli mam już implementację moich własnych poleceń w JavaScript, czy można bezpiecznie użyć tej implementacji dla powiązań Java i Python w mojej bibliotece?

Mam na myśli podejście, które wstrzykuje implementację JavaScript moich poleceń za pośrednictwem WebDriver#executeScript. Oto pseudokodowa implementacja tego, o czym myślę.

W Javie:

public void fooJava() { 
    executeScript("Inject code.js"); 
    executeScript("fooJavaScript();"); 
} 

W code.js:

function fooJavaScript() { 
    // Implementation of command "foo" from Selenium IDE plugin. 
} 

Tak więc, aby wykonać moje polecenie niestandardowe fooJava() w Javie, mój biblioteki code.js będzie wstrzykiwany w przeglądarce poprzez executeScript. Zawierałoby to JavaScript implementację foo, powiedzmy fooJavaScript. W następnym wywołaniu executeScript ten fooJavaScript zostanie wywołany.

Takie podejście byłoby zapobiec mnie od konieczności wdrożenia mój zwyczaj nakazuje trzykrotnie (Java, Python, selen IDE), mam kilka problemów:

  1. Kiedy wstrzykują mój code.js, jestem w niebezpieczeństwie niszczenia globalnego stanu strony internetowej?
  2. Do jakiego stopnia mogę polegać na JavaScript? Czy zadziała, jeśli pojawi się okno dialogowe ostrzegania? W praktyce, ilu sterowników używanych w Selenium nie obsługujeJavaScript? Na przykład. HtmlUnit?
  3. Czy to działa we wszystkich głównych przeglądarkach (nieco nowsze wersje IE, Chrome, Firefox, Safari)?

Twoje prawdziwe doświadczenia z tym będą mile widziane.

+4

z moich "prawdziwych doświadczeń" .. musiałem używać nawet javascript podczas testowania. Moim zdaniem jest to kiepski projekt aplikacji, jeśli chcesz wywołać pewne zdarzenie JavaScript. Zasadniczo to tylko kiepski projekt, aby oderwać się od interfejsu użytkownika. Chodzi mi o to, że właśnie to testujesz, prawda? – sircapsalot

Odpowiedz

1

Zasada, że ​​nie powinieneś używać JS jako mechanizmu testowania, jeśli ładujesz tylko dane za pomocą WebDriver.

WebDriver = testy integracyjne
JS = Jeśli chcesz jednostka testuje

Nie wiem dokładnie swoje przypadków użycia, ale:

Jeśli próbujesz uruchomić testy integracyjne, trzymać WebDriver, aby jak najlepiej symulować interakcje użytkownika. W przyszłości unikasz także problemów z JS w różnych przeglądarkach, polegając na hakach WebDriver, aby wchodzić w interakcje ze stroną, ponieważ lepiej jest polegać na społeczności, aby zapewnić niezawodne interfejsy API interakcji DOM dla każdej przeglądarki.Jeśli nie możesz wywołać warunków testowych z interakcjami przeglądarki, przechodzisz na terytorium testowania jednostki/kodu zamiast testowania integracji.

Jeśli próbujesz uruchomić JS dla dobra zasadniczo testowania pojedynczą funkcję lub kawałek kodu zamiast zintegrowanej interakcji, który próbujesz uruchomić test jednostki. Testy jednostkowe najlepiej wykonywać w JS z czymś takim jak Jasmine (nazwij jakikolwiek framework tutaj).

Rozumowanie:
testy integracyjne powinny być pisane być tak realizacji niezależnego jak to możliwe. Nie powinieneś znać nazwy funkcji, aby uruchomić test integracji, ponieważ ktoś może zmienić nazwę funkcji w przyszłości lub zrestrukturyzować kod.
Ponieważ wypełniasz rolę QE/testera, nie chcesz być odpowiedzialny za łamanie testów integracji podczas zmian kodu - jeśli używasz tego i jesteś odpowiedzialny, musisz zmienić test za każdym razem, gdy nastąpi restrukturyzacja kodu .

Źródła: Doświadczenie jako QE w 10 000+ współpracy oprogramowania dla pracowników.

Powiązane problemy