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

标签 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.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");
    }
}

注意:这是我在 Visual Studio 2015 中使用的代码的一部分,因此代码应该可以正常工作。

而且我知道有些人认为手动添加 chromedriver.exe 更好,但我尝试过 - 通过添加 - 现有项目(如果更新,则复制)。这也行不通;我得到同样的异常(exception)。

最佳答案

我从您的评论中注意到您正在为 .Net Core 构建。我遇到了一个类似的问题,即 ChromeDriver.exe 在构建后最终会出现在 bin 目录中,但它在使用 dotnet publish 的发布文件夹中不可用,因此当我使用发布进行部署时,ChromeDriver.exe 不会被复制从构建输出目录。如果您遇到同样的问题,或者如果您不喜欢已经做过的变通方法并想要修复它,那么您可以按照我的方法进行操作:

编辑您正在构建的 Web 驱动程序项目的项目文件以设置名为 的属性。发布ChromeDriver = 真的。它看起来像这样:

<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>
...

我想您可以在构建/发布命令行中将属性设置为 /p:PublishChromeDriver=true (例如,应该可以通过 Azure DevOps 中的构建/发布参数插入属性)。

this NuGet issue上的评论与未发布的 NuGet 包中的文件相关的问题让我查看了 ChromeDriver targets file并在那里找到它。

关于selenium-webdriver - VS 2017 和 Selenium.Webdriver NuGet : chromedriver. exe 未找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49730210/

相关文章:

java - 无法使用 java 选择 Selenium Webdriver 中的复选框

javascript - Visual Studio ReSharper - 在外部模块中声明的 Typescript 自动导入类 - 使用 from 而不是 require

c# - 使用旧解决方案将 nuget 包添加到 .net 核心项目时如何修复 $(NETStandardImplicitPackageVersion) 错误?

google-chrome - 如何从 Xvfb 获取显示中的所有进程?

java - Chrome 正在被自动化测试软件控制

java - Selenium 测试失败 "Element is not clickable at..."

java - 在 Java 中使用 Selenium 单击按钮

html - Visual Studio 2017 html 标签选择器

selenium - 使用 selenium 网格进行并行测试时,如何创建文件夹(每个浏览器使用)?

javascript - 如何使用 Selenium webdriver .NET 通过 JavaScript 更改元素的值