2014-07-04 11 views
8

Ich frage mich, was die Unterschiede sind zwischen dem Aufruf der click() Methode der WebElement gegenüber dem Finden des Elements durch ID und feuern die click Ereignis mit JavaScript.Selenium WebElement.click() vs Javascript klicken Ereignis

Gerade klar in der ersten Methode zu sein, rufe ich die .click() eine Instanz WebElement:

myWebElement.click(); 

Die zweite Technik ist:

((JavascriptExecutor)driver).executeScript("document.getElementById('myElementID').click()"); 

Ich bin interessiert, alle Unterschiede in dem Wissen, zwischen diesen beiden Techniken zum Klicken auf Web-Elemente, und auch Vor- und Nachteile von jedem.

Antwort

9

WebDriver verwendet einen native Unterstützung des Browsers zu WebElement zum Abbilden Objekt des DOM-Elements unter Verwendung von ID/XPath usw.

Die JavascriptExecutor.executeScript führt einen externen Skript im Kontext der aktuellen Browser-Fenster ausgewählt. (ähnlich einem Augmented-Browsing-Tool wie Fett Affe, wenn Sie jemals verwendet haben), und für den Fall, dass das Skript alle DOM-Element in WebElement-Objekt konvertiert.

Man kann auch sagen, der von WebDriver in einem Browser simulierte Klick ähnelt dem tatsächlichen Benutzer im Vergleich zu einem, der mit Javascript aufgerufen wird.

In Wirklichkeit können mit WebDriver nicht alle Ereignisse fehlerfrei mit allen Webbrowsern, tatsächlich auch mit verschiedenen Versionen desselben Webbrowsers, automatisiert werden. (d. h. unterschiedliche Versionen von IE, FF usw. verhalten sich anders). Immer noch WebDriver ist das in der Nähe beste Werkzeug für diese verfügbar.

Einmal (~ 4 Jahre zurück) auf einer bestimmten Version von IE haben wir beobachtet, dass wir nicht rechts klicken können oder Maus auf generierte Menü Links schweben, so dass wir js verwendet, um das zu simulieren, die sehr viel Browser durchgeführt unabhängiger Weg. So können Sie jetzt abschließen, für was die Ausführung von externem Javascript gut sein kann.

Auch gibt es automatisierte Web-Test-Frameworks, die Javascript für alles anstelle der nativen Unterstützung des Browsers verwenden. z.B.: http://en.wikipedia.org/wiki/Sahi_%28software%29

Ref:

+0

Danke, kommen wir zu meinem Beispiel gehen zurück, und nehmen wir an, dass wir über eine Taste, die nicht aktiviert werden (zB mit Winkel.). Ich denke, dass wenn ich die erste Technik (WebElement.click()) verwenden werde, nichts passieren wird, während, wenn ich die zweite benutze, die Tatsache umgehen wird, dass die Schaltfläche deaktiviert ist und die Klickaktion auslöst, ist das korrekt? – daniele

+0

Ich bezweifle, wenn Sie jemals auf eine Schaltfläche klicken können, wenn sie bereits deaktiviert ist. Denken Sie daran, es ist immer noch die gleiche Schaltfläche im selben DOM – Shail016

+1

Wenn Sie Firefox haben dann laden Sie Ihre Seite (mit deaktivierten Button), und gehen Sie dann zu "Tools-> Web Developers-> Scratchpad". Dies öffnet ein kleines Notizblockfenster. Kopiere dein Skript in das Verzeichnis 'document.getElementById ('myElementID'). click()'. und klicken Sie dann auf "Ausführen", dann überprüfen Sie selbst, was passiert. :) – Shail016

1

Diese Art von Tests sind E2E (Ende zu Ende) nicht BDD.

Erste - wird jetzt ausgeführt, um die nächste Aktion zu ergreifen, müssen Sie eine Funktion schreiben, die die Ausführung verzögert, z. B. neue Daten vom Server herunterladen.

Der zweite Code Rückkehr promise-http://selenium.googlecode.com/git/docs/api/javascript/class_webdriver_WebElement.html - „Zugfahrten ein Befehl auf dieses Element klicken.“ - Sie dann Rückruf nächste Aktion ausführen können.