Mehrere Instanzen von Firefox während des Selenium Webdriver Tests, der den Fokus nicht korrekt behandelt.

8

Ich habe festgestellt, dass beim Ausführen mehrerer Selen-firefox-Tests parallel auf einem Gitter die Fokusereignisbehandlung nicht korrekt funktioniert. Ich habe bestätigt, dass, wenn jeder meiner Tests einzeln ausgeführt wird und der Fokus des Betriebssystems gegeben ist, die Tests 100% der Zeit bestehen. Ich habe die Tests auch parallel mit Chrome am Grid durchgeführt und das Problem nicht gesehen.

Ich habe den folgenden Thread in Google Groups gefunden, der vorschlägt, jeden Browser in einer separaten Instanz von xvfb zu starten. Ссылка

Der Teil des Tests, der fehlschlägt, ist auf einen jquery date picker zurückzuführen, der im Projekt verwendet wird. Die Datumsauswahl wird bei einem Fokusereignis gestartet, und da mehrere Selentests zur gleichen Zeit ausgeführt werden, führt der Webdriver-Test den Befehl .click () aus, der Fokus bleibt jedoch nicht lange genug, damit das Datumsauswahl-Widget angezeigt wird.

.focus (function () {$ input.trigger ("focus");});

Meine Frage ist, ob jemand das schon einmal gesehen hat und es durch einige Firefox-Profileinstellungen gelöst hat. Ich habe versucht, die folgende Eigenschaft zu laden, die keine Auswirkung auf das Problem hatte.

%Vor%

Der Test schlägt auf die gleiche Weise wie zuvor mit dieser Eigenschaft fehl, die im Firefox-Profil des Remote-Treibers aktiviert und geladen wurde.

Ich brauche einen Weg, um sicherzustellen, dass das Fokus-Ereignis zu 100% ausgelöst wird oder um das Problem zu lösen, dass mehrere Firefox-Browser um den Fokus konkurrieren. In Anbetracht der Tatsache, dass Chrome keine dieser Probleme anzeigt, frage ich mich, ob es sich auch um einen Fehler in Firefox handelt.

Danke!

    
jjhughes57 15.08.2012, 17:59
quelle

3 Antworten

2

@djangofan: Falsch. Sie können den Fokus nicht sperren. Nachdem Sie den Fokus in einem Fenster angefordert haben und bevor Sie eine Aktion auslösen, fordert ein anderes Fenster den Fokus an, und Ihre Aktion (wie das Senden von Schlüsseln an das Eingabefeld) funktioniert einfach nicht. Dies geschah mehrmals täglich in unseren Tests. Es war schwierig zu reproduzieren, da es bei jedem Testlauf an verschiedenen Stellen fehlschlug. Eine Lösung besteht darin, jeden Browser in einer separaten Anzeige auszuführen. Z.B. Sie können Xvfb verwenden:

%Vor%

Wenn Sie einen Browser starten, weisen Sie ihm einen separaten Bildschirm zu:

%Vor%     
mentallurg 15.02.2015 19:42
quelle
0

Ich hatte das gleiche Problem in meiner kontinuierlichen Integrationsumgebung mit Jenkins. Nach langem Suchen fand ich einen alten Bug in Firefox , der zu einem Fragen zur neuen Konfiguration , um diese Probleme zu vermeiden.

Die Lösung besteht darin, dieses Flag für das von den Tests verwendete Firefox-Profil zu aktivieren. Das Flag ist focusmanager.testmode , setze es auf true.

Die Erklärung ist, dass die Fokus-Ereignisse nur ausgelöst werden, wenn das Firefox-Fenster aktiv ist. Wenn Sie mehrere Tests ausführen, haben Sie mehrere Fenster, sodass nur das aktive Ereignis die Fokusereignisse auslöst. Mit diesem Parameter werden die Ereignisse auch für nicht aktive Fenster triggered.

    
Ricardo Vila 16.02.2018 13:49
quelle
-1

Sie können dies streiten und es ohne Probleme unter Ihre Kontrolle bringen. Schreiben Sie zuerst eine Methode, um das Popup-Fenster anhand seiner Fenster-Handle-ID zu identifizieren. Verwenden Sie dann einen JavaScriptExecutor, um "window.focus ()" in JavaScript auszuführen, um zu erzwingen, dass das Fenster fokussiert wird, bevor Sie eine weitere Aktion ausführen. Sie können das Popup dann bei Bedarf über den Namen des Fenstergriffs schließen.

    
djangofan 25.06.2013 23:14
quelle