【问题标题】:Enable Protected Mode must be set to the same value (enabled or disabled) for all zones所有区域的启用保护模式必须设置为相同的值(启用或禁用)
【发布时间】:2020-08-23 14:13:48
【问题描述】:

我正在尝试使用 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);

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

现在是否有一些新的或其他设置DesiredCapabilites 的方法来代替我使用的示例?

【问题讨论】:

    标签: c# internet-explorer selenium


    【解决方案1】:

    该设置将解决该问题,但会引入一些微妙的问题。你没有正确设置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);
    

    【讨论】:

    • 感谢阿兰的回答,非常有帮助。但是,如果没有它就无法工作,那么使用该选项怎么会是一个坏主意呢?
    • 它不需要该选项工作,您应该能够在IE中的每个区域设置保护模式,并且不需要使用该选项它应该工作。为什么 IEDriver 需要这个可以在这里找到:jimevansmusic.blogspot.co.uk/2012/08/… ...这有意义吗?
    • 我在每个区域都设置了保护模式,但仍然收到有关我本地站点安全证书的警告,我的问题是 Selenium 不会继续通过此警告。任何想法如何解决这个问题?
    • 只是确认一下,所有 4 个区域都关闭了吗? (互联网、本地 Intranet、可信站点、受限站点)。
    • 您是否收到 SSL 警告?如果是这样,那就不一样了。
    【解决方案2】:

    This blog postJim Evans(Selenium 贡献者)提供了围绕此异常的上下文的真正深入视图。我将在这里引用它以供后代使用:

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

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

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

    【讨论】:

    • 你知道我应该寻找哪个注册表项以编程方式更改它吗?
    【解决方案3】:

    我无法在我的系统上手动修改保护模式设置,因为它们已被禁用。但是下面用于更新注册表值的 VBA sn-p 对我有用。

    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扩展名保存并双击它!

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

    【讨论】:

      【解决方案4】:

      This Question and Answer 也可能对任何试图处理保护模式问题的人有用。我无法通过 Internet Explorer 选项窗格让它工作,最终不得不手动调整注册表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-24
        • 1970-01-01
        • 2014-12-28
        • 2012-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多