ChromeDriver не существует в тестовом скрипте Selenium WebDriver C #

nth-of-type работает в соответствии с индексом того же типа элемента, но nth-child работает только в соответствии с индексом независимо от того, какой тип элементов сиблингов.

Например

<div class="one">...</div>
<div class="two">...</div>
<div class="three">...</div>
<div class="four">...</div>
<div class="five">...</div>
<div class="rest">...</div>
<div class="rest">...</div>
<div class="rest">...</div>
<div class="rest">...</div>
<div class="rest">...</div>

Предположим, что в выше html мы хотим скрыть все элементы, имеющие класс отдыха.

В этом случае nth-child и nth-of-type будут работать точно так же, как и все элементы одного типа, <div>, поэтому css должен быть

.rest:nth-child(6), .rest:nth-child(7), .rest:nth-child(8), .rest:nth-child(9), .rest:nth-child(10){
    display:none;
}

OR

.rest:nth-of-type(6), .rest:nth-of-type(7), .rest:nth-of-type(8), .rest:nth-of-type(9), .rest:nth-of-type(10){
    display:none;
}

Теперь вам должно быть интересно узнать, в чем разница между nth-child и nth-of-type, так что это разница

Предположим, что html is

<div class="one">...</div>
<div class="two">...</div>
<div class="three">...</div>
<div class="four">...</div>
<div class="five">...</div>
<p class="rest">...</p>
<p class="rest">...</p>
<p class="rest">...</p>
<p class="rest">...</p>
<p class="rest">...</p>

В приведенном выше html тип элемента .rest отличается от других .rest - это абзацы, а другие - div, поэтому в этом случае if вы используете nth-child, вы должны писать так

.rest:nth-child(6), .rest:nth-child(7), .rest:nth-child(8), .rest:nth-child(9), .rest:nth-child(10){
    display:none;
}

, но если вы используете nss-тип css, это может быть

.rest:nth-of-type(1), .rest:nth-of-type(2), .rest:nth-of-type(3), .rest:nth-of-type(4), .rest:nth-of-type(5){
    display:none;
}

Как тип Элементом .rest является <p>, поэтому здесь nth-of-type обнаруживает тип .rest, а затем он накладывает css на 1-й, 2-й, 3-й, 4-й, 5-й элементы <p>.

29
задан Ripon Al Wasim 19 May 2017 в 13:34
поделиться

9 ответов

Старый вопрос, новый ответ (для чего это стоит): просто установите пакет 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 / {platform}"

24
ответ дан surfmuggle 19 May 2017 в 13:34
поделиться

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

[DeploymentItem (@ "chromedriver.exe")]

3
ответ дан TerrorBight 19 May 2017 в 13:34
поделиться

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

IWebDriver driver = new ChromeDriver(@"C:\my\path\to\chromedriver\directory");
64
ответ дан JimEvans 19 May 2017 в 13:34
поделиться
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);
   }
6
ответ дан meJustAndrew 19 May 2017 в 13:34
поделиться

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

IWebDriver driver = new ChromeDriver(Environment.CurrentDirectory);
3
ответ дан mr.coffee 19 May 2017 в 13:34
поделиться

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

IWebDriver driver = new ChromeDriver(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
13
ответ дан Harun Davood 19 May 2017 в 13:34
поделиться

Это было сложно выделить - ключ находится в источнике 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>
2
ответ дан SliverNinja - MSFT 19 May 2017 в 13:34
поделиться

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

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

, например,

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>
.
1
ответ дан Ali Lane 19 May 2017 в 13:34
поделиться

Если вы используете 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
ответ дан Rafe 19 May 2017 в 13:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: