Selenium 2.53在Firefox 47上不起作用


107

将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上未加载任何URL。


1
是的,我也遇到同样的错误。我正在卸载并重新安装。如果您的浏览器已打开,请重置并尝试。
Kishan Patel

嗨,Kishan,我尝试过,正如您提到的,但仍然是相同的错误...所以我已降级为46.0.1
veena k

是的 mozilla出现了一些节目停播问题。他们更新了版本。您可以再次回滚到47。:-)
Kishan Patel


1
此问题在OSX上显示为错误,“'Firefox.bin”由于无法确认开发者的身份而无法打开,因此无法打开。降级到46解决了它。
hoosteeno '16

Answers:


93

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

因此,为了将Firefox 47.0用作带有Selenium WebDriver 2.53.0的浏览器,您需要下载Firefox驱动程序(该文件geckodriver是从0.8.0版开始的二进制文件,以前是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>4.1.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
    }
}

考虑到木偶将是未来的唯一选择(对于WebDriver 3+和Firefox 48+),但目前(编写时的0.9.0版)不是很稳定。请查看木偶路线图,以了解更多详细信息。

更新

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


9
这是不正确的。尽管FirefoxDriver损坏了,但实际上47中不支持MarionetteDriver。显然,有时会发布47.0.1,FirefoxDriver将在其中再次运行。正常工作的MarionetteDriver未能达到预期的47。参见github.com/mozilla/geckodriver/issues/89bugzilla.mozilla.org/show_bug.cgi?id=1279950-注意:我并不是说MarionettDriver根本无法工作,只是因为它已经损坏了TON有47个用例。降级是迄今为止的唯一选择。
dmansfield '16

7
我更新到47.0.1,Selenium仍未连接到Firefox。它不再使Firefox崩溃,但我仍然无法连接到127.0.0.1:7055。当我运行TcpView时,Firefox启动后没有端口7055的侦听器。
BardMorgan

2
我看到使用Mac,Mono和Selenium .NET 2.53.0的行为与BardMorgan相同。Firefox 47.0.1启动,但是出现超时错误OpenQA.Selenium.WebDriverException:无法在45000毫秒内启动套接字。尝试连接到以下地址:127.0.0.1:7055 – netstat不显示对该端口的侦听器。
Otto G

1
而且我现在也在Windows 10和本机.NET下进行了测试,问题是相同的。Netstat显示Selenium尝试连接,但没有服务在监听:C:\Windows\system32>netstat -ano | find "7055" TCP 127.0.0.1:2896 127.0.0.1:7055 SYN_SENT 2052
Otto G

1
作为记录,当访问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代码应该可以解决此问题。
奥托G

18

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

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

感谢Rahman ..它现在正在工作...但是,如果要求是与最新版本一起工作该怎么办。
veena k

如果解决方案有效,您能否接受答案?:-)
Mahbub Rahman

8
多数民众赞成在这不是一个解决方案,降级到以前的版本。
TiGreX

1
我也这样做了(但是转到v45)-如果您沿此路径前进,请确保将<path> \ Mozilla Firefox \ updater.exe重命名为updater.exe.disable,以防止降级的版本升级回当前版本自动。可能还有其他方法可以实现此目的-但在选项设置中禁用更新对我不起作用。
提请

10

我遇到了同样的问题,发现由于支持被取消,您需要切换驱动程序 。除了运行Firefox驱动程序外,您还需要使用Marionette驱动程序来运行测试。我目前正在自己​​完成设置,如果您有一个可行的示例,可以发布一些建议的步骤。

这是我在Mac上的Java环境上运行时遵循的步骤(在我的Linux安装(Fedora,CentOS和Ubuntu)中也为我工作):

  1. 发布页面下载每晚可执行文件
  2. 解压缩档案
  3. 为木偶创建目录(即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");

6

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

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

安装后,只需要将Applications目录中的FF可执行文件重命名为“ Firefox”。

可以在git repo homebrew-firefox上找到更多信息。支持smclernon创建原始桶



3

万一有人想知道如何在C#中使用木偶。

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 v​​53尚不提供该功能。

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降级。


2

根据以下网址,新的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。

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


我可以确认将硒升级到2.53.1为我解决了这个问题。
Disper

现在,这是最好的答案。
整体开发人员

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。


根据19小时前的评论:“ Firefox 47.0.1已发布,已修复。现在,我们需要发布客户端库,以获取FirefoxDriver使用的xpi中的版本变更。” 这似乎可以解释为什么2.53.0和47.0.1仍然存在问题。
Otto G


2

您可以尝试使用此代码,

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

我升级到硒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放在路径中。


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中。



1

截至2016年9月

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

在升级FirefoxUbuntu 14.04

sudo apt-get update
sudo apt-get upgrade firefox

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();

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.