首页 > 解决方案 > 在 Docker 容器中运行 Robot Framework Selenium 测试时出现 Geckodriver/Firefox 问题

问题描述

作为我项目构建管道的一部分,我们需要使用 Robot Framework 和 Docker 运行一系列 ssh/web 验收测试。目前,我们正在创建一个 docker 容器并在 docker 容器内运行 ssh 和 selenium web 测试。

Python - 2.7 RobotFramework - 3.1.1 SeleniumLibrary(用于机器人) - 3.3.1 Selenium - 3.1 geckodriver - 0.21.0 Firefox - 60.7.0

当我尝试访问 IP 地址时,我不断遇到此错误:

WebDriverException: Message: Reached error page: about:neterror?e=connectionFailure&u=http%3A//172.20.0.158/&c=UTF-8&f=regular&d=Firefox%20can%E2%80%99t%20establish%20a%20connection%20to%20the%20server%20at%20172.20.0.158.

最初我怀疑这可能与使用不兼容版本的 Selenium、GeckoDriver 和 Firefox 的库有关。但是,经过一些测试,我可以访问一些地址,例如http://www.google.com,但不能访问 IP 地址。

以下是以下两个测试: Google 测试通过,但 Jenkins 测试失败,并出现上述错误消息。

Google Test
    Open Browser    http://www.google.com   ff
    Page Should Contain     Google
    Close Browser

Jenkins Test
    Open Browser    http://100.00.00.00   ff
    Page Should Contain     Jenkins
    Close Browser

(我没有输入实际的IP地址)

Jenkins 测试的 IP 地址,当我在浏览器中访问它时会命中 Jenkins 服务器,所以我知道 IP 是正确的。我只是不确定为什么 Firefox 无法建立连接出现错误。

如果您需要更多信息,请告诉我 - 我可以提供。谢谢!

标签: seleniumdockerfirefoxrobotframeworkgeckodriver

解决方案


在错误消息中,您尝试打开的地址是 172.20.0.158。如果那是您要访问的实际范围,则它位于私有范围之一-更具体地说是 172.16.0.0/12 (例如,家庭网络中更流行的范围 192.168.0.0/24 - 无法从其他范围路由网络)
如果您的 docker 节点无法访问它,那么它的路由表很可能配置错误。您说您能够打开目标 url,但您可能必须尝试从另一台机器(您的工作机器,docker 主机?),它的路由设置为应有的。

由于 docker 上正在运行 sshd,请连接到它并尝试使用以下命令打开 url:

curl http://172.20.0.158/

如果成功,那就是 Firefox 问题;如果它失败并出现类似错误,则它是网络配置。
在 ssh 会话中,您可以使用以下命令打印路由表:

ip route

(或者,netstat -rn对于“老派”:) 输出格式)。


推荐阅读