Не удается передать DesiredCapabilities конструктору ChromeDriver:s?


Когда я пытаюсь использовать

var dc = DesiredCapabilities.Chrome();
var driver = new ChromeDriver(dc);

Я получаю "не могу разрешить конструктор".

Похоже, что я должен пройти ChromeOptions вместо этого.

Почему?

Каждая отдельная страница учебника/справки по этому предмету предполагает, что я прохожу DesiredCapabilities.

Я использую селен.Вебдрайвер.ChromeDriver версии 2.21.0.0.

2 2

2 ответа:

Вы можете использовать ChromeOptions для установки любых конкретных параметров.

ChromeOptions options = new ChromeOptions();
options.AddArguments("--disable-extensions");
options.AddArguments("--start-maximized");
options.ToCapabilities();
ChromeDriverService service = ChromeDriverService.CreateDefaultService(Environment.GetEnvironmentVariable("USERPROFILE") + "\\Downloads");
IWebDriver chromeDriver = new ChromeDriver(service, options);

Вы можете использовать - options.ToCapabilities();, чтобы увидеть возможности.

Вы можете использовать ChromeOptions для установки любого конкретного типа возможностей - peter.sh/experiments/chromium-command-line-switches . Кажется, что желаемые возможности могут быть добавлены только в Java или если вы имеете дело с InternetExplorerDriver - Selenium c#: Как запустить драйвер Internet Explorer в конкретной версии (например, IE8)

Используя dotpeek и глядя на конструкторы chromedriver (которые имеют 7 перегрузок) 6 из них вызывают конструктор ниже на самом ChromeDriver

public ChromeDriver(ChromeDriverService service, ChromeOptions options, TimeSpan commandTimeout)
  : base((ICommandExecutor) new DriverServiceCommandExecutor((DriverService) service, commandTimeout), ChromeDriver.ConvertOptionsToCapabilities(options))
{
}

, который в свою очередь вызывает базовый конструктор на RemoteWebdriver. Это передается в последнем параметре как ChromeDriver.ConvertOptionsToCapabilities (options)

Глядя на это, вы можете увидеть следующее:

 private static ICapabilities ConvertOptionsToCapabilities(ChromeOptions options)
    {
      if (options == null)
        throw new ArgumentNullException("options", "options must not be null");
      return options.ToCapabilities();
    }

Затем в опции.ToCapabilities:

public override ICapabilities ToCapabilities()
{
  Dictionary<string, object> dictionary = this.BuildChromeOptionsDictionary();
  DesiredCapabilities desiredCapabilities = DesiredCapabilities.Chrome();
  desiredCapabilities.SetCapability(ChromeOptions.Capability, (object) dictionary);
  if (this.proxy != null)
    desiredCapabilities.SetCapability(CapabilityType.Proxy, (object) this.proxy);
  Dictionary<string, object> preferencesDictionary = this.GenerateLoggingPreferencesDictionary();
  if (preferencesDictionary != null)
    desiredCapabilities.SetCapability(CapabilityType.LoggingPreferences, (object) preferencesDictionary);
  foreach (KeyValuePair<string, object> additionalCapability in this.additionalCapabilities)
    desiredCapabilities.SetCapability(additionalCapability.Key, additionalCapability.Value);

Вы можете видеть, что под капотом он появляется его уже использование желаемых возможностей.Chrome () и вам не нужно передавать его. Возможно, учебники, которые вы видели, устарели?