![](/img/trans.png)
[英]Selenium C# chromedriver with DesiredCapabilities
[英]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.