【问题标题】:Not able to launch IE browser using Selenium2 (Webdriver) with Java无法使用 Selenium2 (Webdriver) 和 Java 启动 IE 浏览器
【发布时间】:2013-02-19 07:47:14
【问题描述】:

我无法启动 IE 浏览器来运行我用 Java 编写的 selenium 自动化测试。我使用的是 Windows 7 和 IE 9。下面是我的代码:

请找附件

public class GoogleNews {
    private WebDriver driver;
    private String baseUrl;
    private StringBuffer verificationErrors = new StringBuffer();
    ArrayList al = new ArrayList();
    @Before
    public void setUp() throws Exception {
        //driver = new FirefoxDriver();
        driver =new InternetExplorerDriver();
        baseUrl = "https://news.google.co.in/";

    }

    @Test
    public void testApple() throws Exception {
        driver.get(baseUrl);
    }
}

【问题讨论】:

  • 你能把代码复制粘贴到这里吗?
  • 我在控制台中收到此消息 - “已启动 InternetExplorerDriver 服务器(64 位)2.30.0.0 正在侦听端口 27576”
  • 以上是一条Info Message。收到后会发生什么?
  • Manigandan - 浏览器未打开。
  • org.openqa.selenium.remote.SessionNotFoundException:启动 Internet Explorer 时出现意外错误。并非所有区域的保护模式设置都相同。必须将所有区域的启用保护模式设置为相同的值(启用或禁用)。 (警告:服务器未提供任何堆栈跟踪信息)命令持续时间或超时:1.18 秒构建信息:版本:'2.30.0',修订:'dc1ef9c',时间:'2013-02-19 00:15:57'系统信息:os.name:'Windows 7',os.arch:'x86',os.version:'6.1',java.version:'1.7.0'

标签: java internet-explorer selenium-webdriver


【解决方案1】:

它需要在所有区域中设置相同的安全级别。为此,请按照以下步骤操作:

  1. 打开 IE
  2. 转到工具 -> Internet 选项 -> 安全
  3. 将所有区域(Int​​ernet、本地 Intranet、受信任站点、受限站点)设置为相同的保护模式,启用或禁用都无关紧要。

最后,通过右键单击右上角的齿轮并启用状态栏,将缩放级别设置为 100%。 默认缩放级别现在显示在右下方。

【讨论】:

  • 我仍然看不到它对我有用。我使用的是 Win7 和 IEDriverServer_x64_2.43.0,即使按照您的说明操作也会出现此错误。错误是“org.openqa.selenium.remote.SessionNotFoundException:启动 Internet Explorer 时出现意外错误。”
  • 通过此链接:linkedin.com/pulse/…
  • 企业安全通常不允许您更改所有区域的默认安全级别。这样做可能会使您的系统容易受到攻击。将IntroduceInstabilityByIgnoringProtectedModeSettings 设置为true 是正确的方法。请参阅下面的答案。
【解决方案2】:

正如堆栈跟踪所说,您需要将 IE 中所有区域的保护模式设置设置为相同。在这里阅读原因:http://jimevansmusic.blogspot.in/2012/08/youre-doing-it-wrong-protected-mode-and.html

以及来自同一链接的快速操作方法:“在 IE 中,从工具菜单(或更高版本的工具栏中的齿轮图标)中,选择“Internet 选项”。转到“安全”选项卡。在底部在每个区域的对话框中,您应该会看到一个标有“启用保护模式”的复选框。将复选框的值设置为相同的值,为每个区域选中或取消选中”

【讨论】:

  • +1。比接受的答案要好得多,因为链接的博客文章解释了为什么 - 以及为什么应该将所有区域设置为受保护(接受的答案可能会误导您关闭保护模式)
【解决方案3】:

以下 WebDriver Java 代码的 sn-p 应该可以启动 IE。该代码将忽略 IE 浏览器中所有区域的保护模式设置设置。

DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
File file = new File("D:\\Ripon Al Wasim\\IEDriverServer.exe");
System.setProperty("webdriver.ie.driver", file.getAbsolutePath());
WebDriver driver = new InternetExplorerDriver(capabilities);
driver.get("https://www.google.com/");

下载 IEDriverServer 并将其解压缩到您想要的位置并设置绝对路径(在我上面的示例中是“D:\Ripon Al Wasim\IEDriverServer.exe”)

【讨论】:

  • 请勿使用 INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS。允许人们在无法正确配置浏览器的锁定环境中运行测试是一种黑客行为。使用此设置将产生随机故障和总体不稳定。永远不要理所当然地使用它。
  • 使用上述代码不需要为所有区域的保护模式设置配置相同的级别(启用/禁用)。
  • 我不小心在我的代码中使用了 INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS。我现在如何禁用它?
【解决方案4】:

IEDriverServer.exe不要使用绝对路径,最好根据项目使用相对路径。

        DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
        capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
        File fil = new File("iDrivers\\IEDriverServer.exe");
        System.setProperty("webdriver.ie.driver", fil.getAbsolutePath());
        WebDriver driver = new InternetExplorerDriver(capabilities);        
        driver.get("https://www.irctc.co.in");          

【讨论】:

    【解决方案5】:
    1. 转到IE->Tools->Internet Options
    2. 转到“安全”选项卡。
    3. 为所有(Internet、本地 Intranet、受信任站点和受限站点)启用/禁用保护模式。

    【讨论】:

      【解决方案6】:

      想要分享实际代码,因为可能仍然很少有人对如何实现它感到困惑。这是针对 C# NUNIT 实现的。您需要这样做,因为您的公司可能出于显而易见的原因不允许您更改默认安全设置。祝你好运!

      InternetExplorerOptions options = new InternetExplorerOptions();
                  options.IntroduceInstabilityByIgnoringProtectedModeSettings = true;
                  options.IgnoreZoomLevel = true;
                  driver = new
                      InternetExplorerDriver("C:\\Users\\stdd\\Desktop\\SLL\\SLLAutomation" +
                      "\\Clysis\\STGSearch\\STGClaSearch\\Driver\\", options);
                  driver.Manage().Window.Maximize();
      

      【讨论】:

        【解决方案7】:

        对于 NightwatchJS 使用:

        "ie" : {
          "desiredCapabilities": {
            "browserName": "internet explorer",
            "javascriptEnabled": true,
            "acceptSslCerts": true,
            "allowBlockedContent": true,
            "ignoreProtectedModeSettings": true
          }
        },
        

        【讨论】:

        • ignoreProtectedModeSettings 帮助了我;我没有管理员,无法更改 IE 设置中的保护模式。
        【解决方案8】:

        要解决此问题,您必须做两件事:

        1. 您需要在目标计算机上设置一个注册表项,以便 驱动程序可以保持与 Internet 实例的连接 它创建的资源管理器。

        2. 更改该计算机上 Internet Explorer 浏览器的一些设置 (您希望运行自动化的地方)。

        1 .设置注册表项/条目:

        • 要设置注册表项或条目,您需要打开“注册表编辑器”。

        • 要打开“注册表编辑器”,请按 Windows 按钮键 + r 字母键 这将打开“运行窗口”,然后输入“regedit”并按回车键。

        • 或按 Windows 键并在开始菜单中输入“regedit”,然后 按回车。现在取决于您的操作系统类型是否遵循 32/64 位 相应的步骤。

        Windows 32 位: 转到此位置 - “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl”并检查“FEATURE_BFCACHE”键。

        Windows 64 位: 转到此位置 - HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main\FeatureControl 并检查“FEATURE_BFCACHE”键。 请注意FEATURE_BFCACHE子项可能存在也可能不存在,如果不存在,应创建

        重要提示:在此键中,创建一个名为 iexplore.exe 的 DWORD 值,值为 0。

        2 。更改 Internet Explorer 浏览器的设置:

        • 点击设置按钮并选择“互联网选项”

        • 在“Internet 选项”窗口中转到“安全” 选项卡

        • 现在选择“Internet”选项并取消选中“启用保护模式”复选框并将“安全级别”更改为低。

        • 现在选择“本地 Intranet” 选项并将“安全级别”更改为低。

        • 现在选择“受信任的站点”选项并将“安全级别”更改为低。

        • 现在点击“应用”按钮,可能会弹出一个警告,点击“确定”按钮进行警告,然后点击“Internet选项”窗口中的“确定”按钮。

        • 之后重启浏览器。

        【讨论】:

          【解决方案9】:

          我无法在我的系统上手动修改保护模式设置,因为它们已被禁用。但是下面用于更新注册表值的 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扩展名保存并双击它!

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

          【讨论】:

            【解决方案10】:

            在开始使用 Internet Explorer 和 Selenium Webdriver 之前,请考虑这两个重要规则。

            • 缩放级别:应设置为默认值 (100%) 和
            • 安全区域设置:所有设置都应该相同。应根据您的组织权限设置安全设置。

            如何设置?

            • 只需转到 Internet Explorer,手动完成这两项工作。就是这样。没有秘密。
            • 通过您的代码执行此操作。

            方法一

            DesiredCapabilities 能力 = DesiredCapabilities.internetExplorer();

                capabilities.setCapability(InternetExplorerDriver.IGNORE_ZOOM_SETTING, true);
            
                System.setProperty("webdriver.ie.driver","D:\\IEDriverServer_Win32_2.33.0\\IEDriverServer.exe");
            
                WebDriver driver= new InternetExplorerDriver(capabilities);
            
            
                driver.get(baseURl);
            
                //Identify your elements and go ahead testing...
            

            这肯定会不会显示任何错误,浏览器会打开,还会导航到 URL。

            但是此不会识别任何元素,因此您无法继续。

            为什么?因为我们只是简单地抑制了错误并要求 IE 打开并获取该 URL。然而,只有当浏览器缩放为 100% 时,Selenium 才会识别元素。默认。 所以最终的代码是

            方法2稳健且全面的证明方式

            DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer();
            
                capabilities.setCapability(InternetExplorerDriver.IGNORE_ZOOM_SETTING, true);
            
                System.setProperty("webdriver.ie.driver","D:\\IEDriverServer_Win32_2.33.0\\IEDriverServer.exe");
            
                WebDriver driver= new InternetExplorerDriver(capabilities);
            
            
                driver.get(baseURl);
            
                driver.findElement(By.tagName("html")).sendKeys(Keys.chord(Keys.CONTROL,"0"));
            
                //Identify your elements and go ahead testing...
            

            希望这会有所帮助。如果需要更多信息,请告诉我。

            【讨论】:

              猜你喜欢
              • 2016-11-08
              • 2021-05-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-05-24
              • 2017-05-14
              相关资源
              最近更新 更多