2014-05-15 16 views
6

Chcę obsługiwać alerty przy użyciu HTMLUnitDriver w java. Korzystam z następującego kodu do obsługi alertów za pomocą sterownika firefox i działa dobrze.Obsługa alertów za pomocą HtmlUnitDriver w Javie

Alert alert = driver.switchTo().alert(); 
alert.accept(); 

ale HTMLUnitDriver daje błąd jak

java.lang.UnsupportedOperationException: alert() 

Jak obchodzić się tam okno alertu?

Odpowiedz

-1

Wniosek o wdrożenie alert-API w HTMLUnitDriver został umieszczony kilka lat temu. To jest link:

https://code.google.com/p/selenium/issues/detail?id=1105&q=alert%28%29&colspec=ID%20Stars%20Type%20Status%20Priority%20Milestone%20Owner%20Summary

Jak to wydaje się być twardy orzech do zgryzienia, trzeba myśleć o jakichś sztuczek obchodzenia modalnych okien dialogowych (alert, potwierdzają, ...) w JavaScript. Przynajmniej dopóki nie zaimplementują alert-API.

Sztuczki zapobiegające wyświetlaniu dialogów modalnych polegają na dodaniu dodatkowego skryptu JavaScript do skryptu Selenium. Na przykład zmień funkcje wywołania zwrotnego, aby uniknąć pola alertu.

Pamiętaj też, że zamknięcie/anulowanie/potwierdzenie dialogów modalnych za pomocą samego JavaScript jest niemożliwe. Dlatego powinieneś ich nie pokazywać. Jest to spowodowane względami bezpieczeństwa.

Do czasu wdrożenia interfejsu alert-API jest to jedyny sposób na obsłużenie go za pomocą narzędzia HtmlUnitDriver.

0

Jeśli nie trzeba sprawdzić, czy rzeczywiście pojawia się alert, polecam zmianę zachowania metody JavaScript alert() zalogować wiadomość Zamiast:

JavascriptExecutor javascriptExecutor = (JavascriptExecutor) webDriver; 
javascriptExecutor.executeScript("window.alert = function(message){ console.log(message); };" + 
    "window.confirm = function(message){ console.log(message); return true; };"); 

Następnie można pominąć HtmlUnitDriver.switchTo().alert().accept() w kodzie .

Uwaga: Metoda ta nie będzie działać, jeśli na początkowym wczytaniu strony pojawia się alert od Selen czeka na stronę należy załadować przed interakcji z nim. Powyższy skrypt JavaScript zostanie wykonany zbyt późno.


Od HtmlUnitDriver wersji 2.25, HtmlUnitDriver.switchTo().alert().accept() nie zgłasza UnsupportedOperationException(). Jednak accept() appears to do nothing except confirm that the alert is present. Ponieważ alertu nie można odrzucić, wyłączenie alertów za pomocą powyższej metody jest prawdopodobnie najlepszym/jedynym rozwiązaniem. Jeśli musisz przetestować alerty pod numerem HtmlUnitDriver, możesz potrzebować dwóch oddzielnych testów - jednego do sprawdzenia, czy alert pojawia się, a drugiego do sprawdzenia, czy przeglądarka działa poprawnie, gdy alarm jest wyłączony.


Jeśli rozpaczliwie potrzebują powiadomienie przekazanie i jesteś w porządku z budynku od źródła, alert handling has been implemented in the master branch of HtmlUnitDriver. Nie jestem pewien, kiedy pojawi się w wydaniu.

Powiązane problemy