selenium - 在 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 无法建立连接出现错误。
如果您需要更多信息,请告诉我 - 我可以提供。谢谢!
解决方案
在错误消息中,您尝试打开的地址是 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
对于“老派”:) 输出格式)。
推荐阅读
- android - 当 AndroidStudio 卡在 Gradle 上时查看日志:Build
- java - 在休眠中加入两个以上的表
- javascript - js中三个数字中的随机数
- entity-framework - 使用 lambda 表达式和 Include 方法排序查询
- java - AWS Lambda 在循环内调用异步,无需等待未来
- sap-fiori - 从 Fiori 应用程序链接到普通 Web 应用程序
- react-native - 在 Android 8.0.0 Oreo 中无法获取位置
- c# - 关闭的 Xml 未在服务器中打开 excel 文件
- c++ - OpenSSL 1.0.2h 在不同的 Windows 版本上给出不同的 SHA256 值?
- asp.net-core - 找不到帐户/登录 - 身份