Отношения ChromeOptions и DesiredCapabilities в Selenium и C#

Я искал правильную документацию о том, как использовать ChromeOptions и DesiredCapabilities в атмосфере Selenium и C#, но, поскольку все это с открытым исходным кодом, я нахожу только предложения (и они иногда не помогают). Сегодня мой вопрос заключается в том, как настроить правильное соотношение между ChromeOptions и DesiredCapabilities. Вроде все делаю правильно, но все равно получаю System.InvalidOperationException: unknown error:cannot parse capability: chromeOptions from unknown error: unrecognized chrome option:Arguments Мой код следующий:

 private static ChromeOptions Ops()
        {
            var options = new ChromeOptions();
            options.AddArgument("--no-startup-window");
            options.BinaryLocation = @"C:\path\path\path\chromedriver.exe";
            return options;
        }
  private static DesiredCapabilities Caps()
        {
            DesiredCapabilities caps = new DesiredCapabilities();
            caps.SetCapability(CapabilityType.BrowserName, "chrome");
            caps.SetCapability(ChromeOptions.Capability,Ops().ToCapabilities());
            return caps;
        }
IWebDriver driver = new RemoteWebDriver(new Uri("http://localhost:4444/wd/hub"), Caps());

Не могу найти место, где передаются некорректные аргументы. Кто-нибудь сталкивался с такими же проблемами? Это версия ChromeDriver 2.28 и selenium WebDriver v 3.3.0, версия браузера Google Chrome — 52.


person President    schedule 21.03.2017    source источник
comment
Попробуйте caps.SetCapability(ChromeOptions.Capability,Ops()); вместо преобразования в возможности.   -  person Mark Lapierre    schedule 22.03.2017
comment
@MarkLapierre Это не сработало. Я вижу то же сообщение об ошибке.   -  person President    schedule 29.03.2017


Ответы (1)


Вам не нужно устанавливать имя браузера; ChromeOptions сделает это за вас.

Согласно этому комментарию

Привязки .NET движутся к шаблону, в котором DesiredCapabilites не следует использовать напрямую, даже с RemoteWebDriver. Для этого в классе ChromeOptions есть метод ToCapabilities().

И есть этот комментарий

Как и --disable-javascript, chromedriver не будет работать, если вы используете --no-startup-window. Ему нужно запустить окно, чтобы установить соединение с AutomationProxy.

Итак, это приводит нас к следующему:

var options = new ChromeOptions();
options.BinaryLocation = @"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe";

IWebDriver driver = new RemoteWebDriver(new Uri("http://localhost:4444/wd/hub"), options.ToCapabilities());

Однако вы на самом деле используете сетку? Если вы тестируете на одной машине, все еще проще:

IWebDriver driver = new ChromeDriver();
person Mark Lapierre    schedule 29.03.2017