Ich möchte die Initialisierung von TinyMCE innerhalb meiner Tests unterdrücken und kann dies leicht tun, wenn das Javascript erkennen kann, dass ich auf einer Selenium-automatisierten Seite laufe.
Also, gibt es einen JS-Code, mit dem ich den Selenium-Treiber erkennen kann? Alternativ, wie kann ich die UserAgent-Zeichenfolge so erweitern, dass sie ein Muster enthält, das ich von JS erkennen kann?
Wenn es wirklich wichtig ist, führe ich dies unter Mac OS X durch Gurke und Capybara.
Soweit ich weiß, gibt es keine browserübergreifende Methode, mit der Selenium erkennt, dass es den Browser antreibt. In FF setzt webdriver das Attribut webdriver
auf das html
-Element, aber anscheinend nicht in anderen Browsern. Vielleicht wird es eines Tages der Weg sein zu erkennen, dass der Browser von Selenium betrieben wird, aber nicht für den Moment. Ich habe es gerade mit FF und Chrome getestet: Das Attribut war in FF vorhanden, aber nicht in Chrome. Also das ist das ...
Manchmal muss ich etwas tun, was Sie erreichen wollen. Ich betreibe große Test-Suiten mit Selenium. Diese Suites laufen unter verschiedenen Versionen, Chrome, Firefox und IE, unter Linux, Windows und OS X, wobei einige der Tests remote auf Sauce Labs ausgeführt werden.
Die Methoden, die ich verwendet habe, basieren auf executeScript
. (Ich verbinde mit dem Java-Dokument, aber diese Methode existiert für alle Plattformen, für die Selenium verfügbar ist.) Ich benutze es, um Code auf der Browserseite auszuführen, bevor einen Test ausführt. Die zwei Möglichkeiten, die ich diese Methode verwendet habe:
Legen Sie eine variable Browserseite auf window
fest, die von meinem Browser überprüft wird. Also könnte ich zum Beispiel window.running_test_suite_for_foobar = true
setzen und dann Code überprüfen lassen. Es besteht die Gefahr eines Konflikts, aber wenn der Variablenname sorgfältig verwendet wird, ist das Risiko minimal.
Eine andere Methode, die ich verwendet habe, ist, meinen Code so zu gestalten, dass er Konfigurationsoptionen oder undokumentierte Methoden hat, die aufgerufen werden können, um ihn für eine Testumgebung richtig einzurichten oder vollständig zu deaktivieren. Zum Beispiel habe ich ein onbeforeunload
-Modul, das verhindert, dass Benutzer sich von einer Seite mit nicht gespeicherten Änderungen entfernen. Beim Testen ist es nicht sinnvoll, dies generell zu aktivieren. Selenium könnte mit dem Popup umgehen, aber wenn Sie Tests remote durchführen, verursacht jedes einzelne Bit erhebliche Kosten. Dann mehrere Dutzende von Tests und dann haben Sie eine Test-Suite, die einfach ein paar mehr Minuten dauern kann. Also habe ich eine Methode, die ich anrufe, um sie auszuschalten.
Die Methoden unterscheiden sich von Browser zu Browser. Ihr Code muss prüfen, welchen Browser Sie ausführen möchten und dann je nach Browser die richtige Aktion ausführen.
Die Methoden, die für FF und Chrome in anderen Antworten hier vollständig angezeigt werden, ersetzen die User-Agent-Zeichenfolge (im Gegensatz zu dem, was einige gesagt haben). Um an anzuhängen, müssten Sie wissen, wie die unveränderte Zeichenkette aussehen würde. Dies ändert sich von Browser zu Browser und von Version zu Version. Ich nehme an, Sie könnten eine Tabelle mit Stammbenutzer-Agent-Strings zum Ändern haben. Dies ist nicht etwas, das ich beibehalten möchte. Oder Sie könnten den Browser zweimal starten: einmal, um den Benutzer-Agent abzufragen, und einmal, um den Test mit dem geänderten Benutzer-Agent auszuführen.
Und Sie können nicht faul sein, die richtige User-Agent-Zeichenfolge zu verwenden. Es ist zwar richtig, dass Browser-Code Feature-Erkennung statt Browser-Erkennung vornimmt, es gibt jedoch Fälle , wo der einzige vernünftige Weg zu erkennen ist, dass Code muss einen speziellen Fall behandeln, indem er weiß, welche Version des Browsers, in dem er ausgeführt wird. Wenn das Problem ein Bug im Browser ist, gibt es kein Feature zu prüfen. Es kann zu kostspielig oder unmöglich sein, den Fehler zu überprüfen. Daher muss der Code die Zeichenfolge des Benutzeragenten überprüfen. Ihr Code muss dies möglicherweise nicht tun, aber der Code von Drittanbietern kann dies tun. (Ich habe beispielsweise ein Problem mit getBoundingClientRect
festgestellt, bei dem die Koordinaten im IE in der Regel falsch waren, aber nur in einer Version von Chrome. Es ist zu kostspielig, zur Laufzeit nach dem Fehler zu suchen, und ich kann Stellen Sie sicher, dass eine Änderung der Schriftarten oder Anzeigeeinstellungen nicht zu falschen Ergebnissen führt.)
Ja, Sie können es tun, wenn jemand den firefox-Treiber für die Selen-Automatisierung verwendet, für die Erkennung des Selen-Treibers müssen Sie folgenden Code auf Ihrer Client-Seite ablegen: -
%Vor%Für Chrome und IE spezifischen Selen Browser funktioniert es nicht.
Tags und Links javascript capybara selenium webdriver cucumber