Có thể ẩn trình duyệt trong Selenium RC không?


92

Tôi đang sử dụng Selenium RC để tự động hóa một số hoạt động của trình duyệt nhưng tôi muốn trình duyệt ẩn. Điều này có khả thi không? Làm sao? Còn về Selenium Grid? Tôi cũng có thể ẩn cửa sổ Selenium RC?


Có thể không được chấp nhận, nhưng bạn không thể chỉ di chuyển trình duyệt ra khỏi màn hình (sử dụng tự động hóa giao diện người dùng windows thông thường?) Như đặt cửa sổ ở (-10000, -10000)?
BrainSlugs83

2
Vì câu hỏi này đã cũ nên hãy để tôi chuyển hướng bạn đến một câu trả lời cập nhật thích hợp ở cuối trang này .
Stéphane Bruckert

Câu trả lời:


87

Có một vài lựa chọn:

  • Bạn có thể sử dụng Selenium Grid để mở trình duyệt trên một máy hoàn toàn khác (hoặc máy ảo) mà sau đó bạn có thể kết nối qua VNC hoặc Remote Desktop Connection nếu bạn muốn xem trình duyệt. Ngoài ra, một tùy chọn khác: nếu bạn chạy quy trình nền trước của Jenkins trên máy chủ từ xa đó, nó có thể thực thi dự án thử nghiệm của bạn trên máy tính để bàn.

  • Bạn có thể chạy Selenium 'không đầu' trên Linux trong XVFB. Tôi chưa bao giờ thử làm điều này và nghi ngờ nó thực sự đáng để nỗ lực. http://www.alittlemadness.com/2008/03/05/running-selenium-headless/

  • Bạn có thể bọc Selenium RC trong một dịch vụ Windows. http://support.microsoft.com/kb/137890 . Ngoại trừ các ràng buộc về quyền trên các phiên bản windows sau này có thể sẽ ngăn không cho Selenium truy cập vào màn hình nền như Windows 2000 đã từng cho phép chúng ta làm điều đó.

  • Một tùy chọn khác sẽ là sử dụng một cái gì đó như WebDriver HTMLUnitDriver, trình duyệt này không khởi chạy trình duyệt 'thực'. http://code.google.com/p/webdriver/ . Ngoài ra, có một tùy chọn PhantomJS cũng như 'Chrome không đầu' mà bạn có thể sử dụng.

  • Tất nhiên cũng có tùy chọn sử dụng dịch vụ như SauceLabs, nơi bạn có thể chạy các bài kiểm tra của mình trên đám mây. Sau khi các bài kiểm tra của bạn hoàn thành, bạn có thể xem video về chúng đang chạy.


Dưới đây là hướng dẫn về cách tạo tệp dơi để cài đặt dịch vụ: brantleytec.blogspot.com/2012/11/…
Brantley Blanchard

58

Trên Linux, bạn có thể chạy WebDriver trong màn hình không đầu (ảo) để ẩn trình duyệt. Điều này có thể được thực hiện với Xvfb (bộ đệm khung hình ảo X).

Bạn có thể điều khiển Xvfb trực tiếp từ mã Python bằng cách sử dụng xvfbwrapper: https://github.com/cgoldberg/xvfbwrapper

Mã Python để chạy không đầu sẽ trông như thế này:

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

Cài đặt phụ thuộc trên Debian / Ubuntu:

$ sudo apt-get install xvfb
$ pip install xvfbwrapper

Khi mã chạy trong trình duyệt ảo thì tôi có thể tiếp tục sử dụng PC của mình bình thường trong khi tập lệnh tương tác trình duyệt chạy không?
Mugen

Tài nguyên bị lấy đi, máy của bạn sẽ trở nên chậm hơn!
Tim Long

22

Tôi dễ dàng quản lý để ẩn cửa sổ trình duyệt.

Chỉ cần cài đặt PhantomJS . Sau đó, thay đổi dòng này:

driver = webdriver.Firefox()

đến:

driver = webdriver.PhantomJS()

Phần còn lại của mã của bạn sẽ không cần phải thay đổi và không có trình duyệt nào sẽ mở. Đối với mục đích gỡ lỗi, hãy sử dụng driver.save_screenshot('screen.png')ở các bước khác nhau của mã của bạn.


5
Điều đáng nói là bạn phải đặt đường dẫn của PhantomJs.exe để điều này hoạt động. ví dụdriver = webdriver.PhantomJS(r"C:\\phantomjs\phantomjs.exe")
K DawG

1
Có, nhưng chỉ trên Windows.
Stéphane Bruckert

1
bạn không cần chỉ định vị trí của nhị phân miễn là nó có thể được tìm thấy từ biến môi trường $ PATH trong môi trường của bạn.
Corey Goldberg

13

+1 cho Selenium RC dưới dạng dịch vụ cửa sổ.

Đối với việc các bài kiểm tra chạy hoàn toàn ẩn, tôi nghĩ bạn không có nhiều giải pháp nếu bạn đang ở trên windows.

Tôi muốn làm gì để dành một máy tính trong mạng LAN của bạn luôn trực tuyến và có một máy chủ selen RC đang chạy. Vì vậy, bạn sử dụng IP của máy tính đó thay vì localhost để chạy các bài kiểm tra của mình. Ví dụ:

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

(coi đó là ip của máy tính đang chạy máy chủ).

Có thiết lập đó, bạn chạy các bài kiểm tra của mình trong máy tính của mình, các trình duyệt và cửa sổ máy chủ RC nằm trong một máy tính khác và quay lại máy tính của bạn sau khi hoàn tất.


12

Trên Linux, bạn có thể chạy trình duyệt thử nghiệm của mình trên màn hình ảo. Bạn sẽ cần xvfbgói để tạo một máy chủ X ảo. Trên các bản phân phối dựa trên Debian, chỉ cần chạy

sudo apt-get install xvfb

Có một công cụ tuyệt vời ephemeral-x.shsẽ thuận tiện thiết lập bất kỳ lệnh nào để chạy trên màn hình ảo. Tải xuống và làm cho nó có thể thực thi được:

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

Sau đó, bạn chỉ cần sử dụng nó để khởi động máy chủ Selenium:

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

Tất cả các cửa sổ trình duyệt được tạo bởi Selenium bây giờ sẽ sử dụng màn hình ảo và sẽ ẩn đối với bạn.


Tập lệnh này có một vấn đề trích dẫn. Nếu tôi nói ./ephemeral-x.sh foo '*' nó nói "Đang chạy: foo" theo sau là nội dung trong thư mục của tôi.
Nick Retallack,

4

Nếu bạn đang sử dụng Windows, một tùy chọn là chạy các bài kiểm tra trong một tài khoản người dùng khác . Điều này có nghĩa là trình duyệt và máy chủ java sẽ không hiển thị với tài khoản của chính bạn.


3

Đây là cách tôi chạy thử nghiệm của mình với maven trên máy tính để bàn Linux (Ubuntu). Tôi đã phát chán khi không thể làm việc với trình duyệt web firefox luôn tập trung.

Tôi đã cài đặt xvfb

cài đặt sạch xvfb-run -a mvn

Đó là nó


Đây thường là cách dễ nhất để đảm bảo xvfb đang chạy và được sử dụng bởi Selenium / WebDriver.
Samuli Pahaoja

1

Trong nhiều trường hợp PhantomJS sẽ không hoàn toàn phù hợp với nhu cầu của bạn, tôi muốn nói rõ hơn về tùy chọn chrome không đầu được đề cập trong câu trả lời của Dave Hunt.

chrome 57 vừa ra mắt tính năng này. Bạn có thể sử dụng nó bằng cách chuyển cờ --headless qua ChromeDriver, để biết thêm thông tin, hãy xem thảo luận trong câu hỏi này


0

Có một dự án liên quan đến PhantomJS được gọi là GhostDriver , có nghĩa là để chạy các phiên bản PhantomJS trong Selenium Grid sử dụng giao thức JSON dây webdriver. Đó có lẽ là những gì bạn đang tìm kiếm, mặc dù câu hỏi này đã 4 năm nay.


0

Trên MacOSX, tôi không thể ẩn cửa sổ trình duyệt, nhưng ít nhất tôi đã tìm ra cách di chuyển nó sang một màn hình khác để nó không làm gián đoạn quá trình làm việc của tôi. Trong khi Firefox đang chạy thử nghiệm, chỉ cần giữ phím Control khi nhấp vào biểu tượng của nó trong thanh dock, chọn Options và 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

Nhân tiện, đây là một tính năng cần thiết cho bất kỳ nhà phát triển nào đang chạy e2e mà một cách hợp lý sẽ tạo ra các trình duyệt. Trong một môi trường phát triển, thật khó chịu khi phải đối phó với cửa sổ liên tục bật lên và cửa sổ mà bạn có thể vô tình tương tác làm cho bài kiểm tra không thành công.


0

Sử dụng Chrome không đầu sẽ là cách tốt nhất của bạn hoặc bạn có thể đăng trực tiếp lên trang web để tương tác với nó, điều này sẽ tiết kiệm rất nhiều sức mạnh tính toán cho những thứ / quy trình khác. Tôi sử dụng điều này khi thử nghiệm các chương trình tự động hóa web tìm kiếm giày trên nhiều trang web sử dụng các phần tử nặng cpu, bạn càng tiết kiệm được nhiều điện năng và chương trình của bạn càng đơn giản thì càng dễ dàng chạy nhiều quy trình cùng một lúc với tốc độ cao hơn và độ tin cậy.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.