ฉันใช้ Selenium RC เพื่อทำให้การทำงานของเบราว์เซอร์เป็นไปโดยอัตโนมัติ แต่ฉันต้องการให้เบราว์เซอร์มองไม่เห็น เป็นไปได้หรือไม่ อย่างไร? แล้ว Selenium Grid ล่ะ? ฉันสามารถซ่อนหน้าต่าง Selenium RC ได้หรือไม่
ฉันใช้ Selenium RC เพื่อทำให้การทำงานของเบราว์เซอร์เป็นไปโดยอัตโนมัติ แต่ฉันต้องการให้เบราว์เซอร์มองไม่เห็น เป็นไปได้หรือไม่ อย่างไร? แล้ว Selenium Grid ล่ะ? ฉันสามารถซ่อนหน้าต่าง Selenium RC ได้หรือไม่
คำตอบ:
มีไม่กี่ตัวเลือก:
คุณสามารถใช้ 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 ซึ่งคุณสามารถทำการทดสอบในระบบคลาวด์ได้ หลังจากการทดสอบของคุณเสร็จสิ้นคุณสามารถดูวิดีโอของการทดสอบได้
บน 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
ฉันจัดการซ่อนหน้าต่างเบราว์เซอร์ได้อย่างง่ายดาย
เพียงแค่ติดตั้ง PhantomJS จากนั้นเปลี่ยนบรรทัดนี้:
driver = webdriver.Firefox()
ถึง:
driver = webdriver.PhantomJS()
ส่วนที่เหลือของโค้ดของคุณไม่จำเป็นต้องเปลี่ยนแปลงและจะไม่มีเบราว์เซอร์เปิดขึ้น สำหรับวัตถุประสงค์ในการดีบักให้ใช้driver.save_screenshot('screen.png')
ในขั้นตอนต่างๆของโค้ดของคุณ
driver = webdriver.PhantomJS(r"C:\\phantomjs\phantomjs.exe")
headless
ตัวเลือก
+1 สำหรับ Selenium RC เป็นบริการ windows
เพื่อให้การทดสอบทำงานถูกซ่อนไว้อย่างสมบูรณ์ฉันคิดว่าคุณไม่มีวิธีแก้ปัญหามากนักหากคุณใช้ windows
ฉันจะทำอย่างไรเพื่ออุทิศคอมพิวเตอร์ใน LAN ของคุณให้ออนไลน์ตลอดเวลาและมีเซิร์ฟเวอร์ซีลีเนียม RC ทำงานอยู่ ดังนั้นคุณจึงใช้ IP ของคอมพิวเตอร์เครื่องนั้นแทน localhost เพื่อเรียกใช้การทดสอบของคุณ ตัวอย่างเช่น:
browser = selenium("10.15.12.34",4444,"*firefox","http://saucelabs.com")
(พิจารณาว่านั่นคือ ip ของคอมพิวเตอร์ที่ใช้เซิร์ฟเวอร์)
เมื่อมีการตั้งค่านั้นคุณจะเรียกใช้การทดสอบในคอมพิวเตอร์ของคุณเบราว์เซอร์และหน้าต่างเซิร์ฟเวอร์ RC จะอยู่ในคอมพิวเตอร์เครื่องอื่นและจะกลับไปที่ของคุณเมื่อเสร็จสิ้น
บน 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 จะใช้การแสดงผลเสมือนจริงและคุณจะมองไม่เห็น
หากคุณใช้ Windows ทางเลือกหนึ่งคือเรียกใช้การทดสอบภายใต้บัญชีผู้ใช้อื่น ซึ่งหมายความว่าเบราว์เซอร์และเซิร์ฟเวอร์ java จะไม่สามารถมองเห็นได้ในบัญชีของคุณเอง
นี่คือวิธีเรียกใช้การทดสอบด้วย maven บน linux desktop (Ubuntu) ฉันเบื่อที่จะไม่สามารถทำงานกับ Firefox webdriver ได้ตลอดเวลา
ฉันติดตั้ง xvfb
xvfb-run -a mvn clean install
แค่นั้นแหละ
ในหลาย ๆ กรณี PhantomJS อาจไม่ตรงกับความต้องการของคุณอย่างสมบูรณ์ฉันขออธิบายรายละเอียดเกี่ยวกับตัวเลือกโครเมี่ยมแบบไม่มีหัวที่กล่าวถึงในคำตอบของ Dave Hunt
chrome 57 เพิ่งเปิดตัวคุณสมบัตินี้ คุณสามารถใช้ได้โดยส่งแฟล็ก - headless ผ่าน ChromeDriver สำหรับข้อมูลเพิ่มเติมโปรดดูการสนทนาในคำถามนี้
มีโครงการที่เกี่ยวข้องกับ PhantomJS ที่เรียกว่าGhostDriverซึ่งมีไว้เพื่อเรียกใช้อินสแตนซ์ PhantomJS ใน Selenium Grid โดยใช้โปรโตคอล Webdriver Wire JSON นั่นอาจเป็นสิ่งที่คุณกำลังมองหาแม้ว่าคำถามนี้จะมีอายุ 4 ปีแล้วก็ตาม
ใน MacOSX ฉันไม่สามารถซ่อนหน้าต่างเบราว์เซอร์ได้ แต่อย่างน้อยฉันก็หาวิธีย้ายไปยังจอแสดงผลอื่นเพื่อไม่ให้รบกวนเวิร์กโฟลว์ของฉันมากนัก ในขณะที่ Firefox กำลังทำการทดสอบเพียงแค่กดปุ่ม Control ค้างไว้แล้วคลิกที่ไอคอนใน Dock เลือก Options และ Assign to Display 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
โดยวิธีนี้เป็นคุณสมบัติที่จำเป็นสำหรับนักพัฒนาที่ใช้ e2e ซึ่งจะวางไข่ในเบราว์เซอร์อย่างมีเหตุผล ในสภาพแวดล้อมการพัฒนามันเป็นเรื่องน่ารำคาญที่ต้องจัดการกับหน้าต่างที่โผล่ขึ้นมาเรื่อย ๆ ซึ่งคุณสามารถโต้ตอบโดยไม่ได้ตั้งใจทำให้การทดสอบล้มเหลว
การใช้ Chrome แบบไม่มีหัวจะเป็นทางออกที่ดีที่สุดของคุณหรือคุณสามารถโพสต์ลงในไซต์โดยตรงเพื่อโต้ตอบกับมันซึ่งจะช่วยประหยัดพลังงานในการประมวลผลสำหรับสิ่งอื่น ๆ / กระบวนการ ฉันใช้สิ่งนี้เมื่อทดสอบบอทระบบอัตโนมัติบนเว็บที่ค้นหารองเท้าในหลาย ๆ ไซต์โดยใช้องค์ประกอบที่หนักของซีพียูยิ่งคุณประหยัดพลังงานมากขึ้นและโปรแกรมของคุณก็ง่ายขึ้นการรันหลาย ๆ กระบวนการพร้อมกันได้ง่ายขึ้นด้วย muhc ความเร็วที่มากขึ้นและ ความน่าเชื่อถือ