Apakah mungkin menyembunyikan browser di Selenium RC?


92

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?


Mungkin tidak dapat diterima, tetapi seperti tidak bisakah Anda memindahkan browser dari layar (menggunakan otomatisasi UI windows biasa?) Seperti menempatkan jendela di (-10000, -10000)?
BrainSlugs83

2
Karena pertanyaan ini sudah lama sekarang, izinkan saya mengarahkan Anda ke jawaban terkini yang tepat di bagian bawah halaman ini .
Stéphane Bruckert

Jawaban:


87

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.


Berikut adalah petunjuk tentang cara membuat file bat untuk menginstal layanan: brantleytec.blogspot.com/2012/11/…
Brantley Blanchard

58

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

Ketika kode berjalan di browser virtual, apakah saya dapat terus menggunakan PC saya secara normal saat skrip interaksi browser berjalan?
Mugen

Sumber daya diambil, mesin Anda akan menjadi lebih lambat!
Tim Long

22

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.


5
Perlu disebutkan bahwa Anda harus meletakkan jalur PhantomJs.exe agar ini berfungsi. contohdriver = webdriver.PhantomJS(r"C:\\phantomjs\phantomjs.exe")
K DawG

1
Ya, tapi hanya di Windows.
Stéphane Bruckert

1
Anda tidak perlu menentukan lokasi biner asalkan dapat ditemukan dari variabel lingkungan $ PATH lingkungan Anda.
Corey Goldberg

13

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.


12

Di Linux, Anda dapat menjalankan browser uji coba pada tampilan virtual. Anda akan membutuhkan xvfbpaket untuk membuat server X virtual. Di distro berbasis Debian, jalankan saja

sudo apt-get install xvfb

Ada alat bagus ephemeral-x.shyang 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.


Skrip ini memiliki masalah kutipan. Jika saya mengatakan ./ephemeral-x.sh foo '*' dikatakan "Running: foo" diikuti dengan isi direktori saya.
Nick Retallack

4

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.


3

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


Ini seringkali merupakan cara termudah untuk memastikan xvfb berjalan dan digunakan oleh Selenium / WebDriver.
Samuli Pahaoja

1

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


0

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.


0

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.


0
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.


0

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.