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:
- Kiedy wstrzykują mój
code.js
, jestem w niebezpieczeństwie niszczenia globalnego stanu strony internetowej? - 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
? - 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.
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