Saya menjalankan server Selenium dengan skrip bash dan seperti yang dapat Anda lihat dari cap waktu pada log di bawah ini, dibutuhkan sekitar 32 detik untuk hal tersebut dapat sepenuhnya 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
Alih-alih menggunakan perintah "sleep 32" setelah memulai server (untuk menunda skrip sebelum melanjutkan), saya ingin skrip bash saya menunggu sampai ia melihat string "Mulai SocketListener", dan kemudian lanjutkan. Apakah itu mungkin?
sed
Perintah yang dimodifikasi yang menulis cukup untuk log untuk memaksa flush (?), Tidak menendang segera (saya mengujinya), tapi saya pikir itu memiliki kemungkinan data yang disisipkan untuk diselingi dengan garis sesi selenium .. .$
alamat, untuk satu). Saya tidak melihat itu terjadi dalam pengujian saya (dengan GNU sed). Bagaimana tepatnya Anda menunjukkan bug, pada OS apa?Ini sedikit lebih sulit dalam skrip shell lurus, tapi ini yang saya gunakan cukup lama untuk kucing jantan dan oc4j:
The
alarm
akan menangani setiap potensi gantung di mana tomcat gagal. Jumlah baris untuk kembali dari EOF dapat disesuaikan (dari file konfigurasi).Saya akhirnya memindahkan semuanya ke python; sementara itu sedikit lebih lama, itu sedikit lebih efisien:
sumber
Anda dapat menambahkan ini ke skrip Anda untuk menerapkan jeda:
Itu menggunakan modul perl File :: Tail untuk berperilaku seperti
tail -f logfile | grep Started SocketListener
.Ganti / var / log / pesan dengan file log yang sesuai. Perhatikan bahwa itu akan menggantung selamanya jika "Memulai SocketListener" tidak pernah muncul.
sumber
Mungkin Anda harus menggunakan batas waktu alih-alih menunggu tanpa batas waktu.
Fungsi bash di bawah ini akan memblokir hingga istilah pencarian yang diberikan muncul atau batas waktu yang diberikan tercapai.
Status keluar akan menjadi 0 jika string ditemukan dalam batas waktu.
Mungkin file log belum ada setelah meluncurkan Selenium. Dalam hal ini, Anda harus menunggu sampai muncul sebelum mencari string:
Inilah cara Anda dapat menggunakannya:
sumber