Estoy iniciando el servidor Selenium con un script bash y, como puede ver en las marcas de tiempo en el registro a continuación, la cosa tarda unos 32 segundos en conectarse por completo:
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
En lugar de utilizar un comando "sleep 32" después de iniciar el servidor (para retrasar el script antes de continuar), me gustaría que mi script bash espere hasta que vea la cadena "Started SocketListener" y luego continúe. ¿Es eso posible?
sed
comando modificado que escribe lo suficiente en el registro para forzar un vaciado (?) Lo activa inmediatamente (lo probé), pero creo que tiene la posibilidad de que los datos insertados se intercalen con una línea de sesión de selenio. .$
dirección, por ejemplo). Sin embargo, no vi que eso sucediera en mis pruebas (con GNU sed). ¿Cómo exhibiste exactamente el error, en qué sistema operativo?Es un poco más difícil en el script de shell directo, pero esto es lo que estaba usando durante bastante tiempo para tomcat y oc4j:
El
alarm
manejará cualquier posible bloqueo donde Tomcat falló. El número de líneas para regresar desde el EOF es ajustable (desde un archivo de configuración).Eventualmente moví todo a Python; Si bien es un poco más largo, es un poco más eficiente:
fuente
Puede agregar esto a su script para implementar la pausa:
Utiliza el módulo perl File :: Tail para comportarse como
tail -f logfile | grep Started SocketListener
.Reemplace / var / log / message con el archivo de registro apropiado. Tenga en cuenta que se bloqueará para siempre si "Started SocketListener" nunca aparece.
fuente
Tal vez deberías usar un tiempo de espera en lugar de esperar indefinidamente.
La función bash a continuación se bloqueará hasta que aparezca el término de búsqueda dado o se alcance un tiempo de espera determinado.
El estado de salida será 0 si la cadena se encuentra dentro del tiempo de espera.
Quizás el archivo de registro aún no exista justo después de iniciar Selenium. En ese caso, debe esperar a que aparezca antes de buscar la cadena:
Así es como puedes usarlo:
fuente