Webdriver在45000毫秒后无法连接到127.0.0.1端口7055的主机。

140
我有一个盒子,在里面运行测试。似乎Jenkins会通过SSH登录并执行正在运行的特定作业中描述的命令。
在这里,我试图运行我的Selenium Webdriver测试,但它告诉我在启动Firefox时存在错误。最终的想法是完全在这个盒子上运行Web测试,并且拍摄一些错误的截屏。
我正在使用selenium-java-2.25.jar、firefox 10和Linux操作系统。
有趣的是,我可以手动ssh到盒子中,在另一个用户的魔术cookie上暂时复制cookie(以获得X隧道),然后使用ant启动我的Selenium测试。export DISPLAY=mydisplay:1.0,这将打开Firefox并正常运行测试。
这里有一些帖子似乎有完全相同的问题,而我认为我已经尝试过大部分。以下是我所做的:
- 重启盒子,使用VNC重新登录。 - 在Jenkins中放置一个bash脚本,在运行Selenium测试之前运行该脚本。bash脚本基本上只是执行export DISPLAY=mydisplay:1.0,并执行xclock。这有效,因为我可以在VNC中看到xclock被显示出来。 - iptables已被关闭。 - firefox正确地位于/usr/bin/firefox。 - sshd_config显示X11Forwarding为true。 - 据说降级firefox对一些人有帮助,但我不想这样做。Webdriver应该支持FF 10。
但是,以上所有方法都没有解决问题。
似乎本地主机上甚至不存在7055端口: netstat -an | grep 7055 - 未输出任何内容
这是我的/etc/hosts文件内容:
  1 127.0.0.1               localhost.localdomain localhost
  2 ::1             localhost6.localdomain6 localhost6

也许这与localhost:7055不存在有关?我不确定该从哪里开始。但是,为什么错误输出会说正在寻找display::0.0,而我已经指定了mydisplay:1.0呢?

最后,我收到的错误输出如下:

[testng] org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms. Firefox console output:
[testng] Xlib: connection to ":0.0" refused by server
[testng] Xlib: No protocol specified
[testng] 
[testng] Error: cannot open display: :0.0
[testng] Xlib: connection to ":0.0" refused by server
[testng] Xlib: No protocol specified
[testng] 
[testng] Xlib: connection to ":0.0" refused by server
[testng] Xlib: No protocol specified
[testng] 
[testng] Xlib: connection to ":0.0" refused by server
[testng] Xlib: No protocol specified
[testng] 
[testng] Error: cannot open display: :0.0
[testng] 
[testng]    at org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.start(NewProfileExtensionConnection.java:109)
[testng]    at org.openqa.selenium.firefox.FirefoxDriver.startClient(FirefoxDriver.java:245)
[testng]    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:109)
[testng]    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:185)
[testng]    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:178)
[testng]    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:174)
[testng]    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:92)
[testng]    at com.test.webtest.browser.BrowserFactory.createBrowser(BrowserFactory.java:24)
[testng]    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[testng]    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
[testng]    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[testng]    at java.lang.reflect.Method.invoke(Method.java:601)

我在selenium 2.31.0下重现了这个问题。 - Dima Star
我正在使用Selenium 2.47.1遇到问题,没有看到Firefox驱动程序服务器已启动在端口XXXX上的消息。 相反,我打开了一个空白窗口,并且无法控制浏览器,这可能是因为端口没有打开以便从测试接收协议命令。 - djangofan
看起来 Selenium 服务器 2.47.1 和 Firefox 40 的组合是可以的,但无法在 Firefox 41 上工作。 - Rostislav Matl
如果您的计算机中没有GUI,并且正在使用Firefox在计算机中运行测试,则会出现此错误。我建议您尝试使用Xvfb内存显示驱动程序。或者这也可能是Firefox版本和Selenium版本兼容性的问题。 - Prasanta Biswas
29个回答

91

不知道你是否解决了这个问题,但我刚刚从另一个角度解决了同样的问题。

看起来Selenium和Firefox之间交流存在困难 - 我怀疑Firefox在多个版本中进行“进化”变化,因此向前和向后兼容性并不总是得到保证,并且不兼容性似乎总是会产生相同的错误。

当我从FF 15移动到FF 16时,我的问题开始出现。在Ubuntu上运行时,这会与其他升级一起自动完成,但我认为这是关键变化。

通过从Selenium 2.24.1移动到Selenium 2.25.0来解决了这个问题。

由于selenium的更改只需下载jar文件并运行它而不是旧版本,因此值得尝试作为快速简便的故障排除程序 - 如果无法帮助,请切换回旧版本。对于您的情况,我不确定要尝试哪个版本的Selenium,但我认为2.24应该适用于FF 10。

我在过去发现的另一个问题是,Firefox在Ubuntu上不能以root身份运行。如果Selenium正在作为服务运行,或者可能是从bash脚本或cron作业启动它,则会发生这种情况。这可能解释了它为什么在您的计算机上运行但不在Jenkins上运行。


2
我在Ubuntu中使用FF 19.0和selenium-server-standalone-2.29.0.jar。当我在Jenkins中运行我的selenium测试时,我遇到了相同的错误:org.openqa.selenium.firefox.NotConnectedException: 在45000毫秒后无法连接到主机127.0.0.1的端口7055。Firefox控制台输出: [testng] 错误:未指定显示 [testng] 错误:未指定显示 - Ripon Al Wasim
你是如何确定它试图连接的端口号的?你采取了什么措施来解决它? - Dev-Ria
这解决了我的问题。我升级到Firefox 26.0版本,这要求我将Selenium独立服务器从2.35.0更新到2.37.0。 - Martin Del Vecchio
1
这似乎是一个持续的问题。我在使用Selenium Webdriver 2.47和Firefox 44时遇到了这个错误。将Selenium Webdriver更新到2.53后问题得到解决。 - B Seven
1
升级Selenium(.jar文件在此处 - https://selenium-release.storage.googleapis.com/index.html)。 - rinogo
显示剩余3条评论

14

我曾经遇到过类似的问题,也许这个答案也能帮到您。

看起来您遇到了两个不同的错误:

  1. 无法连接到主机 127.0.0.1 上的端口 7055
  2. 错误:未指定显示器

无法连接 错误的原因是 Selenium Server 的版本不支持较新版本的 Firefox。您需要下载一个支持较新版本 Firefox 的 Selenium Server 新版。

未指定显示器 错误的原因是正在启动 Firefox,但远程主机上没有运行 X 服务器(GUI)。您可以使用 X11 转发在远程主机上运行 Firefox,并在本地主机上显示它。在 Mac OS X 上,您需要下载XQuartz以使用 X11 转发。


13

这是我遇到的问题。而且在我的情况下并不是浏览器的问题,而是底层操作系统的问题。我正在使用Mac OS X - Yosemite。只有最新的Selenium似乎能够与它一起工作。 - Ajit S
2
链接失效了,先生。 - mido
自动重定向到:https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG - David

8

新的URL为https://github.com/seleniumhq/selenium。如果您只想获取JAR文件(例如selenium-server-standalone-2.53.0.jar),您可以在此处获取它们:https://selenium-release.storage.googleapis.com/index.html - rinogo

6

我解决了这个问题,方法是将我的Firefox降级到一个早期版本,并且该版本之前已经可以与Selenium-WebDriver良好地配合使用。在我的情况下,我必须将Firefox降级到版本18,这个版本可以与Selenium 2.27一起使用。

以下是获取旧版Firefox的链接:https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/


5
这个问题困扰了我很长时间,我在Firefox的情况下看到了一个有效的解决方案,那就是使用升级后的Firefox驱动程序
  • 如果你的Firefox自动更新,那么你可能会偶尔遇到这个问题。看起来Firefox的开发人员正在快速发展,或者他们不关心向后兼容性。

  • 每次我在旧脚本上看到这个问题时,我都会检查Firefox版本是否有所改变 - 多数情况下确实如此。

  • 然后我会去Maven Repo中找到selenium Firefox driver repo - http://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-firefox-driver 并下载最新版本。

  • 或者在 pom.xml(如果使用Maven)中更新Firefox驱动程序的新版本,现在是- 2.40.0

  • 没有简单的方法可以避免这个问题,除非你真正明确地阻止Firefox的自动更新(你可以在Mac上在首选项-高级-更新中执行此操作-选择“检查更新,但让我选择是否安装它们”)。

  • 如果你的脚本正在自动化模式下运行,那么你可能需要禁用更新。然而,这可能会产生其他问题,因为大多数人/用户可能默认启用Firefox的更新。因此,你的应用程序实际上没有在任何后续版本上进行测试。


5

我曾经使用Firefox 47Selenium 2.53,但是遇到了同样的错误。 我的解决方法是将Firefox 47更改为Firefox 46,问题得到了解决。


4

更新selenium jars,下载selenium 2.31.0。

selenium团队已经解决了这个问题。

这是一个兼容性问题。

干杯!


3
脚本存在的问题在于脚本使用的环境与您的测试不同,因此在那里设置环境变量对您的测试没有任何作用。 要正确设置变量,您需要在 Jenkins 中进行设置。转至 Manage Jenkins>Manage Nodes>Master>Configure。选中 Environment variables 复选框,然后在名称框中输入 DISPLAY,并将值设置为:1.0。
此外,您还需要设置权限,请尝试在终端中使用 xhost + 禁用您的 xhost 访问控制。

1
“xhost +”解决了我的问题,即使用sudo运行webdriver无法打开浏览器 - 现在可以正常工作了。 - Nick Perkins

2

我也遇到了同样的问题。每次我们或webdriver打开FF浏览器时,浏览器都会检查更新是否存在。在这种情况下,它将尝试在执行期间进行更新,然后即使已正确更新,您也会收到错误,因为您未适当更新Selenium版本。

转到“http://docs.seleniumhq.org/download/”并下载最新版本。现在去检查,问题应该已经解决了。:)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接