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" :) 输出格式)。
作为我项目构建管道的一部分,我们需要使用 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" :) 输出格式)。