ChromeDriver не существует в тестовом скрипте Selenium WebDriver C # - PullRequest
30 голосов
/ 01 февраля 2012

Я сталкивался с несколькими людьми с той же проблемой, которая, казалось, решила проблему с System.addProperty("webdriver.chrome.driver", ".../chromedriver.exe"); до создания экземпляра драйвера.

Мне немного не повезло с этим, и я все еще получаю ошибку, котораяфайл .../bin/Debug/chromedriver.exe не существует.

Кому-нибудь повезло, если запустить его, не поместив в папку bin?

Пример кода:

System.Environment.SetEnvironmentVariable("webdriver.chrome.driver", @"c:\path\to\driver\chromedriver.exe");
BrowserDriver = new ChromeDriver();

Ответы [ 9 ]

65 голосов
/ 03 февраля 2012

Поскольку вы используете C #, вы должны использовать перегрузку конструктора для ChromeDriver, которая позволяет вам указать путь к каталогу, содержащему chromedriver.exe.Для остроумия:

IWebDriver driver = new ChromeDriver(@"C:\my\path\to\chromedriver\directory");
27 голосов
/ 09 августа 2016

Старый вопрос, новый ответ (для чего это стоит): просто установите пакет Nuget Selenium.WebDriver.ChromeDriver.Chromedriver.exe будет находиться в каталоге bin / debug при следующей сборке.

Редактирование третьей стороной 2017-09

На этой странице github jsakamoto / nupkg-selenium-webdriver-chromedriver/ что после запуска Install-Package Selenium.WebDriver -Version 3.5.2 хроматический драйвер (.exe) находится под этой папкой

"{папка решения} /packages/Selenium.WebDriver.ChromeDriver. {ver} / driver / {платформа} "

15 голосов
/ 05 марта 2018

Возможно, это связано с тем, что пакеты NuGet загружаются из глобального места, а не из папки пакетов проектов .NET Framework. Это сработало для меня:

IWebDriver driver = new ChromeDriver(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
6 голосов
/ 21 декабря 2017
you may have enum for your all drivers : 
  public enum Drivers
    {
        Chrome,
        Firefox,
        Safari,
        Edge,
        IE
    }


  public static IWebDriver GetDriver(Drivers driver)
        {

outPutDirectory -> - это место, куда копируются все поддерживаемые dll и файлы при сборке решения. пример: C: \ Users \ Mike \ source \ repos \ Automation \ Automation \ bin \ Debug

     var outPutDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
     // below is my location where I copied all drivers like chromedriver.exe 

lativePath -> это папка, которая копируется при сборке решения пример: C: \ Users \ Mike \ source \ repos \ Automation \ Automation \ bin \ Debug \ BrowserDriver

        var relativePath = @"..\..\bin\Debug\BrowserDriver"; 

// Таким образом, chromeDriverPath сообщит вам точное местоположение вашего драйвера независимо от того, на каком компьютере или компьютере вы работаете. Automation

       var chromeDriverPath = Path.GetFullPath(Path.Combine(outPutDirectory,relativePath));
    // return this driver , just debug this code and check the "outPutDirectory" path
       return new ChromeDriver(chromeDriverPath);
   }
3 голосов
/ 10 марта 2019

Установите Selenium.WebDriver.ChromeDriver из NuGet, и тогда вы можете сделать следующее:

IWebDriver driver = new ChromeDriver(Environment.CurrentDirectory);
3 голосов
/ 05 октября 2017

Я обнаружил, что хотя пакет Selenium.WebDriver.ChromeDriver NuGet был загружен, и, следовательно, файл chromedriver.exe копировался в папку bin во время компиляции, дополнительно его нужно было пометить как элемент развертывания (поскольку он модульный тест, который был скопирован в папку / запущен из папки TestResults) - т.е.

[DeploymentItem (@ "chromedriver.exe")]

2 голосов
/ 06 марта 2019

Это было сложно выделить - ключ находится в источнике nuget, который содержит Selenium.WebDriver.ChromeDriver.targets - цели требуют явного назначения свойств, поэтому chromedriver.exe никогда не копируется в каталог развертывания vstest.console,Вот исправление, которое нужно добавить в ваш файл CSPROJ:

Назначить PublishChromeDriver Свойство в CSPROJ

  <PropertyGroup>
    <AssemblyName>MyUX.Tests</AssemblyName>
     <!-- ... -->
    <PublishChromeDriver>True</PublishChromeDriver>
  </PropertyGroup>

После того, как это свойство определено, копия chromedriver.exe будет скопирована в /bin для vstest.console.Это исправляет ошибку, которую мы получали:

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

Альтернативный подход - принудительное копирование в CSPROJ

  <Target Name="CopyChromeDriverToBin" BeforeTargets="AfterBuild">
    <Copy SourceFiles="$(ChromeDriverSrcPath)" DestinationFiles="$(TargetDir)$(ChromeDriverName)" SkipUnchangedFiles="true">
    </Copy>
  </Target>
1 голос
/ 19 апреля 2019

Если вы используете Atata и .Net Core, см. Эту страницу: https://atata.io/getting-started/#dot-net-core-configuration

 AtataContext.Configure()
                .UseChrome()
                .WithFixOfCommandExecutionDelay()
                .WithLocalDriverPath()
                .UseCulture("en-us")
                .Build();

Вот строки, которые вы хотите убедиться:

.UseChrome()
.WithFixOfCommandExecutionDelay()
.WithLocalDriverPath()
1 голос
/ 25 марта 2014

Это ошибка, которую я вижу: OpenQA.Selenium.DriverServiceNotFoundException: файл chromedriver.exe не существует ни в текущем каталоге, ни в каталоге переменной среды PATH.

Я решил эту проблему, указав аргумент 'testsettings' в команде для запуска модульных тестов.

1007 * Е.Г. *

E:\Development\SampleProject\SampleProject.MvcWebApp\SampleProject.MvcWebApp.JavaScriptUnitTests\JavaScriptUnitTests\bin\Debug>"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\mstest.exe" /testcontainer:JavaScriptUnitTests.dll /category:"JavaScriptUnitTests" /testsettings:..\..\..\Local.Testsettings /resultsfile:..\..\..\..\..\MsTestResults\SampleProject.MvcWebApp.JavaScript.Tests.trx

Я использую "/testsettings:......\Local.Testsettings", потому что файл Local.testsettings на 4 уровня выше уровня, в котором я выполняю эту команду. Вы должны изменить его соответственно.

Эта команда используется в файле ccnet.config

<exec>
    <executable>C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\mstest.exe</executable>
    <baseDirectory>SampleProject.MvcWebApp\SampleProject.MvcWebApp.JavaScriptUnitTests\JavaScriptUnitTests\bin\Debug</baseDirectory>
    <buildArgs>/testcontainer:JavaScriptUnitTests.dll /category:"JavaScriptUnitTests" /testsettings:..\..\..\Local.Testsettings /resultsfile:..\..\..\..\..\MsTestResults\SampleProject.MvcWebApp.JavaScript.Tests.trx</buildArgs>
    <successExitCodes>0</successExitCodes>
</exec>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...