无法在 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的主要内容,如果未能解决你的问题,请参考以下文章
使用 Maven、Protractor 和 Selenium WebDriver 进行集成测试
我们可以在 selenium 中添加驱动程序作为 maven 依赖项吗
有人可以解释为啥 Selenium 简单程序不起作用吗? (在 Mac 上使用 Maven-Java)
无法从节点连接读取描述符:在 Windows 操作系统上使用 ChromeDriver Selenium 连接到系统的设备无法运行错误