Odpalam serwer Selenium za pomocą skryptu bash i jak widać na podstawie poniższych znaczników czasu w dzienniku, przejście do trybu online zajmuje około 32 sekund:
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
Zamiast używać komendy „sleep 32” po uruchomieniu serwera (aby opóźnić skrypt przed przejściem dalej), chciałbym, aby mój skrypt bash czekał, aż zobaczy ciąg „Started SocketListener”, a następnie kontynuuje. Czy to jest możliwe?
sed
polecenie, które zapisuje w dzienniku wystarczająco dużo, aby wymusić opróżnienie (?), Uruchamia go natychmiast (przetestowałem), ale myślę, że ma to możliwość, że wstawione dane mogą być przeplatane linią sesji selenu. .$
adres, na przykład). Nie widziałem tego jednak w moich testach (z GNU sed). Jak dokładnie pokazałeś błąd, na jakim systemie operacyjnym?Jest to trochę trudniejsze w skrypcie prostej powłoki, ale tego właśnie używałem od dłuższego czasu dla tomcat i oc4j:
alarm
Będzie obsługiwać wszelkie potencjalne powieszenie gdzie Tomcat nie powiodło się. Liczba linii do powrotu z EOF jest regulowana (z pliku konfiguracyjnego).W końcu przeniosłem całą rzecz na Python; choć jest nieco dłuższy, jest nieco bardziej wydajny:
źródło
Możesz dodać to do skryptu, aby wprowadzić pauzę:
Wykorzystuje moduł perla File :: Tail , aby zachowywać się jak
tail -f logfile | grep Started SocketListener
.Zamień / var / log / message na odpowiedni plik dziennika. Pamiętaj, że zawiesi się na zawsze, jeśli „Started SocketListener” nigdy się nie pojawi.
źródło
Może powinieneś skorzystać z limitu czasu zamiast czekać w nieskończoność.
Poniższa funkcja bash będzie blokować, dopóki nie pojawi się podany termin wyszukiwania lub nie upłynie określony limit czasu.
Status wyjścia wyniesie 0, jeśli ciąg zostanie znaleziony w ciągu limitu czasu.
Być może plik dziennika jeszcze nie istnieje tuż po uruchomieniu Selenium. W takim przypadku należy zaczekać na jego pojawienie się przed wyszukiwaniem ciągu:
Oto jak możesz go użyć:
źródło