Saya menggunakan Selenium RC untuk mengotomatiskan beberapa operasi browser tetapi saya ingin browser tidak terlihat. Apakah ini mungkin? Bagaimana? Bagaimana dengan Selenium Grid? Dapatkah saya menyembunyikan jendela Selenium RC juga?
Saya menggunakan Selenium RC untuk mengotomatiskan beberapa operasi browser tetapi saya ingin browser tidak terlihat. Apakah ini mungkin? Bagaimana? Bagaimana dengan Selenium Grid? Dapatkah saya menyembunyikan jendela Selenium RC juga?
Jawaban:
Ada beberapa pilihan:
Anda dapat menggunakan Selenium Grid agar browser dibuka di mesin yang sama sekali berbeda (atau mesin virtual) yang kemudian dapat Anda sambungkan melalui VNC atau Remote Desktop Connection jika Anda ingin melihat browser tersebut. Selain itu, opsi lain: jika Anda menjalankan proses latar depan Jenkins di server jarak jauh tersebut, ia dapat menjalankan proyek pengujian Anda di desktop.
Anda dapat menjalankan Selenium 'headless' di Linux di XVFB. Saya belum pernah mencoba melakukan ini dan ragu apakah upaya ini sepadan. http://www.alittlemadness.com/2008/03/05/running-selenium-headless/
Anda dapat membungkus Selenium RC dalam layanan Windows. http://support.microsoft.com/kb/137890 . Kecuali bahwa batasan izin pada versi windows yang lebih baru mungkin akan mencegah Selenium mengakses desktop seperti yang biasa kita lakukan pada Windows 2000.
Pilihan lainnya adalah menggunakan sesuatu seperti WebDriver HTMLUnitDriver, yang tidak meluncurkan browser 'asli'. http://code.google.com/p/webdriver/ . Juga ada opsi PhantomJS serta 'headless Chrome' yang dapat Anda gunakan.
Tentu saja ada juga opsi untuk menggunakan layanan seperti SauceLabs, di mana Anda bisa menjalankan pengujian Anda di cloud. Setelah pengujian Anda selesai, Anda dapat menonton video dari mereka yang sedang berjalan.
Di Linux, Anda dapat menjalankan WebDriver dalam tampilan headless (virtual) untuk menyembunyikan browser. Ini dapat dilakukan dengan Xvfb (X virtual framebuffer).
Anda dapat mengontrol Xvfb langsung dari kode Python menggunakan xvfbwrapper
:
https://github.com/cgoldberg/xvfbwrapper
Kode Python untuk menjalankan headless akan terlihat seperti ini:
from selenium import webdriver
from xvfbwrapper import Xvfb
display = Xvfb()
display.start()
# now Firefox will run in a virtual display.
# you will not see the browser.
driver = webdriver.Firefox()
driver.get('http://www.google.com')
print(driver.title)
driver.quit()
display.stop()
Instal dependensi di Debian / Ubuntu:
$ sudo apt-get install xvfb
$ pip install xvfbwrapper
Saya dengan mudah berhasil menyembunyikan jendela browser.
Instal saja PhantomJS . Kemudian, ubah baris ini:
driver = webdriver.Firefox()
untuk:
driver = webdriver.PhantomJS()
Sisa kode Anda tidak perlu diubah dan tidak ada browser yang akan terbuka. Untuk tujuan debugging, gunakan driver.save_screenshot('screen.png')
pada langkah-langkah berbeda dari kode Anda.
driver = webdriver.PhantomJS(r"C:\\phantomjs\phantomjs.exe")
1 untuk Selenium RC sebagai layanan windows.
Untuk menjalankan tes yang sepenuhnya tersembunyi, saya pikir Anda tidak memiliki banyak solusi jika Anda menggunakan windows.
Apa yang akan saya lakukan untuk mendedikasikan komputer di LAN Anda untuk selalu online dan menjalankan server selenium RC. Jadi Anda menggunakan IP komputer itu, bukan localhost untuk menjalankan tes Anda. Sebagai contoh:
browser = selenium("10.15.12.34",4444,"*firefox","http://saucelabs.com")
(mengingat bahwa itulah ip komputer yang menjalankan server).
Setelah pengaturan itu, Anda menjalankan pengujian di komputer Anda, browser dan jendela server RC ada di komputer lain dan kembali ke komputer Anda setelah selesai.
Di Linux, Anda dapat menjalankan browser uji coba pada tampilan virtual. Anda akan membutuhkan xvfb
paket untuk membuat server X virtual. Di distro berbasis Debian, jalankan saja
sudo apt-get install xvfb
Ada alat bagus ephemeral-x.sh
yang akan dengan mudah mengatur perintah apa pun untuk dijalankan di tampilan virtual. Unduh dan buat itu dapat dieksekusi:
wget https://raw.github.com/jordansissel/xdotool/master/t/ephemeral-x.sh
chmod +x ephemeral-x.sh
Kemudian Anda cukup menggunakannya untuk memulai server Selenium:
./ephemeral-x.sh java -jar selenium-standalone.jar
Semua jendela browser yang dibuat oleh Selenium sekarang akan menggunakan tampilan virtual dan tidak akan terlihat oleh Anda.
Jika Anda menggunakan Windows, salah satu opsinya adalah menjalankan tes di bawah akun pengguna yang berbeda . Ini berarti browser dan server java tidak akan terlihat oleh akun Anda sendiri.
Beginilah cara saya menjalankan pengujian saya dengan maven di desktop linux (Ubuntu). Saya muak karena tidak bisa bekerja dengan webdriver firefox yang selalu fokus.
Saya telah menginstal xvfb
xvfb-run -a mvn instalasi bersih
Itu dia
Dalam banyak kasus, PhantomJS tidak sepenuhnya sesuai dengan kebutuhan Anda, saya ingin menguraikan tentang opsi chrome tanpa kepala yang disebutkan dalam jawaban Dave Hunt.
chrome 57 baru saja meluncurkan fitur ini. Anda dapat menggunakannya dengan meneruskan flag --headless melalui ChromeDriver, untuk info lebih lanjut lihat pembahasan dalam pertanyaan ini
Ada proyek terkait PhantomJS yang disebut GhostDriver , yang dimaksudkan untuk menjalankan instance PhantomJS di Selenium Grid menggunakan protokol JSON webdriver wire. Itu mungkin yang Anda cari, meskipun pertanyaan ini sudah berusia 4 tahun sekarang.
Di MacOSX, saya belum dapat menyembunyikan jendela browser, tetapi setidaknya saya menemukan cara memindahkannya ke tampilan lain sehingga tidak terlalu mengganggu alur kerja saya. Saat Firefox menjalankan pengujian, cukup klik kontrol ikonnya di dok, pilih Opsi, dan Tetapkan ke Tampilan 2.
curl -k https://gist.githubusercontent.com/terrancesnyder/995250/raw/cdd1f52353bb614a5a016c2e8e77a2afb718f3c3/ephemeral-x.sh -o ~/ephemeral-x.sh
chmod +x ~/ephemeral-x.sh
~/ephemeral-x.sh TestsStarterCommand
Ngomong-ngomong, ini adalah fitur yang dibutuhkan oleh setiap pengembang yang menjalankan e2e yang secara logis akan menelurkan browser. Dalam lingkungan pengembangan, menangani jendela yang terus bermunculan dan yang secara tidak sengaja Anda dapat berinteraksi membuat pengujian gagal adalah hal yang menjengkelkan.
Menggunakan headless Chrome akan menjadi pilihan terbaik Anda, atau Anda dapat memposting langsung ke situs untuk berinteraksi dengannya, yang akan menghemat banyak daya komputasi untuk hal / proses lain. Saya menggunakan ini saat menguji bot otomatisasi web yang mencari sepatu di beberapa situs menggunakan elemen berat cpu, semakin banyak daya yang Anda hemat, dan semakin sederhana program Anda, semakin mudah untuk menjalankan beberapa proses sekaligus dengan kecepatan muhc lebih besar dan keandalan.