Ich starte den Selenium-Server mit einem Bash-Skript. Wie Sie den Zeitstempeln im folgenden Protokoll entnehmen können, dauert es ungefähr 32 Sekunden, bis das Ding vollständig online ist:
Feb 28, 2012 10:19:02 PM org.openqa.grid.selenium.GridLauncher main
INFO: Launching a standalone server
22:19:02.835 INFO - Java: Sun Microsystems Inc. 20.0-b11
22:19:02.836 INFO - OS: Linux 2.6.32-220.4.1.el6.x86_64 amd64
22:19:02.852 INFO - v2.19.0, with Core v2.19.0. Built from revision 15849
22:19:02.988 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub
22:19:02.990 INFO - Version Jetty/5.1.x
22:19:02.992 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver]
22:19:02.993 INFO - Started HttpContext[/selenium-server,/selenium-server]
22:19:02.993 INFO - Started HttpContext[/,/]
22:19:34.552 INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@488e32e7
22:19:34.552 INFO - Started HttpContext[/wd,/wd]
22:19:34.555 INFO - Started SocketListener on 0.0.0.0:4444
22:19:34.555 INFO - Started org.openqa.jetty.jetty.Server@7d29f3b5
Anstatt nach dem Starten des Servers den Befehl "sleep 32" zu verwenden (um das Skript zu verzögern, bevor Sie fortfahren), möchte ich, dass mein Bash-Skript wartet, bis die Zeichenfolge "Started SocketListener" angezeigt wird, und dann fortfährt. Ist das möglich?
sed
Befehl, der genug in das Protokoll schreibt, um einen Flush (?) Zu erzwingen, wird sofort aktiviert (ich habe ihn getestet), aber ich denke, dass die Möglichkeit besteht, dass die eingefügten Daten mit einer Selenium-Session-Zeile durchsetzt werden. .$
Adresse). Ich habe das in meinen Tests allerdings nicht gesehen (mit GNU sed). Wie genau haben Sie den Fehler auf welchem Betriebssystem gezeigt?In Straight-Shell-Skripten ist es etwas schwieriger, aber das habe ich eine ganze Weile für Tomcat und oc4j verwendet:
Das
alarm
wird jedes mögliche Hängen behandeln, bei dem Tomcat versagt hat. Die Anzahl der Zeilen, die vom EOF zurückgehen sollen, ist einstellbar (aus einer Konfigurationsdatei).Ich habe das Ganze schließlich auf Python umgestellt. Es ist zwar etwas länger, aber etwas effizienter:
quelle
Sie können dies Ihrem Skript hinzufügen, um die Pause zu implementieren:
Es verwendet das Perl- Modul File :: Tail, um sich wie zu verhalten
tail -f logfile | grep Started SocketListener
.Ersetzen Sie / var / log / message durch die entsprechende Protokolldatei. Beachten Sie, dass es für immer hängen bleibt, wenn "Started SocketListener" nie angezeigt wird.
quelle
Vielleicht sollten Sie eine Zeitüberschreitung verwenden, anstatt auf unbestimmte Zeit zu warten.
Die unten stehende Bash-Funktion wird blockiert, bis der angegebene Suchbegriff angezeigt wird oder ein bestimmtes Zeitlimit erreicht ist.
Der Exit-Status ist 0, wenn die Zeichenfolge innerhalb des Timeouts gefunden wird.
Möglicherweise existiert die Protokolldatei noch nicht direkt nach dem Start von Selenium. In diesem Fall sollten Sie warten, bis es angezeigt wird, bevor Sie nach der Zeichenfolge suchen:
So können Sie es verwenden:
quelle