ChromeDriver не существует в тесте Selenium WebDriver С# script

Я столкнулся с несколькими людьми с той же проблемой, которая, казалось, решила проблему с 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();

Ответы

Ответ 1

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

IWebDriver driver = new ChromeDriver(@"C:\my\path\to\chromedriver\directory");

Ответ 2

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

Стороннее редактирование 2017-09

На этой GitHub странице jsakamoto/nupkg-селеном WebDriver-chromedriver/, что после запуска Install-Package Selenium.WebDriver -Version 3.5.2 на chromedriver (.exe) лежит ниже этой папки

"{папка решения}/packages/Selenium.WebDriver.ChromeDriver. {ver}/driver/{platform}"

Ответ 3

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

IWebDriver driver = new ChromeDriver(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));

Ответ 4

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 даст вам точное местоположение вашего драйвера, независимо от того, на каком компьютере или компьютере вы работаете.

       var chromeDriverPath = Path.GetFullPath(Path.Combine(outPutDirectory,relativePath));
    // return this driver , just debug this code and check the "outPutDirectory" path
       return new ChromeDriver(chromeDriverPath);
   }

Ответ 5

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

[DeploymentItem (@ "chromedriver.exe" )]

Ответ 6

Это было непросто выделить - ключ находится в источнике nuget, который содержит Selenium.WebDriver.ChromeDriver.targets - цели требуют явного присвоения свойств, поэтому chromedriver.exe никогда не копируется в vstest.console развертывания 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>

Ответ 7

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

IWebDriver driver = new ChromeDriver(Environment.CurrentDirectory);

Ответ 8

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

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

например.

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>

Ответ 9

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

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

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

.UseChrome()
.WithFixOfCommandExecutionDelay()
.WithLocalDriverPath()