如何在使用Selenium中的IEDriverServer时避免“Protected Mode”问题?

3
我试图使用Internet Explorer(我的情况是8)通过Jenkins执行Selenium测试。我知道为使此功能正常工作,必须设置“受保护模式”互联网安全选项的所有站点区域的值(启用或停用)相同。
我尝试在浏览器中进行设置(确保我以执行Jenkins测试的相同用户身份登录),也通过GPO策略对“本地计算机策略\计算机配置\管理模板\Windows组件\Internet Explorer\Internet控制面板\安全页面”和“本地计算机策略\用户配置\管理模板\Windows组件\Internet Explorer\Internet控制面板\安全页面”的所有站点区域进行了设置。
然而,我仍然收到下面列出的错误:
“意外错误启动Internet Explorer。未为所有区域设置受保护模式设置。所有区域都必须设置为相同的启用或禁用。”
有人可以指点我正确的方向以解决这个问题吗?
2个回答

8
(如果有其他人从搜索中来到这里,我会发布自己的问题答案。)
为了最终解决这个问题,我必须做两件事:
首先,验证您的“启用保护模式”设置在“计算机配置”和“用户配置”中完全相同。我认为实际上并不重要设置是启用/禁用还是保护模式启用/禁用,只要所有设置(在计算机配置下有11个,在用户配置下也有11个)都是相同的。
最快的方法是使用组策略编辑器验证是否已配置所有适当的设置。
要执行此操作,请打开本地组策略编辑器(开始/运行/gpedit.msc),然后导航到“本地计算机策略\计算机配置\管理模板\所有设置”节点。按设置排序(如果尚未完成),然后向下滚动,直到看到一堆“启用保护模式”设置。
将每个设置配置为相同的值。在我的情况下,我最初将它们全部设置为启用,并禁用保护模式,但是一旦我最终找到了注册表更改(请参见下文),我回去将所有东西都设置为“未配置”,我的解决方案仍然有效。主要的重点是使它们完全相同。

然后,针对“本地计算机策略\用户配置\管理模板\所有设置”节点重复此过程。

完成后,您的所有受保护模式设置应该相同。注意:如果您使用一个用户来执行测试,另一个用户进行系统管理,请对两个用户都进行操作以防万一。(在我的设置中出现了问题,所以我不确定是否需要这样做,但这不会有害。)

其次,调整注册表设置。 导航到“HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones”。对于每个子键(0、1、2、3、4),找到名为“2500”的DWORD。如果不存在,请创建。同样,将值设置为5个区域的完全相同。我使用的是“0”,即启用。我认为“3”是禁用。

针对使用IEDriverServer.exe的用户,重复此过程,访问“HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones”。

更新注册表后,重新启动计算机。

在手动调整设置或通过GPO进行调整多个小时后,按照这两个步骤解决了我的问题。其他人似乎用过其中一种方法成功了,但在我的环境中(在两个不同的Jenkins从机上复制并修复)使用注册表编辑是唯一有效的方法。

注意:我正在使用一个命名用户帐户来操纵IEDriverServer以供Jenkins使用。如果您将测试作为“本地系统”用户执行,则可能需要查看this answer以获取进一步的说明/故障排除。


2
我使用了“0”,它是启用的。我相信“3”是禁用的。这完全正确。也帮助了我们度过难关,非常感谢! - Master of Celebration

0
You can use the following code to except the security :

    try
      {
       driver.navigate().to("javascript:document.getElementById('overridelink').click()");
      }

 catch (Exception e) {
                 // do nothing as this exception is expected if no security ssl cert issue
             }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接