无法在 Maven 中使用 Selenium 连接到二进制 FirefoxBinary

Posted

技术标签:

【中文标题】无法在 Maven 中使用 Selenium 连接到二进制 FirefoxBinary【英文标题】:Failed to connect to binary FirefoxBinary with Selenium in Maven 【发布时间】:2012-11-10 22:45:32 【问题描述】:

我正在运行一些 Selenium 测试。当我直接从 Eclipse 启动它们时,一切正常。但是当我通过 Maven 启动它们时,会出现以下异常:

org.openqa.selenium.WebDriverException(Failed to connect to binary FirefoxBinary(C:\winapp\Firefox\firefox.exe) on port 7055; process output follows: 
null
Build info: version: '2.26.0', revision: '18040', time: '2012-11-02 09:44:45'
System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.6.0_35'
Driver info: driver.version: FirefoxDriver)

我使用的是 Firefox 10.0.10 ESR。我也用 Selenium 2.25.0 尝试过。

这是我最新版本的 pom.xml:

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.10</version>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>2.26.0</version>
    </dependency>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-server</artifactId>
        <version>2.26.0</version>
        <exclusions>
            <exclusion>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>com.thoughtworks.xstream</groupId>
        <artifactId>xstream</artifactId>
        <version>1.4.1</version>
        <type>jar</type>
    </dependency>
    <dependency>
        <groupId>org.jdom</groupId>
        <artifactId>jdom2</artifactId>
        <version>2.0.3</version>
    </dependency>
</dependencies>

如果我可以为您提供更多信息,请告诉我。

编辑:更新 pom.xml

edit2:最让我惊奇的是,我可以从 Eclipse 运行测试而不会出现 ans 问题。例如,如果我调用“mvn install”,它们就会发生

【问题讨论】:

selenium-server 工件依赖于 servlet-api-2.5 工件,如果您的项目将在 Web 应用程序容器中运行 - 来自 Selenium hq.org,您应该排除它。跨度> 还有为什么你需要 selenium-api 依赖? 我只是尝试了一些东西。现在我添加了排除并删除了 selenium-api 依赖,但问题还是一样 您可以尝试设置webdriver.firefox.logfile系统属性以从Firefox获取日志。 问题是,maven 无法启动 firefox,所以没有日志 ;) 【参考方案1】:

尝试将其添加到您的 pom 中

更新:

<dependency>
    <groupId>org.seleniumhq.webdriver</groupId>
    <artifactId>selenium-firefox-driver</artifactId>
    <version>2.XX.X</version>
</dependency>

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-server</artifactId>
    <version>2.XX.X</version>
</dependency> 

【讨论】:

我发现的最新版本是 0.9.7376。把这个添加到我的pom之后,还是有同样的问题 更新后的答案对我有用。如果仍然存在问题,请尝试通过您的测试传递 FirefoxBinary Path。 问题还是一样。将路径传递给二进制文件是什么意思,因为路径本身是正确的。当我打开这条路。 Firefox 工作正常 请注意,有时依赖版本不匹配会导致此问题。拥有正确的 dep 版本以匹配您的浏览器版本非常重要。我刚刚在 maven 中升级到最新的 dep 版本,它工作正常。 这也解决了我的问题 - Selenium 43.0 + FF 45.0.2【参考方案2】:

当我遇到此错误时,通常是以下两种情况之一。

Selenium 版本不支持浏览器版本 从 Eclipse 与 Maven 运行时,仔细检查 Selenium/浏览器版本是否相同。 仔细检查 Eclipse 和 Maven 配置为使用相同的 Selenium 版本。 当我的浏览器自动更新时发生这种情况,所以我在浏览器中关闭了它。

Selenium 测试以无头模式运行 如果您在与 Eclipse 相同的机器上手动执行 mvn,则不太可能。 在我的 Jenkins 服务器上通过 Maven 运行 Selenium 时,这发生在我身上。 Jenkins 服务器以无头模式运行。花了我一分钟才弄清楚无头的东西,我想我在 Linux 中设置了一个 DISPLAY 环境变量或其他东西。

【讨论】:

感谢您的回答 Matthew,但为了确定,我做了很多次第一步,而第二步不适合我,因为我在同一台物理机器上运行测试 设置 DISPLAY 环境变量后,问题解决了吗?我想我遇到了同样的问题。 显示修复它。此外,如果它与连接的显示器或 htmlUnit 驱动程序一起使用,则可能是无头问题。 FireFox 可以在后台作为 Windows 服务运行更新,您必须进入高级设置 - 更新并取消选中它。还要注意您的工作版本,以便在出现问题时安装旧版本。 在我的例子中,Mozilla 在运行之间进行了更新,所以一半的 ma 测试失败了......【参考方案3】:

我发现问题出在哪里了。

我加载了一些扩展来添加到我用来实例化 FireFoxDriver 的 FirefoxProfile。这些插件位于 Java/main/resources 下。在 Eclipse 中一切正常,但我无法通过 Maven 访问这些插件。将这些文件复制到一个临时文件夹并从那里加载它们后,它甚至可以从 Maven 工作。

感谢您的帮助

【讨论】:

【参考方案4】:

如果您已将 Firefox 和 Selenium 都更新到最新版本以尝试解决此问题,但您仍然遇到此问题,则您可能已使用“重新启动以更新”来更新 Firefox。

关闭 Firefox 并确保 Firefox 可执行文件不再运行。然后试试你的测试。它现在应该可以工作了。

我猜这与您使用“重启以更新”时 Firefox 二进制文件的确切更新时间有关

【讨论】:

【参考方案5】:

Linux 更新后出现了类似的问题。 我们测试了许多 selenium 版本(2.42.2 和 2.43.1)和 firefox(27.0.1 到 32.0.2)的组合,但问题始终存在。

我们在OpenMandriva下,项目在Eclipse和Maven下。

我们为我们找到了一个解决方案,即替换以下 maven 依赖项

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

以下所有人:

    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-firefox-driver</artifactId>
        <version>2.43.1</version>
    </dependency>

    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-support</artifactId>
        <version>2.43.1</version>
    </dependency>   

    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-api</artifactId>
        <version>2.43.1</version>
    </dependency>

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.0</version>
    </dependency>

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.3.5</version>
    </dependency>

我想知道这个解决方案是否只是隐藏了真正的问题?

【讨论】:

【参考方案6】:

当您的 Firefox 缓存文件夹所在的磁盘上没有剩余空间时,也会出现同样的问题。只需释放空间并启动您的脚本!

【讨论】:

【参考方案7】:

我在 Firefox 36 上遇到过这个问题,人们在 35 和 44 也遇到了同样的问题。

总之,将 Firefox 升级到 37 或将其降级到 33 以下。

【讨论】:

【参考方案8】:

找不到 firefoxbinary 路径。 请在使用firefox驱动之前设置firefox路径。

System.setProperty("webdriver.firefox.bin", "C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");

【讨论】:

【参考方案9】:

在与此问题斗争了一段时间并尝试了此处列出的大多数(如果不是全部)选项之后,我终于通过在我的构建路径中删除一个未使用的 JAR - ios-server-0.6.5-jar-with-dependencies.jar 并使用 @ 的组合来摆脱这个错误987654322@ 和硒罐2.48.2

只是想把它作为另一种选择发布,以防有​​人遇到这个令人衰弱的问题。

【讨论】:

【参考方案10】:
my recommendation is 

    ===> switch to firefox version 50.0 [latest One] , 

    ===> download the gecko driver from [.](https://github.com/mozilla/geckodriver/releases)  and 

    ===> Selenium version 3.0.1
     <dependency>
                <groupId>org.seleniumhq.selenium</groupId>
                <artifactId>selenium-java</artifactId>
                <version>3.0.1</version>
     </dependency>

    ==> On your Code 
private WebDriver driver;
System.setProperty("webdriver.gecko.driver", "PATH to GECKO DRIVER");
        driver = new FirefoxDriver();

    and yes you see the below output in your console :


    Dec 17, 2016 6:40:45 PM org.openqa.selenium.remote.ProtocolHandshake createSession
    INFO: Attempting bi-dialect session, assuming Postel's Law holds true on the remote end
    14819XXXXXXX5   mozprofile::profile INFO    Using profile path C:\Users\User\AppData\Local\XXXXX\rust_XXXprofile.OXXXXXXXXXXX7S
    148XXXXXXXXX0   geckodriver::marionette INFO    Starting browser C:\Program Files\Mozilla Firefox\firefox.exe
    148XXXXXXXXX1   geckodriver::marionette INFO    Connecting to Marionette on localhost:XXXXXXX
    148198XXXX077   Marionette  INFO    Listening on port 53532
    Dec 17, 2016 6:40:55 PM org.openqa.selenium.remote.ProtocolHandshake createSession
    INFO: Detected dialect: W3C
    [Child 4104] ###!!! ABORT: Aborting on channel error.: file c:/builds/moz2_slave/m-rel-w32-00000000000000000000/build/src/ipc/glue/MessageChannel.cpp, line XXXX
    Dec 17, 2016 6:41:13 PM org.openqa.selenium.os.UnixProcess destroy

【讨论】:

【参考方案11】:

尝试使用最新的 selenium server 版本,需要检查浏览器和 selenium server 的兼容性。

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

【讨论】:

以上是关于无法在 Maven 中使用 Selenium 连接到二进制 FirefoxBinary的主要内容,如果未能解决你的问题,请参考以下文章

Appium Maven 项目无法在真机上运行

使用 Maven、Protractor 和 Selenium WebDriver 进行集成测试

我们可以在 selenium 中添加驱动程序作为 maven 依赖项吗

有人可以解释为啥 Selenium 简单程序不起作用吗? (在 Mac 上使用 Maven-Java)

无法从节点连接读取描述符:在 Windows 操作系统上使用 ChromeDriver Selenium 连接到系统的设备无法运行错误

Firefox selenium webdriver 给出“不安全的连接”