【发布时间】:2018-06-03 21:01:07
【问题描述】:
我正在使用非常复杂的设置来测试各种非公开网页。我使用jenkins 在dockerimage 中运行python-selenium 测试。这样,我就完全独立于 jenkins 环境,可以创建自己的环境。在这种环境下,我安装了以下软件:
- 火狐:57.0.1
- 壁虎驱动:0.18.0
- 鼻子测试:1.3.7
- 硒:3.8.0
硒测试通过以下方式创建WebDriver:
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)
logfile 和 self.downloadpath 是 docker 设置中的两个有效路径。
整个测试套件由 6 个独立的测试用例组成,每个测试用例的设置与上述相同。它们通常运行良好且完整,没有问题。
但是如果没有对测试或常规设置进行任何更改,测试有时会失败并显示以下错误消息:
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
我有两个问题:
- 这里拒绝什么连接?报错信息是什么意思
- 如何才能修复此错误?
附录:
- 当我在
webdriver.Firefox行之前使用time.sleep(10)时,错误不再出现。我应该把那行放在一个 while-try-except 循环中吗?
【问题讨论】:
-
您是否使用虚拟显示器来运行硒测试? Afaik jenkins 在无头环境中运行,因此您需要
Xvfb来实例化 firefox 驱动程序。较新版本的 Firefox 也可以在无头环境中工作 - 要使用它,您必须在选项中传递标志:opts = selenium.webdriver.firefox.options.Options(); opts.add_argument('-headless');driver = webdriver.Firefox(firefox_profile=profile, firefox_options=opts)。 -
此错误/堆栈跟踪表明驱动程序无法启动其内部服务器以与 python 客户端通信。这可能是生成的端口号上的竞争条件,或者可能是 docker 映像缺少内存,在下一次测试开始时没有按时回收。在任何情况下,您的问题都需要一个可重现的示例,并分析来自您的帖子中不存在的操作系统、浏览器和驱动程序的日志。
标签: python selenium firefox jenkins geckodriver