2014-10-20 12 views
11

Damit wir Front-to-Back-Web-UI-Tests durchführen können, verwenden wir Selenium und ChromeDriver, um Seitenladevorgänge als Teil unseres Testpakets zu automatisieren.Running Selenium Server & ChromeDriver als Windows-Dienst

Dies verhält sich während des Entwicklertests (auf dem lokalen Computer eines Entwicklers) wie erwartet, aber wir haben Schwierigkeiten, diese Prüfungen als Teil unserer kontinuierlichen Integrationsentwicklung durchzuführen.

Unsere Server-Anlage ist * NIX-basiert, und unsere gesamte CI-Infrastruktur läuft auf diesen Maschinen. Damit wir Chrome unter Windows (unseren Liefermechanismus) testen können, haben wir ein Selenium Grid 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 hatten einen Windows-Desktop, der ausschließlich zum Ausführen dieser Tests bereitgestellt wurde. Dies enthält unseren Standard-Enterprise-Build von Windows 7. Dieser Computer wird regelmäßig in Übereinstimmung mit den Aktualisierungsrichtlinien der IT-Abteilung neu gestartet.

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

Beim Ausführen der Tests von CI schlagen sie jedoch aufgrund von Timeout fehl. Unsere Arbeitstheorie ist, dass der Systembenutzer, der den Dienst ausführt, keine interaktiven Fenster erstellen kann. Eine Websuche hat Bezug auf das Problem "Sitzung 0" genommen, aber mit wenig bis keinem konstruktiven Ratschlag, wie man weiter vorgeht.

Das manuelle Starten des Selenium Server-Prozesses aus einer interaktiven Sitzung ist keine praktikable Lösung, da dies zu brüchigen Tests führt, die aufgrund eines Infrastrukturproblems fehlschlagen und nicht eine echte Testregression darstellen.


Wie können wir eine Instanz von Selenium Server haben über einen Windows-Dienst gestartet, wenn das System neu startet, das in der Lage ist Chrome Instanzen starten?

Antwort

6

Im Moment kann es nicht anders sein - früher funktionierte es in Sitzung 0, aber in den letzten paar Tagen nach Chrome Update funktioniert nur für interaktive Sitzungen.

Verwandte Fehler:

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

+0

Gibt es eine bestimmte Version von Chrome, von der Sie wissen, dass sie in Session 0 funktioniert? Wenn ich einfach herunterstufen kann, dann wäre das eine Option. – jwa

+1

Mit Versionen von Chrome vor 38 funktioniert alles als Windows-Service gut. Seit Version 38 - mein Windows-Dienst mit Selen funktioniert nicht. Downgrade Chrome hat das Problem für mich gelöst – razon

+1

Ich kann bestätigen was @razon sagt. Chrome 37 ist die letzte bekannte Version, die funktioniert, wenn sie unter Dienst ausgeführt wird. –

3

Sie können nicht Selenium Grid als Windows-Dienst seit Windows Vista laufen. Microsoft nennt es "Sitzung 0 Isolation". Sie könnten es in Windows 2000 oder XP tun, aber seit dem Erscheinen von Vista wird Microsoft Grid nicht mehr mit dem Desktop (oder irgendwelchen anderen UI-Programmen) interagieren lassen. Ungeachtet der Tatsache, dass Sie immer noch das Kontrollkästchen "Interaktion mit dem Desktop" sehen, ist es ein Ablenkungsmanöver. Daher MÜSSEN Sie Selenium Grid im Vordergrund auf diesem Server ausführen, damit es auf die Sitzung zugreifen kann. Wenn Windows Server ausgeführt wird, können Sie theoretisch mehrere Sitzungen ausführen und Grid im Vordergrund bei einer der Benutzersitzungen ausführen, die nicht Null sind.

+0

Einverstanden :(Sie können den Hub als Dienst mit nssm starten, aber wenn der Knoten als Dienst gestartet wird, können Sie den Browser nicht 'sehen'. Für einige Leute vielleicht kein Problem, aber für mich. Also Der Knoten wird als Batch-Datei ausgeführt.Um ihn automatisch zu starten, fügen Sie ihn in den Ordner "start up" ein oder erstellen Sie einen Taskplaner, der komplizierter ist. – oden

3

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

Was ist zu tun:

diese Weise wird die der Knoten ausgeführt wird Als Service überleben Maschinen neu gestartet und arbeiten mit der neuesten Chrome-Version.

Wenn das Benutzerkonto Sie an die Maschine anzumelden verwenden unterscheidet sich von dem Benutzerkonto Sie den Knoten als Dienst dann werden Sie nicht sehen, die Browser auf dem Desktop Pop-up, die ausgeführt wird, wie sie in einem anderen Benutzer ausgeführt werden Session. Das Endergebnis ist, dass es fast identisch mit dem Ausführen als normaler Dienst ist, aber das Problem Session 0 umgeht.

+0

Wie unterscheidet sich das von NSSM, das frei ist? https://nssm.cc/ –

12

Es könnte leicht mit NSSM getan werden. Installation von Diensten sieht aus wie diese:

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 einfach Art und Weise Dienst zu entfernen, wenn nötig:

nssm remove seleniumnode confirm 

Ziel hinzufügen zu Ihrem PATH-Variable NSSM und von der Konsole als Administrator ausführen

+0

Ich habe gelacht, als ich rausgefunden habe, wofür NSSM steht –

+0

Es hat funktioniert, aber Screenshots sehen jetzt wie ein schwarzer Bildschirm aus – SLY

+0

Sieht so aus als wäre dies ein IE-Problem – SLY

0

Ja, du solltest NSSM benutzen. Wichtig ist, dass Sie Ihr Windows-Konto auf der Registerkarte "Anmelden" oder einem anderen gültigen Konto hinzufügen. Wenn Sie Ihren Knoten mit der Option "Lokales Systemkonto" ausführen, erhalten Sie das Problem mit Sitzung 0. Bei einer normalen Benutzersitzung laufen die Knoten im Hintergrund unsichtbar :)

Verwandte Themen