Selenium webdriver VS 2017和Selenium.Webdriver NuGet:chromedriver.exe未找到

Selenium webdriver VS 2017和Selenium.Webdriver NuGet:chromedriver.exe未找到,selenium-webdriver,visual-studio-2017,selenium-chromedriver,Selenium Webdriver,Visual Studio 2017,Selenium Chromedriver,我一直在Visual Studio 2015中使用用于Selenium Webdriver的NuGet软件包,并取得了巨大成功。我没有下载chromedriver.exe文件并手动添加它,而是通过NuGet完成了所有工作 现在,在VS 2017中,这不再有效 我已经添加了所有必要的NuGet软件包:Selenium.WebDriver 3.11.1和Selenium.Chrome.WebDriver 2.37.0 然而,当我尝试实例化驱动程序并打开Chrome时,我得到以下异常: OpenQA.

我一直在Visual Studio 2015中使用用于Selenium Webdriver的NuGet软件包,并取得了巨大成功。我没有下载chromedriver.exe文件并手动添加它,而是通过NuGet完成了所有工作

现在,在VS 2017中,这不再有效

我已经添加了所有必要的NuGet软件包:Selenium.WebDriver 3.11.1和Selenium.Chrome.WebDriver 2.37.0

然而,当我尝试实例化驱动程序并打开Chrome时,我得到以下异常:

OpenQA.Selenium.DriverServiceNotFoundException: 'The chromedriver.exe file
does not exist in the current directory or in a directory on the PATH 
environment variable. The driver can be downloaded at 
http://chromedriver.storage.googleapis.com/index.html.'
至少在这种情况下,使用NuGet的要点是不要手动下载和添加驱动程序。但为什么这个坏了

为了清洁起见,下面是我用来实例化chromedriver的测试代码:

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;

class Program {
    public static IWebDriver Instance { get; set; }
    static void Main (string[] args) {
        var driverService = ChromeDriverService.CreateDefaultService();      
        driverService.HideCommandPromptWindow = true;
        Instance = new ChromeDriver(driverService);

        Instance.Navigate().GoToUrl("http://www.nrk.no");
    }
}
注意:这正是我在VisualStudio2015中使用的一段代码,所以代码应该可以正常工作


我知道有些人认为手动添加chromedriver.exe更好,但我尝试了通过添加现有项目并复制更新的项目。那也不行;我遇到了相同的异常。

我遇到了相同的问题并修复了它。 首先,创建新项目时,需要选择C->.net或.net标准作为项目类型。
其次,创建新项目后,您可以使用nuget成功安装selenium webdriver。

我从您的评论中注意到您正在为.Net Core构建。我遇到了一个类似的问题,ChromeDriver.exe在生成后会出现在bin dir中,但它在使用dotnet publish的发布文件夹中不可用,因此当我使用publish部署时,ChromeDriver.exe不会从生成输出目录复制。如果您遇到相同的问题,或者如果您不喜欢您已经做过的工作并希望解决它,那么您可以像我一样:

编辑要生成的web驱动程序项目的项目文件,以设置名为PublishChromeDriver=true的属性。它看起来像这样:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
    <RuntimeIdentifiers>win-x64</RuntimeIdentifiers>
    <IsPackable>false</IsPackable>
    <OutputType>Library</OutputType>
    <ApplicationIcon />
    <StartupObject />
    <NeutralLanguage>en</NeutralLanguage>
    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>

    <!-- Add the following line -->
    <PublishChromeDriver>true</PublishChromeDriver>

  </PropertyGroup>
...
例如,我想您可以在build/publish命令行将属性设置为/p:PublishChromeDriver=true,以便通过Azure DevOps中的build/publish参数插入属性


关于与未发布的NuGet软件包中的文件相关的评论让我查看并在那里找到了它

我只想指出,据我所知,没有浏览器驱动程序可执行文件维护程序chromedriver.exe、geckodriver.exe、IEDriverServer.exe为其可执行文件提供并维护一个正式的NuGet包。NET绑定自动查找此类可执行文件的算法非常简单。如果指定了特定路径,请使用该路径。如果不是,请在与包含FileUtilities类的程序集相同的目录中查找可执行文件。如果没有找到,请在PATH环境变量的每个目录中查找。VS2017可能更改了在生成时复制文件的位置。您可以尝试将chromedriver.exe的copy local设置为true。如果这不起作用,请考虑添加一个POST生成命令,将ChrimDeReVel.EXE复制到Bin文件夹。可能是尝试在vs2017中添加nuget包并没有执行vs2015中所做的某些必要步骤,原因是包源在每种情况下都不同,或者脚本没有更新为目标vs2017。JimEvans:我正在使用一个小控制台项目来测试这一点,该项目仅实例化Selenium Webdriver并打开一个浏览器和url。chromedriver.exe在生成后位于以下文件夹中:C:\Source\Workspace\QA\Opus3FlowAutomation\SeleniumTest\bin\Debug\netcoreapp2.0。这是应该的,因为我正在调试。但是,它仍然声称找不到chromedriver.exe。