簡體   English   中英

無法將DesiredCapabilities傳遞給ChromeDriver:s構造函數?

[英]Cannot pass DesiredCapabilities to ChromeDriver:s constructor?

當我嘗試使用時

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

我得到“無法解析構造函數”。

好像我必須通過ChromeOptions

為什么?

關於該主題的每個教程/幫助頁面都表明我通過了DesiredCapabilities

我使用的是Selenium.WebDriver.ChromeDriver 2.21.0.0版。

您可以使用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。 似乎DesiredCapabilities只能在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(選項)

看着你可以看到這個:

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

然后進入options.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);

你可以看到它已經使用了DesiredCapabilities.Chrome(),你不需要傳入它。也許你看過的教程已經過時了?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM