Я запускаю сервер Selenium с помощью bash-скрипта, и, как вы можете видеть из временных меток в журнале, приведенном ниже, требуется около 32 секунд, чтобы вещь полностью подключилась к сети:
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
Вместо использования команды «sleep 32» после запуска сервера (чтобы отложить выполнение сценария перед продолжением), я бы хотел, чтобы мой сценарий bash подождал, пока он увидит строку «Started SocketListener», а затем продолжил. Это возможно?
sed
команда, которая записывает достаточно в журнал, чтобы вызвать сброс (?), Немедленно запускает его (я проверял это), но я думаю, что есть вероятность, что вставленные данные будут чередоваться со строкой сеанса селена. .$
адрес, например). Я не видел, чтобы это случилось в моих тестах (с GNU sed). Как именно вы выставили ошибку, на какой ОС?Это немного сложнее в прямом сценарии оболочки, но это то, что я использовал довольно долго для tomcat и oc4j:
Он
alarm
будет обрабатывать любые потенциальные зависания в случае сбоя tomcat. Количество строк, возвращаемых из EOF, регулируется (из файла конфигурации).В конце концов я переместил все это на Python; хотя он немного длиннее, он немного эффективнее:
источник
Вы можете добавить это в ваш скрипт для реализации паузы:
Он использует модуль perl File :: Tail, чтобы вести себя как
tail -f logfile | grep Started SocketListener
.Замените / var / log / message соответствующим файлом журнала. Обратите внимание, что он будет зависать вечно, если «Started SocketListener» никогда не появляется.
источник
Может быть, вы должны использовать тайм-аут, а не ждать бесконечно.
Приведенная ниже функция bash будет блокироваться до тех пор, пока не появится заданное условие поиска или не истечет заданное время ожидания.
Статус выхода будет 0, если строка найдена в течение времени ожидания.
Возможно, файл журнала еще не существует сразу после запуска Selenium. В этом случае вам следует подождать, пока он появится, прежде чем искать строку:
Вот как вы можете использовать это:
источник