HINWEIS: Nennen wir "Klicken" den Endbenutzer-Klick. 'js click' ist ein Klick über JS
Warum funktioniert das Klicken auf "über JavaScript", wenn ein normaler WebDriver-Klick dies nicht tut?
Hierfür gibt es zwei Fälle:
I. Wenn Sie PhamtomJS verwenden
Dann ist dies das bekannteste Verhalten von PhantomJS
. Einige Elemente können beispielsweise manchmal nicht angeklickt werden <div>
. Dies liegt daran, dass PhantomJS
das Original ursprünglich für die Simulation der Browser-Engine erstellt wurde (wie anfängliches HTML + CSS -> Berechnen von CSS -> Rendern). Es bedeutet jedoch nicht, als Endbenutzer (Anzeigen, Klicken, Ziehen) mit ihm zu interagieren. Daher PhamtomJS
wird die Interaktion mit Endbenutzern nur teilweise unterstützt.
WARUM FUNKTIONIERT JS CLICK? Bei jedem Klick handelt es sich um einen mittleren Klick. Es ist wie eine Waffe mit 1 Lauf und 2 Abzügen . Eine aus dem Ansichtsfenster, eine aus JS. Da PhamtomJS
große in dem Motor zu simulieren - Browser, ein JS Klick sollte perfekt funktionieren.
II. Der Event-Handler von "click" musste in der schlechten Zeit binden.
Zum Beispiel haben wir eine <div>
Wir können mit dem gleichen Ergebnis enden. Klicken funktioniert nicht, da WebdriverJS versucht, auf das Element zu klicken, wenn es keinen Klickereignishandler hat.
WARUM FUNKTIONIERT JS CLICK? Js Klick ist wie das direkte Einfügen von js in den Browser. Möglich mit 2 Möglichkeiten,
Die Faust ist über die devtools-Konsole (ja, WebdriverJS kommuniziert mit der devtools-Konsole).
Zweitens wird ein <script>
Tag direkt in HTML eingefügt.
Für jeden Browser ist das Verhalten unterschiedlich. Unabhängig davon sind diese Methoden komplizierter als das Klicken auf die Schaltfläche. Click verwendet das, was bereits vorhanden ist (Endbenutzer klicken), js click geht durch die Hintertür.
Und für js Klick scheint eine asynchrone Aufgabe zu sein. Dies hängt mit einem etwas komplexen Thema zusammen: " Browser-asynchrone Task- und CPU-Task-Planung " (lesen Sie es vor einiger Zeit und finden Sie den Artikel nicht wieder). Kurz gesagt, dies führt meistens dazu, dass js click auf einen Zyklus der Taskplanung der CPU warten muss und nach dem Binden des Klickereignisses etwas langsamer ausgeführt wird.
(Sie konnten diesen Fall kennen, als Sie das Element manchmal anklickbar fanden, manchmal nicht.)
Wann genau passiert dies und was ist der Nachteil dieser Problemumgehung (falls vorhanden)?
=> Wie oben erwähnt, bedeuten beide für einen Zweck, aber über die Verwendung des Eingangs:
- Klicken Sie auf: verwendet standardmäßig den Browser.
- JS-Klick: geht durch die Hintertür.
=> Für die Leistung ist es schwer zu sagen, da es auf Browsern beruht. Aber allgemein:
- Klicken: bedeutet nicht schneller, sondern nur eine höhere Position in der Zeitplanliste der CPU-Ausführungsaufgabe.
- JS-Klick: bedeutet nicht langsamer, sondern nur an der letzten Position der Zeitplanliste der CPU-Aufgabe.
=> Nachteile:
- Klick: scheint keinen Nachteil zu haben, außer dass Sie PhamtomJS verwenden.
- JS-Klick: sehr gesundheitsschädlich. Sie können versehentlich auf etwas klicken, das in der Ansicht nicht vorhanden ist. Wenn Sie dies verwenden, stellen Sie sicher, dass das Element vorhanden und verfügbar ist, um es als Standpunkt des Endbenutzers anzuzeigen und darauf zu klicken.
PS, wenn Sie nach einer Lösung suchen.
- Verwenden Sie PhantomJS? Ich werde vorschlagen, stattdessen Chrome Headless zu verwenden. Ja, Sie können Chrome Headless unter Ubuntu einrichten. Die Sache läuft genau wie Chrome, hat aber nur keine Aussicht und ist weniger fehlerhaft wie PhantomJS.
- Sie verwenden PhamtomJS nicht, haben aber immer noch Probleme? Ich werde vorschlagen, ExpectedCondition of Protractor mit zu verwenden
browser.wait()
( überprüfen Sie dies für weitere Informationen )
(Ich möchte es kurz machen, bin aber schlecht gelandet. Alles, was mit Theorie zu tun hat, ist kompliziert zu erklären ...)