2014-05-15 19 views
6

Ich möchte Warnungen behandeln Verwenden von HTMLUnitDriver in Java. Ich verwende folgenden Code, um die Warnungen mit Firefox-Treiber zu behandeln, und es funktioniert gut.Umgang mit Warnungen mit HtmlUnitDriver in Java

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

aber HTMLUnitDriver schenkt Fehler wie

java.lang.UnsupportedOperationException: alert() 

Wie es Alert-Box zu behandeln?

Antwort

-1

Die Anfrage zur Implementierung der Alert-API im HTMLUnitDriver wurde vor einigen Jahren gestellt. Hier ist der Link:

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

Da dies scheint eine harte Nuss zu sein, zu knacken Sie haben über einige Tricks zu denken, die modalen Dialoge zu umgehen (Alarm, bestätigen, ...) in JavaScript. Zumindest bis sie die Alert-API implementiert haben.

Die Tricks, um zu verhindern, dass die modalen Dialoge angezeigt werden, bestehen darin, Ihrem Selenium-Skript zusätzliches JavaScript hinzuzufügen. Zum Beispiel ändern Sie die Callback-Funktionen, um die Alarmbox zu vermeiden.

Beachten Sie auch, dass es unmöglich ist, modale Dialoge mit JavaScript selbst zu schließen, abzubrechen oder zu bestätigen. Das ist der Grund, warum du verhindern solltest, dass sie zeigen. Dies ist aus Sicherheitsgründen.

Bis die Alert-API implementiert wurde, ist dies der einzige Weg, um mit HtmlUnitDriver umzugehen.

0

Wenn Sie nicht brauchen, um zu prüfen, ob der Alarm tatsächlich erscheint, würde ich empfehlen, das Verhalten der JavaScript alert() Methode Ändern einer Nachricht zu protokollieren statt:

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

Dann können Sie HtmlUnitDriver.switchTo().alert().accept() in Ihrem Code überspringen .

Hinweis: Diese Methode funktioniert nicht, wenn die Warnung beim ersten Laden der Seite angezeigt wird, da Selenium darauf wartet, dass die Seite geladen wird, bevor mit der Interaktion begonnen wird. Das obige JavaScript wird also zu spät ausgeführt.


Ab HtmlUnitDriver Version 2.25, HtmlUnitDriver.switchTo().alert().accept() nicht länger ein UnsupportedOperationException(). Jedoch, accept() appears to do nothing except confirm that the alert is present. Da die Warnung nicht verworfen werden kann, ist das Deaktivieren von Warnungen mithilfe der oben genannten Methode wahrscheinlich die beste/einzige Lösung. Wenn Sie Warnungen mit HtmlUnitDriver testen müssen, benötigen Sie möglicherweise zwei separate Tests - einen, um zu überprüfen, ob die Warnung angezeigt wird, und einen anderen, um zu überprüfen, ob sich der Browser bei deaktivierter Warnung korrekt verhält.


Wenn Sie dringend Alarmgabe benötigen und Sie sind in Ordnung mit Sourcen, alert handling has been implemented in the master branch of HtmlUnitDriver. Ich bin mir nicht sicher, wann es in einer Veröffentlichung enthalten sein wird.

Verwandte Themen