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()