无法使用 C# 使用 Selenium WebDriver 在隐身模式下启动 Chrome
Unable to launch Chrome in incognito mode using Selenium WebDriver using C#
我正在尝试在隐身模式下使用 Selenium WebDriver 启动 Chrome,但无法完成。我尝试了所有选项但无法启动。下面是我的代码片段
case "chrome":
ChromeOptions options = new ChromeOptions();
options.AddArgument("--incognito"); //Line XYZ
desiredCapabilities = DesiredCapabilities.Chrome();
desiredCapabilities.SetCapability(ChromeOptions.Capability, options);
break;
var capabilities = BuildDesiredCapabilities();
webDriver = new RemoteWebDriver(new Uri(gridHubURL), capabilities,
TimeSpan.FromSeconds(ApplicationConfiguration.RemoteDriverTimeOutValue));
谁能帮我解决我做错了什么?我还在 XYZ 行
中尝试了以下代码选项
任何指点都会很有帮助。
编辑1
请在此处找到更新后的代码。
public IWebDriver CreateDriver()
{
var capabilities = BuildDesiredCapabilities();
webDriver = new RemoteWebDriver(new Uri(gridHubURL), capabilities,
TimeSpan.FromSeconds(ApplicationConfiguration.RemoteDriverTimeOutValue));
webDriver.Manage().Window.Maximize();
webDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(ApplicationConfiguration.TimeOutValue));
webDriver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(ApplicationConfiguration.TimeOutValue));
return webDriver;
}
private DesiredCapabilities BuildDesiredCapabilities()
{
DesiredCapabilities desiredCapabilities;
switch (browserName.ToLower())
{
case "firefox":
desiredCapabilities = DesiredCapabilities.Firefox();
break;
case "chrome":
desiredCapabilities = DesiredCapabilities.Chrome();
desiredCapabilities.SetCapability("chrome.switches", "--incognito");
break;
case "ie":
desiredCapabilities = DesiredCapabilities.InternetExplorer();
desiredCapabilities.SetCapability("ie.ensureCleanSession", true);
break;
default:
desiredCapabilities = DesiredCapabilities.Firefox();
break;
}
return desiredCapabilities;
}
您应该像这样将参数传递给可执行文件:
desiredCapabilities = DesiredCapabilities.Chrome();
desiredCapabilities.SetCapability("chrome.switches", "--incognito");
因此,将参数 --incognito
传递给 chrome.switches
功能应该可行。
注意:
chrome.switches
功能已被弃用两年多了。当前支持的功能列表可以在官方 chromedriver Google Sites page 找到。此外,Selenium 项目一段时间以来一直不鼓励使用任意功能,尤其是在使用 .NET 绑定时
.NET 绑定引入了特定于浏览器的 Options
classes 以避免必须知道或理解任意功能值。您在原始代码中使用了这样的 class、ChromeOptions
。但是,您错过了关于如何将 ChromeOptions
class 与 RemoteWebDriver
一起使用的额外步骤。缺少的部分是您应该使用 ToCapabilities()
方法将 ChromeOptions
对象转换为 RemoteWebDriver
期望的 ICapabilities
对象。您的代码如下所示:
var options = new ChromeOptions();
options.AddArgument("incognito");
var capabilities = options.ToCapabilities();
var driver = new RemoteWebDriver(new URI(gridHubURL), capabilities);
我正在尝试在隐身模式下使用 Selenium WebDriver 启动 Chrome,但无法完成。我尝试了所有选项但无法启动。下面是我的代码片段
case "chrome":
ChromeOptions options = new ChromeOptions();
options.AddArgument("--incognito"); //Line XYZ
desiredCapabilities = DesiredCapabilities.Chrome();
desiredCapabilities.SetCapability(ChromeOptions.Capability, options);
break;
var capabilities = BuildDesiredCapabilities();
webDriver = new RemoteWebDriver(new Uri(gridHubURL), capabilities,
TimeSpan.FromSeconds(ApplicationConfiguration.RemoteDriverTimeOutValue));
谁能帮我解决我做错了什么?我还在 XYZ 行
中尝试了以下代码选项任何指点都会很有帮助。
编辑1 请在此处找到更新后的代码。
public IWebDriver CreateDriver()
{
var capabilities = BuildDesiredCapabilities();
webDriver = new RemoteWebDriver(new Uri(gridHubURL), capabilities,
TimeSpan.FromSeconds(ApplicationConfiguration.RemoteDriverTimeOutValue));
webDriver.Manage().Window.Maximize();
webDriver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(ApplicationConfiguration.TimeOutValue));
webDriver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(ApplicationConfiguration.TimeOutValue));
return webDriver;
}
private DesiredCapabilities BuildDesiredCapabilities()
{
DesiredCapabilities desiredCapabilities;
switch (browserName.ToLower())
{
case "firefox":
desiredCapabilities = DesiredCapabilities.Firefox();
break;
case "chrome":
desiredCapabilities = DesiredCapabilities.Chrome();
desiredCapabilities.SetCapability("chrome.switches", "--incognito");
break;
case "ie":
desiredCapabilities = DesiredCapabilities.InternetExplorer();
desiredCapabilities.SetCapability("ie.ensureCleanSession", true);
break;
default:
desiredCapabilities = DesiredCapabilities.Firefox();
break;
}
return desiredCapabilities;
}
您应该像这样将参数传递给可执行文件:
desiredCapabilities = DesiredCapabilities.Chrome();
desiredCapabilities.SetCapability("chrome.switches", "--incognito");
因此,将参数 --incognito
传递给 chrome.switches
功能应该可行。
注意:
chrome.switches
功能已被弃用两年多了。当前支持的功能列表可以在官方 chromedriver Google Sites page 找到。此外,Selenium 项目一段时间以来一直不鼓励使用任意功能,尤其是在使用 .NET 绑定时
.NET 绑定引入了特定于浏览器的 Options
classes 以避免必须知道或理解任意功能值。您在原始代码中使用了这样的 class、ChromeOptions
。但是,您错过了关于如何将 ChromeOptions
class 与 RemoteWebDriver
一起使用的额外步骤。缺少的部分是您应该使用 ToCapabilities()
方法将 ChromeOptions
对象转换为 RemoteWebDriver
期望的 ICapabilities
对象。您的代码如下所示:
var options = new ChromeOptions();
options.AddArgument("incognito");
var capabilities = options.ToCapabilities();
var driver = new RemoteWebDriver(new URI(gridHubURL), capabilities);