เป็นไปได้ไหมที่จะซ่อนเบราว์เซอร์ใน Selenium RC


92

ฉันใช้ Selenium RC เพื่อทำให้การทำงานของเบราว์เซอร์เป็นไปโดยอัตโนมัติ แต่ฉันต้องการให้เบราว์เซอร์มองไม่เห็น เป็นไปได้หรือไม่ อย่างไร? แล้ว Selenium Grid ล่ะ? ฉันสามารถซ่อนหน้าต่าง Selenium RC ได้หรือไม่


อาจไม่เป็นที่ยอมรับ แต่คุณไม่สามารถย้ายเบราว์เซอร์ออกจากหน้าจอได้ (โดยใช้ Windows UI Automation ปกติหรือไม่) เช่นวางหน้าต่างไว้ที่ (-10000, -10000)?
BrainSlugs83

2
เนื่องจากคำถามนี้เก่าแล้วฉันขอเปลี่ยนเส้นทางคุณไปยังคำตอบที่เป็นปัจจุบันที่ด้านล่างของหน้านี้
Stéphane Bruckert

คำตอบ:


87

มีไม่กี่ตัวเลือก:

  • คุณสามารถใช้ Selenium Grid เพื่อเปิดเบราว์เซอร์บนเครื่อง (หรือเครื่องเสมือน) ที่แตกต่างกันโดยสิ้นเชิงซึ่งคุณสามารถเชื่อมต่อผ่าน VNC หรือ Remote Desktop Connection หากคุณต้องการเห็นเบราว์เซอร์ นอกจากนี้ตัวเลือกอื่น: หากคุณเรียกใช้กระบวนการเบื้องหน้าของ Jenkins บนเซิร์ฟเวอร์ระยะไกลนั้นสามารถดำเนินการโครงการทดสอบของคุณบนเดสก์ท็อปได้

  • คุณสามารถรัน Selenium 'headless' บน Linux ใน XVFB ได้ ฉันไม่เคยลองทำสิ่งนี้และสงสัยว่ามันคุ้มค่ากับความพยายามจริงๆ http://www.alittlemadness.com/2008/03/05/running-selenium-headless/

  • คุณสามารถรวม Selenium RC ในบริการ Windows ได้ http://support.microsoft.com/kb/137890 ยกเว้นว่าข้อ จำกัด ด้านสิทธิ์ใน Windows รุ่นที่ใหม่กว่าอาจทำให้ Selenium ไม่สามารถเข้าถึงเดสก์ท็อปได้เช่นเดียวกับที่ Windows 2000 ใช้เพื่อให้เราทำได้

  • อีกทางเลือกหนึ่งคือใช้บางอย่างเช่น WebDriver HTMLUnitDriver ซึ่งไม่ได้เปิดเบราว์เซอร์ 'จริง' http://code.google.com/p/webdriver/ นอกจากนี้ยังมีตัวเลือก PhantomJS เช่นเดียวกับ 'Chrome ที่ไม่มีหัว' ที่คุณสามารถใช้ได้

  • แน่นอนว่ายังมีตัวเลือกในการใช้บริการเช่น SauceLabs ซึ่งคุณสามารถทำการทดสอบในระบบคลาวด์ได้ หลังจากการทดสอบของคุณเสร็จสิ้นคุณสามารถดูวิดีโอของการทดสอบได้


คำแนะนำในการสร้างไฟล์ bat เพื่อติดตั้งบริการ: brantleytec.blogspot.com/2012/11/…
Brantley Blanchard

58

บน Linux คุณสามารถเรียกใช้ WebDriver ในจอแสดงผล headless (เสมือน) เพื่อซ่อนเบราว์เซอร์ สามารถทำได้ด้วย Xvfb (X virtual framebuffer)

คุณสามารถควบคุม Xvfb ได้โดยตรงจากโค้ด Python โดยใช้xvfbwrapper: https://github.com/cgoldberg/xvfbwrapper

รหัส Python สำหรับการเรียกใช้ headless จะมีลักษณะดังนี้:

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()

ติดตั้งการอ้างอิงบน Debian / Ubuntu:

$ sudo apt-get install xvfb
$ pip install xvfbwrapper

เมื่อโค้ดทำงานในเบราว์เซอร์เสมือนฉันสามารถใช้พีซีของฉันต่อไปได้ตามปกติในขณะที่สคริปต์การโต้ตอบของเบราว์เซอร์ทำงานอยู่หรือไม่
Mugen

ทรัพยากรถูกยึดเครื่องของคุณจะช้าลง!
Tim Long

22

ฉันจัดการซ่อนหน้าต่างเบราว์เซอร์ได้อย่างง่ายดาย

เพียงแค่ติดตั้ง PhantomJS จากนั้นเปลี่ยนบรรทัดนี้:

driver = webdriver.Firefox()

ถึง:

driver = webdriver.PhantomJS()

ส่วนที่เหลือของโค้ดของคุณไม่จำเป็นต้องเปลี่ยนแปลงและจะไม่มีเบราว์เซอร์เปิดขึ้น สำหรับวัตถุประสงค์ในการดีบักให้ใช้driver.save_screenshot('screen.png')ในขั้นตอนต่างๆของโค้ดของคุณ


5
เป็นมูลค่าการกล่าวขวัญว่าคุณต้องวางเส้นทางของ PhantomJs.exe เพื่อให้สิ่งนี้ใช้งานได้ ตัวอย่างdriver = webdriver.PhantomJS(r"C:\\phantomjs\phantomjs.exe")
K DawG

1
ใช่ แต่เฉพาะบน Windows เท่านั้น
Stéphane Bruckert

1
คุณไม่จำเป็นต้องระบุตำแหน่งของไบนารีตราบใดที่สามารถพบได้จากตัวแปรสภาพแวดล้อม $ PATH ของสภาพแวดล้อมของคุณ
Corey Goldberg

PhantomJS ไม่ได้รับการพัฒนาอีกต่อไป แต่ Chrome มีheadlessตัวเลือก
raffaem

13

+1 สำหรับ Selenium RC เป็นบริการ windows

เพื่อให้การทดสอบทำงานถูกซ่อนไว้อย่างสมบูรณ์ฉันคิดว่าคุณไม่มีวิธีแก้ปัญหามากนักหากคุณใช้ windows

ฉันจะทำอย่างไรเพื่ออุทิศคอมพิวเตอร์ใน LAN ของคุณให้ออนไลน์ตลอดเวลาและมีเซิร์ฟเวอร์ซีลีเนียม RC ทำงานอยู่ ดังนั้นคุณจึงใช้ IP ของคอมพิวเตอร์เครื่องนั้นแทน localhost เพื่อเรียกใช้การทดสอบของคุณ ตัวอย่างเช่น:

browser = selenium("10.15.12.34",4444,"*firefox","http://saucelabs.com")

(พิจารณาว่านั่นคือ ip ของคอมพิวเตอร์ที่ใช้เซิร์ฟเวอร์)

เมื่อมีการตั้งค่านั้นคุณจะเรียกใช้การทดสอบในคอมพิวเตอร์ของคุณเบราว์เซอร์และหน้าต่างเซิร์ฟเวอร์ RC จะอยู่ในคอมพิวเตอร์เครื่องอื่นและจะกลับไปที่ของคุณเมื่อเสร็จสิ้น


12

บน Linux คุณสามารถเรียกใช้เบราว์เซอร์ทดสอบบนจอแสดงผลเสมือนได้ คุณจะต้องมีxvfbแพ็คเกจสำหรับสร้างเซิร์ฟเวอร์ X เสมือน บน Debian ที่ใช้ Debian เพียงแค่เรียกใช้

sudo apt-get install xvfb

มีเครื่องมือที่ดีephemeral-x.shที่จะตั้งค่าคำสั่งให้ทำงานบนจอแสดงผลเสมือนได้อย่างสะดวก ดาวน์โหลดและทำให้ใช้งานได้:

wget https://raw.github.com/jordansissel/xdotool/master/t/ephemeral-x.sh
chmod +x ephemeral-x.sh

จากนั้นคุณสามารถใช้เพื่อเริ่มเซิร์ฟเวอร์ Selenium:

./ephemeral-x.sh java -jar selenium-standalone.jar

หน้าต่างเบราว์เซอร์ทั้งหมดที่สร้างโดย Selenium จะใช้การแสดงผลเสมือนจริงและคุณจะมองไม่เห็น


สคริปต์นี้มีปัญหาในการอ้างถึง ถ้าฉันพูด. /ephemeral-x.sh foo '*' มันจะขึ้นว่า "กำลังทำงาน: foo" ตามด้วยเนื้อหาในไดเร็กทอรีของฉัน
Nick Retallack

4

หากคุณใช้ Windows ทางเลือกหนึ่งคือเรียกใช้การทดสอบภายใต้บัญชีผู้ใช้อื่น ซึ่งหมายความว่าเบราว์เซอร์และเซิร์ฟเวอร์ java จะไม่สามารถมองเห็นได้ในบัญชีของคุณเอง


3

นี่คือวิธีเรียกใช้การทดสอบด้วย maven บน linux desktop (Ubuntu) ฉันเบื่อที่จะไม่สามารถทำงานกับ Firefox webdriver ได้ตลอดเวลา

ฉันติดตั้ง xvfb

xvfb-run -a mvn clean install

แค่นั้นแหละ


นี่เป็นวิธีที่ง่ายที่สุดเพื่อให้แน่ใจว่า xvfb ทำงานและใช้งานโดย Selenium / WebDriver
Samuli Pahaoja

1

ในหลาย ๆ กรณี PhantomJS อาจไม่ตรงกับความต้องการของคุณอย่างสมบูรณ์ฉันขออธิบายรายละเอียดเกี่ยวกับตัวเลือกโครเมี่ยมแบบไม่มีหัวที่กล่าวถึงในคำตอบของ Dave Hunt

chrome 57 เพิ่งเปิดตัวคุณสมบัตินี้ คุณสามารถใช้ได้โดยส่งแฟล็ก - headless ผ่าน ChromeDriver สำหรับข้อมูลเพิ่มเติมโปรดดูการสนทนาในคำถามนี้


0

มีโครงการที่เกี่ยวข้องกับ PhantomJS ที่เรียกว่าGhostDriverซึ่งมีไว้เพื่อเรียกใช้อินสแตนซ์ PhantomJS ใน Selenium Grid โดยใช้โปรโตคอล Webdriver Wire JSON นั่นอาจเป็นสิ่งที่คุณกำลังมองหาแม้ว่าคำถามนี้จะมีอายุ 4 ปีแล้วก็ตาม


0

ใน MacOSX ฉันไม่สามารถซ่อนหน้าต่างเบราว์เซอร์ได้ แต่อย่างน้อยฉันก็หาวิธีย้ายไปยังจอแสดงผลอื่นเพื่อไม่ให้รบกวนเวิร์กโฟลว์ของฉันมากนัก ในขณะที่ Firefox กำลังทำการทดสอบเพียงแค่กดปุ่ม Control ค้างไว้แล้วคลิกที่ไอคอนใน Dock เลือก Options และ Assign to Display 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

โดยวิธีนี้เป็นคุณสมบัติที่จำเป็นสำหรับนักพัฒนาที่ใช้ e2e ซึ่งจะวางไข่ในเบราว์เซอร์อย่างมีเหตุผล ในสภาพแวดล้อมการพัฒนามันเป็นเรื่องน่ารำคาญที่ต้องจัดการกับหน้าต่างที่โผล่ขึ้นมาเรื่อย ๆ ซึ่งคุณสามารถโต้ตอบโดยไม่ได้ตั้งใจทำให้การทดสอบล้มเหลว


0

การใช้ Chrome แบบไม่มีหัวจะเป็นทางออกที่ดีที่สุดของคุณหรือคุณสามารถโพสต์ลงในไซต์โดยตรงเพื่อโต้ตอบกับมันซึ่งจะช่วยประหยัดพลังงานในการประมวลผลสำหรับสิ่งอื่น ๆ / กระบวนการ ฉันใช้สิ่งนี้เมื่อทดสอบบอทระบบอัตโนมัติบนเว็บที่ค้นหารองเท้าในหลาย ๆ ไซต์โดยใช้องค์ประกอบที่หนักของซีพียูยิ่งคุณประหยัดพลังงานมากขึ้นและโปรแกรมของคุณก็ง่ายขึ้นการรันหลาย ๆ กระบวนการพร้อมกันได้ง่ายขึ้นด้วย muhc ความเร็วที่มากขึ้นและ ความน่าเชื่อถือ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.