必须将启用保护模式设置为所有区域的相同值(启用或禁用)

时间:2012-11-14 17:15:06

标签: c# internet-explorer selenium

我正在尝试使用Selenium Internet Explorer驱动程序,但是当我尝试实例化它时,它正在崩溃:

[TestInitialize]
public void TestInitialise() {
  ieDriver = new InternetExplorerDriver();
}

出现以下错误:

  

启用保护模式必须设置为相同的值(启用或   禁用)适用于所有区域。 (NoSuchDriver)。

我找到了一个明显的问题解决方案here,建议设置驱动程序DesiredCapabilities,如下所示:

var capabilitiesInternet = new OpenQA.Selenium.Remote.DesiredCapabilities();
capabilitiesInternet.SetCapability("ignoreProtectedModeSettings", true);
IWebDriver webDriver = new InternetExplorerDriver(capabilitiesInternet);

唯一的问题是,我使用的是我能找到的最新版本的驱动程序,InternetExplorerDriver没有覆盖DesiredCapabilities作为参数。

现在是否有一些新的或其他方式设置DesiredCapabilites而不是我使用的示例?

4 个答案:

答案 0 :(得分:7)

该设置将解决问题,但会引入一些微妙的问题。你没有正确设置IE的保护模式吗?这是正确的解决方案。

此指南生活在这里:

https://github.com/SeleniumHQ/selenium/wiki/InternetExplorerDriver

基本上只需在IE中关闭每个区域的保护模式。

或者,如果你真的必须使用覆盖功能,那么你可以做两件事:

使用InternetExplorerOptions课程。请注意属性的名称,它为您提供了一个很好的线索,使用它不是一个好主意。

var options = new InternetExplorerOptions;
options.IntroduceInstabilityByIgnoringProtectedModeSettings = true;
var driver = new InternetEplorerDriver(options);

或使用RemoteWebDriver,它可以接受ICapabilities实现的DesiredCapabilites接口的任何实现:

var capabilities = new DesiredCapabilities("internet explorer", string.Empty, new Platform(PlatformType.Windows));
capabilities.SetCapability("ignoreProtectedModeSettings", true);
var webDriver = new RemoteWebDriver(capabilities);

答案 1 :(得分:0)

This blog post({Selenium撰稿人)的

Jim Evans可以深入了解此异常的上下文。我将在这里引用它作为后代:

在IE中,从“工具”菜单(或更高版本工具栏中的齿轮图标)中选择“" Internet选项”。转到“安全”选项卡。在每个区域的对话框底部,您应看到一个标有"启用保护模式的复选框。"将复选框的值设置为每个区域的相同值(选中或取消选中)。这是参考对话框:

Internet Explorer Security Settings Dialog

请注意,您不必更改安全级别的滑块,也不必禁用保护模式。我经常为所有区域打开保护模式,因为我认为它提供了更安全的浏览体验。

注意:这仅在关闭保护模式时对我有效。

答案 2 :(得分:0)

由于禁用了我的系统,因此我无法在其上手动修改保护模式设置。但是下面的用于更新注册表值的VBA代码片段对我有用。

Const HKEY_CURRENT_USER = &H80000001
strComputer = "."

Set ScriptMe=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
    strComputer & "\root\default:StdRegProv")

'Disable protected mode for local intranet'
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\1\"
strValueName = "2500"
dwValue = 0
ScriptMe.SetDWORDValue HKEY_CURRENT_USER,strKeyPath,strValueName,dwValue

'Disable protected mode for trusted pages'
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\2\"
strValueName = "2500"
dwValue = 0
ScriptMe.SetDWORDValue HKEY_CURRENT_USER,strKeyPath,strValueName,dwValue

'Disable protected mode for internet'
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\"
strValueName = "2500"
dwValue = 0
ScriptMe.SetDWORDValue HKEY_CURRENT_USER,strKeyPath,strValueName,dwValue

'Disable protected mode for restricted sites'
strKeyPath = "Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\4\"
strValueName = "2500"
dwValue = 0
ScriptMe.SetDWORDValue HKEY_CURRENT_USER,strKeyPath,strValueName,dwValue

msgbox "Protected Mode Settings are updated"

只需将上面的代码复制粘贴到记事本中,并以.vbs扩展名保存并双击即可!

现在尝试再次运行自动化脚本

答案 3 :(得分:-1)

对于试图处理保护模式问题的任何人来说,

This Question and Answer也可能有用。我无法通过Internet Explorer选项窗格使其工作,最终必须手动调整注册表。