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?

Yatendra Goel
sumber
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.

Dave Hunt
sumber
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
Corey Goldberg
sumber
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.

Stéphane Bruckert
sumber
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.

Santi
sumber
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.

pixelistik
sumber
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.

Igor Brejc
sumber
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

Paul Whelan
sumber
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

Marlies
sumber
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.

djangofan.dll
sumber
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.

chetstone
sumber
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.

Nestor Urquiza
sumber
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.

LiamººT
sumber