Selenium 2.53无法在Firefox 47上运行

时间:2016-06-08 04:13:13

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

将Firefox与WebDriver一起使用时出错。

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

是否有人遇到类似的问题或任何想法是什么解决方案?它适用于Chrome,但使用Firefox时,没有任何网址被加载。

15 个答案:

答案 0 :(得分:92)

不幸的是,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>3.6.0</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 作为浏览器。

答案 1 :(得分:18)

尝试使用firefox 46.0.1。它最适合Selenium 2.53

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

答案 2 :(得分:10)

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

以下是我在Mac上使用Java环境时所遵循的步骤(在我的Linux安装(Fedora,CentOS和Ubuntu)中为我工作):

  1. releases page
  2. 下载每晚可执行文件
  3. 解压缩档案
  4. 为Marionette创建一个目录(即mkdir -p /opt/marionette
  5. 将解压缩的可执行文件移至您创建的目录
  6. 更新您的$PATH以包含可执行文件(如果需要,还可以修改.bash_profile
  7. :bangbang:确保chmod +x /opt/marionette/wires-x.x.x以便它可执行
  8. 在发布时,请确保使用下面的代码(这是我在Mac上使用的代码)
  9. 快速注释

    仍然没有按预期工作,但至少现在启动浏览器。需要弄清楚原因 - 现在看起来我需要重写我的测试才能让它发挥作用。

    Java代码段

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

答案 3 :(得分:6)

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

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

安装完成后,您只需将Applications目录中的FF可执行文件重命名为&#34; Firefox&#34;。

可以在git repo homebrew-firefox找到更多信息。用于创建smclernon的道具original cask

答案 4 :(得分:6)

如果你在Mac上做brew install geckodriver并离开你去!

答案 5 :(得分:3)

如果有人想知道如何在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。

然而,我们试图将我们的测试转换为使用Marionette,目前它还不可行,因为驱动程序的实现要么没有完成,要么没有错误。我建议人们此刻降级他们的Firefox。

答案 6 :(得分:2)

这是一个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。

答案 7 :(得分:2)

根据https://github.com/SeleniumHQ/selenium/issues/2110

,新的Selenium库现已推出

下载页面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中的主分支构建 webdriver.xpi Firefox扩展,这会产生错误消息,但确实构建了 build / javascript / firefox-driver / webdriver.xpi 文件,我可以重命名(以避免名称冲突)并使用FirefoxProfile.AddExtension方法成功加载。这是一个合理的解决方法,无需重建整个Selenium库。

答案 8 :(得分:2)

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版本背后的主要原因。

答案 9 :(得分:2)

您可以尝试使用此代码,

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

我升级到selenium 3.0.0,Firefox版本是49.0.1

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

下载geckodriver.exe

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

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

答案 10 :(得分:1)

除了常规(安全,最新)最新的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。

答案 11 :(得分:1)

这里是problem looked like in Wireshar k

的内容

只需加载2.53.1即可。

答案 12 :(得分:1)

截至2016年9月

Firefox 48.0selenium==2.53.6正常运行,没有任何错误

仅在Ubuntu 14.04

上升级Firefox
sudo apt-get update
sudo apt-get upgrade firefox

答案 13 :(得分:1)

在我看来,最好的解决方案是更新到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();

答案 14 :(得分:0)

我可以在ubuntu 15上确认selenium 2.53.6对我有效firefox 44