Estou iniciando o servidor Selenium com um script bash e, como você pode ver nos registros de data e hora no log abaixo, leva cerca de 32 segundos para que a coisa fique totalmente online:
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
Em vez de usar um comando "sleep 32" após iniciar o servidor (para atrasar o script antes de prosseguir), gostaria que meu script bash esperasse até ver a string "Started SocketListener" e continue. Isso é possível?
sed
comando modificado que grava o suficiente no log para forçar um flush (?), Aciona-o imediatamente (eu testei), mas acho que tem a possibilidade dos dados inseridos serem intercalados com uma linha de sessão de selênio. .$
endereço, por exemplo). Eu não vi isso acontecer nos meus testes (com GNU sed). Como exatamente você exibiu o bug, em qual SO?É um pouco mais difícil no script shell direto, mas é isso que eu estava usando há algum tempo para o tomcat e o oc4j:
O
alarm
manipulará qualquer suspensão potencial onde o tomcat falhou. O número de linhas para voltar do EOF é ajustável (de um arquivo de configuração).Eu finalmente mudei a coisa toda para python; enquanto é um pouco mais longo, é um pouco mais eficiente:
fonte
Você pode adicionar isso ao seu script para implementar a pausa:
Ele usa o módulo perl File :: Tail para se comportar como
tail -f logfile | grep Started SocketListener
.Substitua / var / log / message pelo arquivo de log apropriado. Observe que ele ficará travado para sempre se "Started SocketListener" nunca aparecer.
fonte
Talvez você deva usar um tempo limite em vez de esperar indefinidamente.
A função bash abaixo será bloqueada até que o termo de pesquisa especificado apareça ou que um tempo limite seja atingido.
O status de saída será 0 se a sequência for encontrada dentro do tempo limite.
Talvez o arquivo de log ainda não exista logo após o lançamento do Selenium. Nesse caso, você deve esperar que ele apareça antes de procurar a string:
Veja como você pode usá-lo:
fonte