【问题标题】:Selenium 2.53 not working on Firefox 47Selenium 2.53 不适用于 Firefox 47
【发布时间】:2016-11-25 16:43:33
【问题描述】:

我在使用带有 WebDriver 的 Firefox 时遇到错误。

org.openqa.selenium.firefox.NotConnectedException: Unable to connect
to host 127.0.0.1 on port 7055 after 45000 ms.
  • 火狐版本:47.0
  • 硒:2.53.0
  • Windows 10 64 位

有没有人遇到类似的问题或知道解决方案是什么?它在 Chrome 上运行良好,但在 Firefox 上没有加载任何 URL。

【问题讨论】:

  • 是的,我也遇到了同样的错误。我正在卸载并重新安装它。如果您的浏览器已打开,请重置并尝试。
  • 嗨,Kishan,我按照你提到的那样尝试过,但仍然出现同样的错误......所以我已经降级到 46.0.1
  • 是的。 Mozilla 出现了一些阻碍问题。他们更新了版本。您可以再次回滚到 47。:-)
  • 此问题在 OSX 上表现为错误,'"Firefox.bin" 无法打开,因为无法确认开发者的身份:'。降级到 46 解决了它。

标签: java selenium firefox selenium-webdriver selenium-firefoxdriver


【解决方案1】:

很遗憾,Selenium WebDriver 2.53.0 与 Firefox 47.0 不兼容。处理 Firefox 浏览器 (FirefoxDriver) 的 WebDriver 组件将停止使用。从 3.0 版开始,Selenium WebDriver 将需要 geckodriver 二进制文件来管理 Firefox 浏览器。更多信息herehere

因此,为了使用 Firefox 47.0 作为 Selenium WebDriver 2.53.0 的浏览器,您需要下载 Firefox driver(它是一个二进制文件,在 0.8.0 版本中称为 geckodriver,以前称为 wires ) 并将其绝对路径导出到变量 webdriver.gecko.driver 作为 Java 代码中的系统属性:

System.setProperty("webdriver.gecko.driver", "/path/to/geckodriver");

幸运的是,库 WebDriverManager 可以为您完成这项工作,即为您的机器(Linux、Mac 或 Windows)下载正确的 Marionette 二进制文件并导出正确系统属性的值。要使用这个库,你需要在你的项目中包含这个依赖:

<dependency>
    <groupId>io.github.bonigarcia</groupId>
    <artifactId>webdrivermanager</artifactId>
    <version>5.0.1</version>
</dependency>

...然后在使用WebDriver之前在你的程序中执行这一行:

WebDriverManager.firefoxdriver().setup();

使用 WebDriver 的 JUnit 4 测试用例的完整运行示例如下:

public class FirefoxTest {

    protected WebDriver driver;

    @BeforeClass
    public static void setupClass() {
        WebDriverManager.firefoxdriver().setup();
    }

    @Before
    public void setupTest() {
        driver = new FirefoxDriver();
    }

    @After
    public void teardown() {
        if (driver != null) {
            driver.quit();
        }
    }

    @Test
    public void test() {
        // Your test code here
    }
}

考虑到 Marionette 将是未来的唯一选择(适用于 WebDriver 3+ 和 Firefox 48+),但目前(编写时为 0.9.0 版)不是很稳定。查看Marionette roadmap了解更多详情。

更新

Selenium WebDriver 2.53.1 已于 2016 年 6 月 30 日发布。FirefoxDriver 再次使用 Firefox 47.0.1 作为浏览器。

【讨论】:

  • 这是不正确的。 MarionetteDriver 实际上在 47 中不受支持,尽管 FirefoxDriver 已损坏。显然 47.0.1 将发布(有时),其中 FirefoxDriver 将再次工作。工作中的 MarionetteDriver 并没有像预期的那样进入 47。请参阅github.com/mozilla/geckodriver/issues/89bugzilla.mozilla.org/show_bug.cgi?id=1279950 - 注意:我并不是说MarionettDriver 根本无法工作,只是它在47 的大量用例中被破坏了。降级是今天唯一的选择。
  • 我更新到 47.0.1 并且 Selenium 仍然没有连接到 Firefox。它不再使 Firefox 崩溃,但我仍然无法连接到 127.0.0.1:7055。运行TcpView时,火狐启动后没有监听7055端口。
  • 我看到了与 BardMorgan 相同的行为,使用 Mac、Mono 和 Selenium .NET 2.53.0。 Firefox 47.0.1 启动,但我收到超时错误 OpenQA.Selenium.WebDriverException:无法在 45000 毫秒内启动套接字。尝试连接到以下地址:127.0.0.1:7055 - netstat 显示该端口没有侦听器。
  • 而且我现在也在Windows 10和原生.NET下测试过,问题是一样的。 Netstat 显示 Selenium 尝试连接,但没有服务在监听:C:\Windows\system32&gt;netstat -ano | find "7055" TCP 127.0.0.1:2896 127.0.0.1:7055 SYN_SENT 2052
  • 郑重声明,当访问由 Selenium 2.53.0 启动的 Firefox 47.0.1 中的 about:addons 时,扩展选项卡将显示“Firefox WebDriver 与 Firefox 47.0.1 不兼容”。这是因为github.com/SeleniumHQ/selenium/blob/selenium-2.53.0/javascript/… 中的最大版本为 47.0 - 头部版本已修复,因此从 GitHub 构建最新的 Selenium 代码应该可以解决问题。
【解决方案2】:

尝试使用 Firefox 46.0.1。它与 Selenium 2.53 最匹配

https://ftp.mozilla.org/pub/firefox/releases/46.0.1/win64/en-US/

【讨论】:

  • 谢谢 Rahman ..它现在可以工作了...但是如果要求使用最新版本怎么办。
  • 如果解决方案有效,您能接受答案吗? :-)
  • 这不是解决方案,正在降级到以前的版本。
  • 我也这样做了(但升级到 v45) - 如果你沿着这条路走,请确保将 \Mozilla Firefox\updater.exe 重命名为 updater.exe.disable 以防止降级版本自动升级回当前版本。可能还有其他方法可以实现这一点 - 但在选项设置中禁用更新对我不起作用。
【解决方案3】:

我遇到了同样的问题,发现您需要切换驱动程序,因为support was dropped。您需要使用Marionette 驱动程序来运行测试,而不是使用 Firefox 驱动程序。我目前正在自己​​完成设置,如果您愿意,可以在我有一个工作示例时发布一些建议的步骤。

以下是我在 Mac 上的 Java 环境中运行它所遵循的步骤(在我的 Linux 安装(Fedora、CentOS 和 Ubuntu)中也适用于我):

  1. releases page下载夜间可执行文件
  2. 解压存档
  3. 为 Marionette 创建一个目录(即mkdir -p /opt/marionette
  4. 将解压后的可执行文件移动到你创建的目录
  5. 更新您的 $PATH 以包含可执行文件(另外,如果需要,请编辑您的 .bash_profile
  6. :bangbang: 确保你chmod +x /opt/marionette/wires-x.x.x 使其可执行
  7. 在启动时,请确保使用以下代码(这是我在 Mac 上使用的)

快速笔记

仍然无法按预期工作,但至少现在可以启动浏览器。需要弄清楚原因 - 现在看来我需要重写我的测试才能让它工作。

Java 代码片段

WebDriver browser = new MarionetteDriver();
System.setProperty("webdriver.gecko.driver", "/opt/marionette/wires-0.7.1-OSX");

【讨论】:

    【解决方案4】:

    如果你在 OSX 上使用 Homebrew,你可以通过 brew cask 安装旧的 Firefox 版本:

    brew tap goldcaddy77/firefox
    brew cask install firefox-46 # or whatever version you want
    

    安装后,您只需将应用程序目录中的 FF 可执行文件重命名为“Firefox”。

    更多信息可以在 git repo homebrew-firefox 中找到。支持 smclernon 创建 original cask

    【讨论】:

      【解决方案5】:

      如果您使用的是 Mac,请执行 brew install geckodriver 并离开!

      【讨论】:

        【解决方案6】:

        如果有人想知道如何在 C# 中使用 Marionette。

        FirefoxProfile profile = new FirefoxProfile(); // Your custom profile
        var service = FirefoxDriverService.CreateDefaultService("DirectoryContainingTheDriver", "geckodriver.exe");
        // Set the binary path if you want to launch the release version of Firefox.
        service.FirefoxBinaryPath = @"C:\Program Files\Mozilla Firefox\firefox.exe";
        var option = new FirefoxProfileOptions(profile) { IsMarionette = true };
        var driver = new FirefoxDriver(
            service,
            option,
            TimeSpan.FromSeconds(30));
        

        重写 FirefoxOptions 以提供添加附加功能和设置 Firefox 配置文件的功能,因为 selenium v53 还没有提供该功能。

        public class FirefoxProfileOptions : FirefoxOptions
        {
            private DesiredCapabilities _capabilities;
        
            public FirefoxProfileOptions()
                : base()
            {
                _capabilities = DesiredCapabilities.Firefox();
                _capabilities.SetCapability("marionette", this.IsMarionette);
            }
        
            public FirefoxProfileOptions(FirefoxProfile profile)
                : this()
            {
                _capabilities.SetCapability(FirefoxDriver.ProfileCapabilityName, profile.ToBase64String());
            }
        
            public override void AddAdditionalCapability(string capabilityName, object capabilityValue)
            {
                _capabilities.SetCapability(capabilityName, capabilityValue);
            }
        
            public override ICapabilities ToCapabilities()
            {
                return _capabilities;
            }
        }
        

        注意:使用配置文件启动不适用于 FF 47,它适用于 FF 50 Nightly。

        但是,我们尝试将测试转换为使用 Marionette,但目前不可行,因为驱动程序的实现要么未完成,要么存在错误。我建议人们现在降级他们的 Firefox。

        【讨论】:

          【解决方案7】:

          新的 Selenium 库现已推出,根据:https://github.com/SeleniumHQ/selenium/issues/2110

          下载页面http://www.seleniumhq.org/download/好像还没有更新,但是通过在链接中的次要版本加1,我可以下载C#版本:http://selenium-release.storage.googleapis.com/2.53/selenium-dotnet-2.53.1.zip

          它适用于 Firefox 47.0.1。

          附带说明一下,我可以通过运行./go //javascript/firefox-driver:webdriver:run 从 GitHub 的 master 分支构建 webdriver.xpi Firefox 扩展——它给出了一条错误消息,但确实构建了 build/javascript/firefox-driver/webdriver.xpi 文件,我可以重命名(以避免名称冲突)并使用 FirefoxProfile.AddExtension 方法成功加载。这是一个合理的解决方法,无需重建整个 Selenium 库。

          【讨论】:

          • 我可以确认将 selenium 升级到 2.53.1 解决了我的问题。
          • 这是最好的答案。
          【解决方案8】:

          这是 FF47 的问题 https://github.com/SeleniumHQ/selenium/issues/2110

          请降级到 FF 46 或以下(或试用 FF48 开发者https://developer.mozilla.org/en-US/Firefox/Releases/48

          关于如何降级的说明: https://www.liberiangeek.net/2012/04/how-to-install-previous-versions-of-firefox-in-ubuntu-12-04-precise-pangolin/ 或者,如果您使用的是 Mac,请按照此线程中其他人的建议使用 brew。

          【讨论】:

          • 根据 19 小时前的评论:“Firefox 47.0.1 已发布并修复。我们现在需要发布客户端库来获取 FirefoxDriver 使用的 xpi 中的版本提升。”这似乎可以解释为什么 2.53.0 和 47.0.1 仍然存在问题。
          【解决方案9】:

          Firefox 47.0 停止使用 Webdriver。

          最简单的解决方案是切换到 Firefox 47.0.1 和 Webdriver 2.53.1。这种组合再次起作用。事实上,根据https://www.mozilla.org/en-US/firefox/47.0.1/releasenotes/ 的说法,恢复 Webdriver 兼容性是 47.0.1 版本背后的主要原因。

          【讨论】:

          • 现在 Firefox 47.0.1 也可以与 Webdriver 2.53.0 一起正常工作。我已经测试过这个组合。
          【解决方案10】:

          您可以尝试使用此代码,

          private WebDriver driver;
          System.setProperty("webdriver.firefox.marionette","Your path to driver/geckodriver.exe");        
          driver = new FirefoxDriver();
          

          我升级到 selenium 3.0.0,火狐版本是 49.0.1

          您可以从https://github.com/mozilla/geckodriver/releases下载geckodriver.exe

          确保根据您的系统仅下载 zip 文件、geckodriver-v0.11.1-win64.zip 文件或 win32 文件,并将其解压缩到一个文件夹中。

          将该文件夹的路径放在“您的驱动程序路径”引号中。不要忘记将 geckodriver.exe 放在路径中。

          【讨论】:

            【解决方案11】:

            我最终安装了一个额外的旧版本的 Firefox(仅用于测试)来解决这个问题,除了我常规的(安全的、最新的)最新的 Firefox 安装。

            这需要 webdriver 知道在哪里可以找到 Firefox 二进制文件,可以通过 webdriver.firefox.bin 属性设置。

            对我有用的(mac、maven、/tmp/ff46 作为安装文件夹)是:

            mvn -Dwebdriver.firefox.bin=/tmp/ff46/Firefox.app/Contents/MacOS/firefox-bin verify
            

            要在专用文件夹中安装旧版本的 Firefox,请创建文件夹,在该文件夹中打开 Finder,下载 Firefox dmg,然后将其拖到该 Finder。

            【讨论】:

              【解决方案12】:

              这是problem looked like in Wireshark

              只需加载 2.53.1,一切都会正常运行。

              【讨论】:

                【解决方案13】:

                截至 2016 年 9 月

                Firefox 48.0selenium==2.53.6 工作正常,没有任何错误

                Ubuntu 14.04上升级firefox 仅限

                sudo apt-get update
                sudo apt-get upgrade firefox
                

                【讨论】:

                  【解决方案14】:

                  在我看来,最好的解决方案是更新到 Selenium 3.0.0,下载 geckodriver.exe 并使用 Firefox 47 或更高版本。

                  我将 Firefox 初始化更改为:

                   string geckoPathTest = Path.Combine(Environment.CurrentDirectory, "TestFiles\\geckodriver.exe");
                   string geckoPath = Path.Combine(Environment.CurrentDirectory, "geckodriver.exe");
                   File.Copy(geckoPathTest, geckoPath);
                   Environment.SetEnvironmentVariable("webdriver.gecko.driver", geckoPath);
                   _firefoxDriver = new FirefoxDriver();
                  

                  【讨论】:

                    【解决方案15】:

                    我可以确认 selenium 2.53.6 可以在 ubuntu 15 上与 firefox 44 一起使用。

                    【讨论】:

                      猜你喜欢
                      • 2016-12-12
                      • 2017-03-05
                      • 1970-01-01
                      • 2016-10-12
                      • 2016-12-20
                      • 2015-02-03
                      • 1970-01-01
                      • 2016-12-06
                      相关资源
                      最近更新 更多