无法将 DesiredCapabilities 传递给 ChromeDriver:s 构造函数?
Cannot pass DesiredCapabilities to ChromeDriver:s constructor?
当我尝试使用
var dc = DesiredCapabilities.Chrome();
var driver = new ChromeDriver(dc);
我得到 "Cannot resolve constructor"。
看来我必须通过ChromeOptions
。
为什么?
关于该主题的每个 tutorial/help 页都表明我通过了 DesiredCapabilities
。
我正在使用 Selenium.WebDriver.ChromeDriver 版本 2.21.0.0.
使用 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();
}
然后进入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() 并且您不需要将其传入。也许您看到的教程已经过时了?
您可以使用 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#: How to launch Internet Explorer driver in a specific version (IE8 for example)
当我尝试使用
var dc = DesiredCapabilities.Chrome();
var driver = new ChromeDriver(dc);
我得到 "Cannot resolve constructor"。
看来我必须通过ChromeOptions
。
为什么?
关于该主题的每个 tutorial/help 页都表明我通过了 DesiredCapabilities
。
我正在使用 Selenium.WebDriver.ChromeDriver 版本 2.21.0.0.
使用 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();
}
然后进入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() 并且您不需要将其传入。也许您看到的教程已经过时了?
您可以使用 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#: How to launch Internet Explorer driver in a specific version (IE8 for example)