Geckodriver/Firefox 运行 Robot Framework Selenium 在 Docker 容器内测试时出现问题

Geckodriver/Firefox issue when running Robot Framework Selenium tests inside Docker container

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

Python - 2.7 机器人框架 - 3.1.1 SeleniumLibrary(用于机器人)- 3.3.1 硒 - 3.1 壁虎驱动程序 - 0.21.0 火狐 - 60.7.0

当我试图访问一个 IP 地址时,我一直 运行ning 到这个错误:

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 无法建立连接时出现错误。

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

在错误消息中,您尝试打开的地址是 172.20.0.158。如果那是您实际击中的那一个,那么它在一个私人范围内 - 172.16.0.0/12 更具体地说 (例如,一个范围,如家庭网络中更受欢迎的范围 192.168.0.0/24 - non-routeable 来自其他网络).
如果您的 docker 节点无法访问它,那么它的路由 table 很可能配置错误。您说您能够打开目标 url,但您可能必须在另一台机器(您的工作机器,docker 主机?)上尝试过,它的路由已按预期设置。

由于 docker 上有 sshd 运行,连接到它并尝试打开 url:

curl http://172.20.0.158/

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

ip route

(或者,netstat -rn 对于 "old school" :) 输出格式)。