140

我有运行测试的盒子。詹金斯似乎会进入并执行正在运行的特定作业中描述的命令。

在这里,我正在尝试运行我的 Selenium Webdriver 测试,但它告诉我在启动 firefox 时出错。最终的想法是完全在这个盒子上运行 webtests,并截取一些错误截图。

我正在使用 selenium-java-2.25.jar、firefox 10、linux 操作系统。

有趣的是,我可以手动 ssh 进入盒子,暂时从盒子上的另一个用户那里复制魔法 cookie(以获得 X 隧道),执行export DISPLAY=mydisplay:1.0,然后使用 ant 启动我的 selenium 测试。这将带来 Firefox 和测试就好了。

这里有各种线程似乎有完全相同的问题,我想我已经尝试了其中的大部分。这是我所做的:

  • 重新启动盒子,使用 VNC 重新登录。

  • 在运行 selenium 测试之前在 Jenkins 中放置一个 bash 脚本来运行。bash 脚本基本上只是做一个export DISPLAY=mydisplay:1.0. 它也执行xclock. 这很有效,因为我可以看到 xclock 显示在 VNC 中。

  • iptables 已关闭

  • firefox 正确位于 /usr/bin/firefox

  • sshd_config 显示 X11Forwarding 为真。

  • 据说降级 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)
4

29 回答 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 作业启动,就会发生这种情况。这可以解释为什么它为您运行而不为詹金斯运行。

于 2012-10-24T12:23:40.820 回答
14

我有一个类似的问题。也许这个答案也会对您有所帮助。

看起来你有两个不同的错误:

  1. Unable to connect to host 127.0.0.1 on port 7055
  2. Error: no display specified

错误的原因Unable to connect是 Selenium Server 的版本不知道如何与较新版本的 Firefox 一起工作。您需要下载支持较新版本 Firefox 的较新版本的 Selenium Server。

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

于 2014-12-31T04:20:35.673 回答
13

在选择使用 Selenium 进行测试之前,您需要检查浏览器的兼容性:

https://github.com/SeleniumHQ/selenium/blob/master/java/CHANGELOG

这可能有助于回答上述问题。

于 2013-05-07T06:26:48.540 回答
8

获取适用于 FireFox 19 的最新 Selenium jars (2.30)

您可以在此处下载最新的 jars(截至写作时为 2.31):https ://code.google.com/p/selenium/downloads/list

于 2013-02-20T21:53:47.517 回答
6

我通过将 Firefox 降级到以前与 Selenium-WebDriver 配合良好的旧版本解决了这个问题。就我而言,我不得不降级回 Firefox 18,而这个版本与 Selenium 2.27 一起使用

这是获取旧版本 firefox 的链接:https ://ftp.mozilla.org/pub/mozilla.org/firefox/releases/

于 2013-03-07T19:04:59.067 回答
5

这个问题困扰了我很长时间,我见过一个可行的解决方案,如果 Firefox 是使用升级的 firefox 驱动程序

  • 如果您的Firefox 升级是自动发生的,那么您可能会偶尔遇到这个问题。看起来 Firefox 的人发展得太快了,或者他们不关心向后兼容性。

  • 每次我在我的旧脚本上看到这个问题时,我都会检查 firefox 版本是否发生了变化——大多数时候是这样。

  • 然后我去 maven repo 获取 selenium firefox driver repo - http://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-firefox-driver并下载最新版本。

  • 或立即使用新版本的 firefox 驱动程序更新我的 pom.xml(如果使用 maven) - 2.40.0

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

  • 如果您的脚本在自动模式下运行,那么您可能需要禁用更新。但是,这可能会产生其他问题。由于大多数人/用户可能默认启用了 Firefox 更新。因此,您的应用程序并未真正在任何更高版本上进行测试。

于 2014-04-01T20:59:51.243 回答
5

我有Firefox 47Selenium 2.53,我得到了同样的错误。我的解决方案是将 Firefox 47 更改为Firefox 46,问题就解决了。

于 2016-06-16T17:00:17.823 回答
4

更新 selenium jars,下载 selenium 2.31.0

selenium 的人已经解决了这个问题

这是一个兼容性问题。

干杯

于 2013-03-26T14:25:08.620 回答
3

脚本的问题是用于脚本的环境与用于测试的环境不同,因此在此处设置环境变量对您的测试没有任何作用。

要正确设置变量,您需要在 Jenkins 中设置它。转到Manage Jenkins>Manage Nodes>Master>Configure。检查环境变量复选框,然后在名称框中输入 DISPLAY,并将值设置为:1.0。

此外,您需要设置权限,尝试xhost +在终端中禁用 xhost 访问控制。

于 2013-07-29T21:28:25.497 回答
2

我也面临同样的问题。每当我们或 webdriver 打开时,FF 浏览器都会检查更新(如果有)。在这种情况下,我会在执行期间尝试更新,然后即使更新正确,您也会收到错误消息,因为您没有正确更新 Selenium 版本。

导航到“ http://docs.seleniumhq.org/download/ ”并下载最新版本。现在去检查一下,问题确实解决了。:)

于 2014-04-19T03:31:51.123 回答
1

我得到了同样的错误;我使用了 selenium-java 版本 2.25.0 和 Firefox vresion 18.0.2;我已将 selenium-java 的版本更改为 2.30.0,现在可以使用了。

于 2013-03-07T09:17:25.277 回答
1

要解决此问题,请使用http://docs.seleniumhq.org/download/上提供的新 jar 文件。对于 java、C#、php 等...Firefox 27.0.1 需要 2.39.0 的驱动程序版本。

于 2014-02-21T16:44:18.033 回答
1

只需在 Jenkins 中安装 Xvnc 插件即可。问题应该得到解决。

于 2014-02-27T05:09:22.513 回答
1

我在运行 docker 时遇到了完全相同的问题,但我在您提到的错误之前的日志中找到了解决方案。

selenium_1  | 2016-11-11 11:19:34,498 DEBG 'xvfb' stderr output:
selenium_1  | (EE)
selenium_1  | Fatal server error:
selenium_1  | (EE) Server is already active for display 99
selenium_1  |   If this server is no longer running, remove /tmp/.X99-lock
selenium_1  |   and start again.
selenium_1  | (EE)

我听从了建议,问题已经解决。

于 2016-11-11T11:34:37.780 回答
1

我也有同样的问题,但是在将 firefox 版本降级到 35.0.1 后问题得到解决,我的 selenium 版本是 2.43

于 2016-05-23T09:25:01.993 回答
1

我得到了同样的错误“selenium_Unable to connect to host 127.0.0.1 on port 7055”

于 2016-01-04T06:48:51.150 回答
0

发生这种情况是因为旧版本。只需将浏览器更新到最新版本并将 selenium webdriver 包更新到最新版本。

于 2014-01-28T04:55:03.490 回答
0

如果我们的 selenium 脚本没有执行,请更新 selenium jars。目前我正在使用 selenium-java-2.43.0-srcs

现在它工作正常

于 2014-09-19T11:44:56.660 回答
0

这就是我使用 IWebDriver 的静态属性并从多个测试方法调用它时的行为方式。

public class LanguageMenu
{
    private static IWebDriver drv;

    static LanguageMenu()
    {
       drv = Driver.Instance;
    }
    ...

    public static void English()
    {
        drv.FindElement(By.Id("mvc_lang_en"));
        el.Click();
    }

    public static void Rusian()
    {
        ...
    }

    ...
}

喜欢

 [TestMethod]
 public void Language_SwitchTo_English()
 {
     LanguageMenu.English();
     Assert.IsTrue(ContactPage.IsAt("Contact"));
 }

 [TestMethod]
 public void Language_SwitchTo_Rusian()
 {
     LanguageMenu.English();
     Assert.IsTrue(ContactPage.IsAt("Контакт"));
 }

解决方案

为每个调用测试方法创建 Driver 的新实例

 private static void English()
 {
            var drv = Driver.Instance;
            var el = drv.FindElement(By.Id("mvc_lang_en"));
            el.Click();
 }
于 2014-07-11T10:40:09.103 回答
0

只需重新启动终端。终端被挂了。之后一切都会正常

于 2015-09-26T17:39:27.500 回答
0

我也被这个错误卡住了三天,终于弄明白了。你可以查看我在这里给出的答案。这是浏览器和硒服务器的兼容性问题。我希望这会有所帮助。您可以从此链接检查浏览器兼容性

于 2016-11-30T05:09:57.203 回答
0

它发生在不同版本的ff上。我通过使用 selenium-server-standalone-2.41.0.jar 和 selenium-java-2.41.0.zip 使用最新的 ff 版本 39,显示相同的错误。

在此处获取最新的服务器和客户端 jar 文件,以获得我分别使用的服务器和客户端版本 2.47.0 和 2.47.1 的兼容性。和繁荣!有效。

于 2015-08-03T13:42:07.833 回答
0

安装了 Firefox Setup 18.0.exe 它对我有用

于 2017-04-12T11:45:35.030 回答
0

在 Windows 上:同时检查 Firefox 的“位数”。Firefox 43.0.1 64bit 不适用于 Selenium 2.50.0。与 Firefox 43.0.1 32bit 配合良好...

于 2016-10-10T09:20:34.790 回答
0

我认为这可能是显示问题。如果框中没有 GUI,则从 selenium webdriver 启动 firefox 会出现此错误。

要解决这个问题,首先在框中安装 Xvfb [ yum install Xvfb -y](一个虚拟显示驱动程序)。然后从詹金斯运行你的测试xvfv-run -a -d <your test execution command>。这将在虚拟显示缓冲区中启动浏览器。它还能够使用 selenium webdriver 获取屏幕截图。

于 2018-02-26T07:28:00.610 回答
0

我今天遇到了同样的问题。为了解决这个问题,我将 Firefox 版本 51 降级为 47 并且它正在工作。

注意:我在虚拟盒子中使用 Linux Ubuntu Mate,主机是另一个 Ubuntu Mate。所有操作系统都是 64 位和 firefox。

于 2017-02-02T13:19:13.100 回答
0

添加到知识库。我们在 Bamboo 上遇到了同样的问题。通过使用 Bamboo 上的环境属性解决了该问题。

DISPLAY=":1"

在 pom.xml 中将该值添加为系统属性,否则命令行不起作用。

于 2015-11-24T09:39:20.177 回答
0

我对 Firefox 38 也有同样的问题。

使用以下版本依赖项后,我可以解决问题。

    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>2.53.0</version>
    </dependency>

    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-firefox-driver</artifactId>
        <version>2.53.0</version>
    </dependency> 
于 2017-05-15T08:34:39.587 回答
-1

解决方案 -

1)升级你的硒服务器,即硒罐“selenium-server-standalone-2.xx.x.JAR”到“selenium-server-standalone-2.45.0.JAR”

2)升级您的 Selenium 客户端驱动程序,即 selenium libs 文件夹“selenium-java-2.xx.x”到“selenium-java-2.45.0”

3) 检查并安装兼容的 Firefox 版本

参考 -下载更新的 selenium 库和 jar 即版本 2.45.0

这将解决您的问题.. 干杯!

于 2015-11-01T12:50:02.483 回答