geckodriver.exe 不在当前目录或路径变量中,Selenium 2.53.1 + Firefox 48 + Selenium 3 Beta

Posted

技术标签:

【中文标题】geckodriver.exe 不在当前目录或路径变量中,Selenium 2.53.1 + Firefox 48 + Selenium 3 Beta【英文标题】:geckodriver.exe not in current directory or path variable, Selenium 2.53.1 + Firefox 48 + Selenium 3 Beta 【发布时间】:2016-12-25 06:18:11 【问题描述】:

看到很多关于 Selenium 2.53.1 和 Firefox 47.0.1 的问题,但没有关于 Selenium 3 Beta 版本的问题。我正在尝试使用新的 gecko/marionette Firefox 网络驱动程序,但即使我有驱动程序位置;我的环境路径,火狐在程序中的安装文件夹,并在系统环境中给出驱动位置,它仍然无法正常工作。

错误:

geckodriver.exe 不存在于当前目录或 PATH 环境变量的目录中。驱动可以在https://github.com/mozilla/geckodriver/releases下载。

使用:

Selenium 2.53.1 服务器 火狐48 Selenium 3 Beta DLL 窗口 10

示例代码 1

    using OpenQA.Selenium.Firefox;

    public static class FirefoxInitialise
    
         public static IWebDriver Driver get; set;

         Driver = new FirefoxDriver();
    

还尝试了以下操作:

    using OpenQA.Selenium.Firefox;

    public static class FirefoxInitialise
    
         public static IWebDriver Driver get; set;

         FirefoxDriverServices service = FirefoxDriverService.CreateDefaultService();
         service.FirefoxBinaryPath = @"C:\Program Files\Mozilla Firefox\firefox.exe";
         FirefoxOptions options = new FirefoxOptions();
         TimeSpan time = TimeSpan.FromSeconds(10);
         Driver = new FirefoxDriver(service, options, time);
    

任何关于为什么代码仍然无法检测到此驱动程序的帮助或见解将不胜感激。

【问题讨论】:

根据 the comment by naveenkumar1 在 GitHub 上的 Selenium,这可能根本不适用于 Windows... 看看这篇关于 C# 的帖子 - ***.com/questions/37761080/… 是的,我看过大部分 C# 的,但它们都使用旧的 2.53 版本的 DLL。 Selenium 3 beta 现在使用 geckodriver 作为标准而不是 wires.exe。我可能会尝试将 geckodriver.exe 添加到 bin/debug 文件夹中,看看会发生什么...... Fail to Launch Mozilla with selenium的可能重复 不是重复的,因为那些在 .NET 上解决问题的步骤已经尝试过但失败了,以及将 geckodriver 位置添加到 PATH 环境中 【参考方案1】:

尝试将 geckodriver.exe 放入您的路径:C:\Users\YourName\Documents\Visual Studio 2013\Projects\seleniump\seleniump\bin\Debug

您可以在此链接中找到 geckodriver.exe:

https://github.com/mozilla/geckodriver/releases

【讨论】:

【参考方案2】:

安装Selenium.Firefox.Webdriver NuGet 包。

这会将 geckodriver.exe 复制到 bin 文件夹中。

【讨论】:

确保将其安装到您的测试所在的项目中,而不仅仅是引用它的位置。 我一直必须向 FirefoxDriver 指定 geckodriver.exe 位于当前目录中。这是最简单的方法:driver = new FirefoxDriver(Environment.CurrentDirectory);【参考方案3】:

此解决方案可能会帮助您解决问题:(虽然它确实帮助了我)

public class TestResult 

    private IWebDriver driver;
    private StringBuilder verificationErrors;
    private string baseURL;
    private bool acceptNextAlert = true;

    [TestInitialize]
    public void SetupTest() 
        FirefoxDriverService service = FirefoxDriverService.CreateDefaultService(@"C:\geckodriver", "geckodriver.exe");
        service.Port = 64444;
        service.FirefoxBinaryPath = @"C:\Program Files (x86)\Firefox Developer Edition\firefox.exe";
        driver = new FirefoxDriver(service);
        baseURL = "http://localhost:49539";
        verificationErrors = new StringBuilder();
    

参考 Check out @juver-malpartida 's Answer

【讨论】:

这需要您下载 geckoverdriv.exe(未枚举)并放置在不受控制/不受版本控制的区域。匹配 Visual Studio 样式时最简洁的方法是使用 Nuget。 确实,也许今天是更好的解决方案【参考方案4】:

如果您在项目中包含 geckodriver.exe 并在编译时将其复制到目标目录,则 webdriver 的工作方式与以前版本一样。

【讨论】:

【参考方案5】:

这是给初学者的,在这篇文章之后,我会在下面写下简短的版本:) 最简单的方法首先是您需要下载所有驱动程序您使用的浏览器并将所有驱动程序提取到例如C:\Selenium\ 在那里并转到 VisualStudio 并从这里添加 Selenium packages 如图所示@ 987654321@ 在控制台中写入此代码 PM>Install-Package Selenium.WebDriver 之后复制您的驱动程序目录并从 Windows 搜索选项卡类型变量并选择(编辑系统环境和变量)shown pic2 在此窗口中,您将有 advanced 选项卡,在下面单击 Environment Variables... 在这里您有 System variables 部分找到 PATH or Path 变量和编辑要小心don't delete it!! 下一步点击new - 粘贴驱动程序目录并点击所有windws ok 按钮就可以了。重新启动您的 VS 程序并检查它。在此之后,您不必像

那样将导向器路径添加到您的构造函数中
IWebDriver driver2 = new InternetExplorerDriver(@"C:\Selenium"); 

还有一件事不要忘记导入文件。

using OpenQA.Selenium;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.IE;

适用于更高级的 IT 人员。

    添加到环境路径您的驱动程序目录中。 VisualStudio 在控制台模式下使用 NuGet 包管理器安装 Selenium,或者您希望如何。

    PM> 安装包 Selenium.WebDriver

    重启VS。

【讨论】:

【参考方案6】:

在您的项目中,单击工具 --> Nuget 包管理器 --> 管理解决方案的 NuGet 包... 在打开的窗口中 浏览 Selenium.FireFox.WebDriver 选择项目和您的项目名称,然后单击安装。

这是将驱动程序放入您的 Selenium 项目的更简单的形式。

【讨论】:

【参考方案7】:

我会试试这个:

    首先,确保您的 C# 项目运行与客户端驱动程序库相同的 .NET 框架版本(当您从 Selenium HQ 下载它们时,您应该看到它们所基于的框架版本)。截至 2017 年 9 月 15 日,我有 3.5 和 4.0,因此我必须将我的 C# 项目降级到 .NET 4.0 才能使用 4.0 客户端驱动程序库。

    在您的代码中,创建 Firefox 驱动程序服务时,请确保明确指定 geckodriver.exe 所在的路径。看看我是如何在您对FirefoxDriverService.CreateDefaultService 的调用中添加路径参数的:

    using OpenQA.Selenium.Firefox;
    
    public static class FirefoxInitialise
    
      private static IWebDriver Driverget; set;
      public static IWebDriver Init()
      
       // I'm assuming your geckodriver.exe is located there:
       // @"C:\MyGeckoDriverExePath\geckodriver.exe"
       FirefoxDriverService service = FirefoxDriverService.CreateDefaultService(@"C:\MyGeckoDriverExePath\");
       service.FirefoxBinaryPath = @"C:\Program Files\Mozilla Firefox\firefox.exe"; // May not be necessary
       FirefoxOptions options = new FirefoxOptions();
       TimeSpan time = TimeSpan.FromSeconds(10);
       Driver = new FirefoxDriver(service, options, time);
       return Driver;
     
    
    

So you can use :

IWebDriver driver = FirefoxInitialise.Init();

【讨论】:

【参考方案8】:

如果你在 path 环境变量中有可执行文件,这可能意味着它没有访问它的权限。作为一种解决方法,请尝试以管理员身份运行 Visual Studio。

或者你可以把它移到它有权限的地方。例如:

var service = FirefoxDriverService.CreateDefaultService(@"D:\tmp\Binaries");
service.FirefoxBinaryPath = FirefoxBinary;

var options = new FirefoxOptions();
options.SetPreference("browser.private.browsing.autostart", true);

_driver = new FirefoxDriver(service, options, TimeSpan.FromSeconds(30));

我将二进制文件放在D:\tmp\Binaries\ 中并在代码中指定它以检查那里的geckodriver。

【讨论】:

代码service.FirefoxBinaryPath = FirefoxBinary; 无法编译。也许您可以提供更多上下文来使您的代码可运行。 @Manfred 这是一条火狐二进制文件的路径。例如:如果您的 firefox 二进制文件位于 D:\firefox\firefox.exe,那应该是 FirefoxBinary 的值。【参考方案9】:

我也不断收到此错误,我唯一能做的就是最终修复它(不确定这是否是每个遇到此问题的人的最佳答案)我将 geckodriver.exe 放在我的主库目录中,然后我打开webdriver.py:

/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/selenium/webdriver/firefox/webdriver.py

找到上面写着的那一行: executable_path="geckodriver", firefox_options=None,

并将其更改为:

executable_path="/Library/geckodriver", firefox_options=None

【讨论】:

【参考方案10】:

我遇到了一个 Visual Studio 2017 问题,其中构建会失败,因为它正在一个不存在的目录中查找 geckodriver exec。我还使用 nuget 包管理器添加了它。我发现在 Visual Studio->Project->Properties->Build 中,如果您使构建独立于体系结构,它就可以工作:平台目标是任何 CPU 并保留其他复选框(首选 32 位,允许不安全代码,优化代码)全部未选中或仅选中 Prefer 32-bit (这是我系统上的默认设置)。 顺便说一句:我的应用程序是一个 .NET Framework 4.5.2 控制台应用程序

【讨论】:

【参考方案11】:

此解决方案适用于 VS2017。只需将 geckodriver.exe 复制到我的项目文件夹中,如下所示:

C:\Users\pedne\Desktop\C#\FirstSolution\FirstSolution\bin\Debug

【讨论】:

以上是关于geckodriver.exe 不在当前目录或路径变量中,Selenium 2.53.1 + Firefox 48 + Selenium 3 Beta的主要内容,如果未能解决你的问题,请参考以下文章

python中使用selenium调用Firefox缺少geckodriver解决方法

text 当前目录(./)不在PHP包含路径中

Selenium,解决Message: 'geckodriver' executable needs to be in PATH

查找不在当前目录中的文件的路径并逐个访问该文件夹中的文件 - Python

导入不在路径上的python模块

浏览器安装驱动