Не удается передать DesiredCapabilities конструктору ChromeDriver:s?
Когда я пытаюсь использовать
var dc = DesiredCapabilities.Chrome();
var driver = new ChromeDriver(dc);
Я получаю "не могу разрешить конструктор".
Похоже, что я должен пройти ChromeOptions
вместо этого.
Почему?
Каждая отдельная страница учебника/справки по этому предмету предполагает, что я прохожу DesiredCapabilities
.
Я использую селен.Вебдрайвер.ChromeDriver версии 2.21.0.0.
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 () и вам не нужно передавать его. Возможно, учебники, которые вы видели, устарели?