webentwicklung-frage-antwort-db.com.de

Ausführen von Selenium Server & ChromeDriver als Windows-Dienst

Damit wir Front-to-Back-Web-UI-Tests durchführen können, verwenden wir Selenium und ChromeDriver, um das Laden von Seiten/Interaktionen als Teil unseres Testpakets zu automatisieren. 

Dies verhält sich erwartungsgemäß während des Entwicklertests (auf dem lokalen Computer eines Entwicklers), aber wir haben Schwierigkeiten, diese Prüfungen im Rahmen unseres kontinuierlichen Integrationsaufbaus durchzuführen.

Unsere Server-Anlage basiert auf * NIX und die gesamte CI-Infrastruktur läuft auf diesen Maschinen. Damit wir Chrome unter Windows testen können (unser Bereitstellungsmechanismus), haben wir ein Selenium-Gitter konfiguriert. Wenn die CI-Tests ausgeführt werden, greifen sie auf das Grid zu, um einen Windows-Knoten zu finden, auf dem die Tests ausgeführt werden.

Wir haben einen Windows-Desktop zur Verfügung gestellt, der ausschließlich zum Ausführen dieser Tests vorgesehen ist. Diese enthält unser Standard-Enterprise-Build von Windows 7. Diese Maschine wird regelmäßig gemäß den Update-Richtlinien der IT-Abteilung neu gestartet.

Um sicherzustellen, dass der Selenium-Server immer aktiv ist, haben wir den Selenium-Server (der im "Knoten" -Modus ausgeführt wird) als Windows-Dienst hinzugefügt. Der Selenium Server ist so konfiguriert, dass ChromeDriver gestartet wird, um die simulierte Benutzerinteraktion aufzurufen.

Wenn die Tests von CI ausgeführt werden, schlagen sie jedoch aufgrund eines Timeouts fehl. Unsere Arbeitstheorie lautet: Der Systembenutzer, der den Dienst ausführt, kann keine interaktiven Fenster erstellen. Bei einer Websuche wurde auf das Problem "Sitzung 0" hingewiesen, jedoch ohne konstruktive Ratschläge für die weitere Vorgehensweise.

Das manuelle Starten des Selenium Server-Prozesses von einer interaktiven Sitzung aus ist keine praktikable Lösung, da dies zu spröden Tests führt, die aufgrund eines Infrastrukturproblems und nicht einer echten Testregression fehlschlagen.


Wie kann eine Instanz von Selenium Server über einen Windows-Dienst gestartet werden, wenn das System neu gestartet wird und Chrome-Instanzen starten kann?

14
jwa

Es könnte leicht mit NSSM . Durchgeführt werden. Die Installation von Diensten sieht folgendermaßen aus:

nssm install seleniumhub Java -jar C:\Selenium\selenium-server-standalone-2.45.0.jar -role hub -hubConfig C:\Selenium\hub.json
nssm install seleniumnode Java -jar C:\Selenium\selenium-server-standalone-2.45.0.jar -role node -nodeConfig C:\Selenium\node.json

Es bietet eine einfache Möglichkeit, den Dienst bei Bedarf zu entfernen:

nssm remove seleniumnode confirm

Fügen Sie Ihrer PATH-Variablen ein Ziel zu nssm hinzu und führen Sie es als Administrator von der Konsole aus aus

18
RocketRaccoon

Im Moment können Sie nicht anders - es hat in Sitzung 0 gut funktioniert, aber in den letzten Tagen nach dem Chrome-Update funktionieren nur interaktive Sitzungen.

Verwandte Fehler:

https://code.google.com/p/Selenium/issues/detail?id=8029https://code.google.com/p/chromium/issues/detail? id = 422218

6
swiniak

Sie können Selenium Grid seit Windows Vista nicht als Windows-Dienst ausführen. Microsoft nennt es "Session 0 Isolation". Sie können dies unter Windows 2000 oder XP tun, aber seit dem Erscheinen von Vista lässt Grid Grid nicht mehr mit dem Desktop (oder anderen UI-Programmen für diese Angelegenheit) interagieren. Ungeachtet der Tatsache, dass Sie immer noch das Kontrollkästchen "Interaktion mit Desktop" sehen, handelt es sich um einen roten Hering. Daher MÜSSEN Sie Selenium Grid auf diesem Server im Vordergrund ausführen, um Zugriff auf die Sitzung zu erhalten. Wenn Windows Server ausgeführt wird, können Sie theoretisch mehrere Sitzungen ausführen und Grid in einer der Nicht-Null-Benutzersitzungen im Vordergrund laufen lassen.

4
djangofan

Meine bevorzugte Lösung für dieses Problem (und meine Standardeinstellung für das Ausführen von Selenium Grid als Dienst) ist die Verwendung eines einfachen Tools namens AlwaysUp. Es gibt eine kostenlose 30-Tage-Testversion, um es auszuprobieren.

Was ist zu tun:

Auf diese Weise wird der Knoten als Dienst ausgeführt, Neustart übersteht der Computer und arbeitet mit der neuesten Version Chrome.

Wenn sich das Benutzerkonto, mit dem Sie sich an der Maschine anmelden, von dem Benutzerkonto unterscheidet, das Sie zum Ausführen des Knotens als Dienst angeben, werden die Browser nicht auf dem Desktop angezeigt, da sie in einer anderen Benutzersitzung ausgeführt werden. Das Endergebnis ist, dass es fast identisch mit dem Ausführen als normaler Dienst ist, aber die Ausgabe von Session 0 umgeht.

4
SDET

Ja, Sie sollten NSSM verwenden. Wichtig ist, dass Sie Ihr Windows-Konto auf der Registerkarte "Anmelden" oder ein anderes gültiges Konto hinzufügen. Wenn Sie Ihren Knoten mit der Option "Lokales Systemkonto" ausführen, wird das Problem mit der Sitzung 0 angezeigt. Bei einer normalen Benutzersitzung laufen die Knoten reibungslos unsichtbar im Hintergrund :)

1
Sst

wir verwenden kein Selenium GRID, wir waren von seiner Stabilität enttäuscht. Wir verwenden ein "Jenkins Grid", das sind Jenkins-Slaves-Knoten auf verschiedenen Servern.

Die Slaves sind Dienste mit der Interaktion mit dem Desktop-Flag. Sie werden als Services mit NSSM und dem Flag SERVICE_INTERACTIVE_PROCESS ausgeführt. Stellen Sie sicher, dass NoInteractiveProcess auf 1 festgelegt ist (cf https://docs.Microsoft.com/en-us/windows/desktop/services/interactive-services ).

Wir haben nicht die ausgefallenen Funktionen des Rasters (dh das Ausgleichen der Browsertyp-Slots). Stattdessen gibt es Jenkins, die die Testjobs mit einem Slave-Knoten oder einem anderen ausgleichen. Anfangs haben wir die Interaktion mit dem Desktop-Flag nicht verwendet, da Browser ohne "echte" Anzeige ausgeführt wurden, aber das Verhalten war nicht sehr stabil ( vor allem bei Befehlen zur Größenänderung). Hoffe, das hilft.

0
vlabatut