Tôi đang sử dụng một thiết lập rất phức tạp để kiểm tra các trang web không công khai khác nhau. Tôi sử dụng jenkins
để chạy thử nghiệm python-selenium
trong hình ảnh docker
. Bằng cách đó, tôi hoàn toàn độc lập với môi trường jenkins và có thể tạo ra môi trường của riêng tôi. Trong môi trường này, tôi đã cài đặt các phần mềm sau đây:Cách khắc phục "WebDriverException: Thông báo: kết nối bị từ chối"?
- Firefox: 57.0.1
- geckodriver: 0.18.0
- nosetests: 1.3.7
- selen: 3.8.0
Thử nghiệm selen tạo ra WebDriver
theo cách sau:
profile = webdriver.FirefoxProfile()
profile.set_preference("browser.download.dir", self.downloadpath)
profile.set_preference("browser.download.folderList", 2)
profile.set_preference("browser.download.useDownloadDir", True)
profile.set_preference("browser.download.manager.showWhenStarting", False)
profile.set_preference("pdfjs.disabled", True)
profile.set_preference("browser.helperApps.neverAsk.saveToDisk",
"application/force-download, image/png, text/html, text/plain, "
"image/tiff, text/csv, application/zip, application/octet-stream")
profile.set_preference("browser.download.manager.alertOnEXEOpen", False)
profile.set_preference("browser.download.manager.focusWhenStarting", False)
profile.set_preference("browser.helperApps.alwaysAsk.force", False)
profile.set_preference("browser.download.manager.alertOnEXEOpen", False)
profile.set_preference("browser.download.manager.closeWhenDone", True)
profile.set_preference("browser.download.manager.showAlertOnComplete", False)
profile.set_preference("browser.download.manager.useWindow", False)
profile.set_preference("services.sync.prefs.sync.browser.download.manager.showWhenStarting",
False)
self.driver = webdriver.Firefox(profile, log_path = logfile)
trong đó logfile
và self.downloadpath
là hai đường dẫn hợp lệ trong thiết lập bộ đế.
Toàn bộ bộ thử nghiệm bao gồm 6 trường hợp kiểm tra độc lập, mỗi trường hợp có cùng thiết lập như trên. Họ thường chạy tốt và hoàn thành mà không có vấn đề.
Nhưng mà không cần bất kỳ sự thay đổi để thử nghiệm hoặc cài đặt chung, một thử nghiệm đôi khi không thành công với thông báo lỗi sau:
File "/root/tests/bsp_usecase_tests/tools/basicsuite.py", line 210, in set_driver_firefox
self.driver = webdriver.Firefox(profile, log_path = logfile)
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py", line 158, in __init__
keep_alive=True)
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 154, in __init__
self.start_session(desired_capabilities, browser_profile)
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 243, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 311, in execute
self.error_handler.check_response(response)
File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 237, in check_response
raise exception_class(message, screen, stacktrace)
WebDriverException: Message: connection refused
Tôi có hai câu hỏi:
- kết nối gì bị từ chối ở đây? Ý nghĩa của thông báo lỗi
- Làm cách nào để sửa lỗi này?
Phụ Lục:
- Khi tôi sử dụng một
time.sleep(10)
ngay trước khi dòngwebdriver.Firefox
, lỗi không xuất hiện nữa. Tôi đã đặt dòng đó trong một vòng lặp cố gắng-trừ-ngoại trừ?
bạn có sử dụng màn hình ảo để chạy thử nghiệm selen không? Afaik jenkins chạy trong môi trường không đầu, vì vậy bạn cần 'Xvfb' để khởi tạo trình điều khiển firefox. Các phiên bản mới hơn của firefox cũng có thể làm việc trong môi trường không đầu - để sử dụng nó, bạn phải chuyển cờ trong các tùy chọn: 'opts = selenium.webdriver.firefox.options.Options(); opts.add_argument ('- không đầu'); driver = webdriver.Firefox (firefox_profile = profile, firefox_options = opts) '. – hoefling
Lỗi này/ngăn xếp theo dõi chỉ ra rằng trình điều khiển không thể khởi động máy chủ nội bộ của nó để giao tiếp với máy khách python. Nó có thể là một điều kiện chủng tộc trên số cổng được tạo ra hoặc có thể hình ảnh docker thiếu bộ nhớ không tái chế đúng thời gian khi thử nghiệm tiếp theo bắt đầu. Trong mọi trường hợp, vấn đề của bạn đòi hỏi một ví dụ tái tạo và phân tích các bản ghi từ hệ điều hành, trình duyệt và trình điều khiển không có trong bài đăng của bạn. –