Jenkins通过Docker-compose运行Grid测试报UnreachableBrowserException无法新建会话
问题背景
使用Jenkins通过Docker-compose在Selenium Grid上动态执行测试套件时抛出如下异常栈:
org.openqa.selenium.remote.DesiredCapabilities firefox INFO: Using `new FirefoxOptions()` is preferred to `DesiredCapabilities.firefox()` org.openqa.selenium.remote.UnreachableBrowserException: Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure. Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03' System info: host: '49d4c6ec544d', ip: '172.17.0.2', os.name: 'Linux', os.arch: 'amd64', os.version: '5.10.25-linuxkit', java.version: '1.8.0_292' Driver info: driver.version: RemoteWebDriver at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:573) at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213) at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:131) at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:144) at WebdriverBase.GridDriverManager.setDriver(GridDriverManager.java:144) at WebdriverBase.GridDriverManager.getDriver(GridDriverManager.java:115) at stepdefinition.PurchaseWorkflow.init(PurchaseWorkflow.java:32) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
docker-compose.yml配置截图:
已配置的Hub地址:http://selenium-hub:4444/wd/hub
当前现象:相同代码在本地Docker容器中运行一切正常,仅通过Jenkins触发测试时出现上述报错。
解决方案
- 优先排查网络连通性:Jenkins执行测试任务的节点/容器必须和Selenium Grid集群处于同一个Docker网络下。本地运行正常是因为本地测试容器默认与Grid在同一网络,可正常解析
selenium-hub主机名;而Jenkins任务默认使用独立Docker网络,无法解析主机名导致无法访问Hub。可在Jenkins任务中指定测试容器加入Grid所在的Docker网络,或者将Jenkins服务本身部署到Grid所在的网络中。 - 替换废弃API:按照日志提示,将
DesiredCapabilities.firefox()的写法替换为new FirefoxOptions()构造浏览器配置,避免Selenium废弃API带来的兼容问题。 - 校验版本一致性:保证测试代码依赖的Selenium版本、Selenium Hub版本、节点Firefox浏览器版本、对应geckodriver版本完全匹配,避免跨版本兼容问题导致会话创建失败。
- 增加前置连通性校验:在Jenkins测试任务执行前增加探测步骤,执行
curl http://selenium-hub:4444/wd/hub/status确认Hub服务可正常访问,若探测失败直接中断任务,优先定位网络问题。 - 调整Grid资源配置:如果Hub没有可用的会话槽位也会导致会话创建失败,可在docker-compose配置中为节点增加
SE_NODE_MAX_SESSIONS参数调高最大会话数,同时检查节点是否正常注册到Hub。
内容的提问来源于stack exchange,提问作者RISHI KHANNA
相关产品推荐
相关产品推荐

