19

我正在尝试针对 IE8 运行测试,但遇到了一个奇怪的问题:

  1. 创建 webdriver 实例时(driver = Selenium::WebDriver.for :ie),IE 启动,WebDriver 抛出异常:

    “启动 Internet Explorer 时出现意外错误。浏览器缩放级别设置为 0%”

  2. IE 似乎显示无法连接到 IE 驱动程序服务器,但如果我手动刷新浏览器,它就可以正常连接。

    我在网上查了一下,似乎只有另外两个人报告了这一点。一种可能的解决方案是确保所有区域都具有相同的“保护模式”设置,就像它们所做的那样。

    我的环境是带有 IE Driver Server v2.25.3 的 Windows 7 和 IE8,我使用的是 Ruby 绑定。

有任何想法吗?

4

13 回答 13

24

根据 Jim Evans(Selenium 开发人员之一)在WebDriver User Group 的这个线程中给出的答案,下面的代码应该可以解决您的问题。

DesiredCapabilities caps = DesiredCapabilities.internetExplorer();
caps.setCapability("ignoreZoomSetting", true);
driver = new InternetExplorerDriver(caps);
于 2012-08-21T12:58:35.337 回答
18

由于该问题没有用特定语言标记,并且由于JacekM 的答案在 C# 中对我不起作用(鉴于大小写,我假设他的答案适用于 Java ......)。我将C#的相应解决方案放在这里:

var service = InternetExplorerDriverService.CreateDefaultService(@"Path\To\Driver");
// properties on the service can be used to e.g. hide the command prompt

var options = new InternetExplorerOptions
{
    IgnoreZoomLevel = true
};
var ie = new InternetExplorerDriver(service, options);
于 2014-09-10T07:18:15.510 回答
11

将浏览器缩放调整为 100% 要快速修复它,请将浏览器缩放调整为 100%。

于 2015-11-04T11:55:50.010 回答
8

最稳健的方法

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

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

这个怎么设置?

只需转到 Internet Explorer,手动完成这两项工作。而已。没有秘密。

通过您的代码执行此操作。

方法一:

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);

//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"));
//This is to set the zoom to default value
//Identify your elements and go ahead testing...

希望这可以帮助。如果需要更多信息,请告诉我。

于 2016-11-25T09:49:28.927 回答
7

虽然设置 IgnoreZoomLevel 属性允许您无错误地打开浏览器,但测试不会发现缩放级别不是 100% 的元素。

根据您的系统 DPI 设置,发送 Ctrl+0 也不会总是得到预期的结果。如果您选择了中等 (120 dpi) 或较大 (144 dpi)(Windows 7 设置),Ctrl+0 会将缩放设置为 125% 或 150%。

我发现的一种解决方法是根据 DPI 设置通过在注册表中打开 IE 之前编辑设置来设置缩放级别。这不需要管理员权限,因为所有内容都位于 HKEY_CURRENT_USER 下。

这是我想出的小助手类。(C#)

using Microsoft.Win32;

namespace WebAutomation.Helper
{
    public static class InternetExplorerHelper
    {
        private static int m_PreviousZoomFactor = 0;

        public static void SetZoom100()
        {
            // Get DPI setting.
            RegistryKey dpiRegistryKey = Registry.CurrentUser.OpenSubKey("Control Panel\\Desktop\\WindowMetrics");
            int dpi = (int)dpiRegistryKey.GetValue("AppliedDPI");
            // 96 DPI / Smaller / 100%
            int zoomFactor100Percent = 100000;
            switch (dpi)
            {
                case 120: // Medium / 125%
                    zoomFactor100Percent = 80000;
                    break;
                case 144: // Larger / 150%
                    zoomFactor100Percent = 66667;
                    break;
            }
            // Get IE zoom.
            RegistryKey zoomRegistryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Internet Explorer\\Zoom", true);
            int currentZoomFactor = (int)zoomRegistryKey.GetValue("ZoomFactor");
            if (currentZoomFactor != zoomFactor100Percent)
            {
                // Set IE zoom and remember the previous value.
                zoomRegistryKey.SetValue("ZoomFactor", zoomFactor100Percent, RegistryValueKind.DWord);
                m_PreviousZoomFactor = currentZoomFactor;
            }
        }

        public static void ResetZoom()
        {
            if (m_PreviousZoomFactor > 0)
            {
                // Reapply the previous value.
                RegistryKey zoomRegistryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Internet Explorer\\Zoom", true);
                zoomRegistryKey.SetValue("ZoomFactor", m_PreviousZoomFactor, RegistryValueKind.DWord);
            }
        }
    }
}

我想出了比较注册表中不同系统 DPI 设置下的 ZoomFactor 值和 IE 缩放设置为 100% 的值。在较新的 Windows 版本中有超过 3 个 DPI 设置,因此如果需要,您需要扩展类。

您也可以修改它以计算您想要的任何缩放级别,但这与我无关。

我只是InternetExplorerHelper.SetZoom100();在打开 IE 之前和InternetExplorerHelper.ResetZoom()关闭它之后打电话。

于 2016-09-30T06:17:53.403 回答
4
InternetExplorerOptions options = new InternetExplorerOptions();
options.ignoreZoomSettings() ;
driver = new RemoteWebDriver(new URL("http://localhost:8888/wd/hub"),options);
于 2018-07-18T09:40:37.390 回答
2

这基本上发生在您的浏览器设置为 100% 以外的某个缩放级别时(当您在网页上滚动鼠标并按下 Ctrl 键时发生。)。您可以通过指定上面提到的代码让 selenium 忽略浏览器缩放级别来解决此问题,或者您可以简单地打开浏览器并通过转到设置或使用快捷键 Ctrl+0 将缩放级别重置为 100%(这适用于IE11 和铬)

于 2016-04-13T21:19:39.307 回答
2

谢谢你的帖子,这真的对我有用。用于修复缩放级别异常:

InternetExplorerOptions options = new InternetExplorerOptions {  IgnoreZoomLevel= true };
driver = new InternetExplorerDriver(@"C:\seleniumreferences\IEDriverServer32", options);
于 2016-12-08T20:13:36.907 回答
1

或转到 Internet Explorer 选项 > 高级 选中“重置新窗口和标签的缩放级别”框。

单击链接查看图像 ---> Internet Explorer 选项 > 高级

于 2018-05-03T00:39:59.807 回答
0

正如Tomas Lycken 的回答所说,没有指定语言,所以我将在Python中分享我的解决方案:

capabilities = DesiredCapabilities.INTERNETEXPLORER
capabilities['ignoreZoomSetting'] = True
driver = webdriver.Ie(capabilities=capabilities)
于 2016-11-28T11:02:28.693 回答
0
InternetExplorerOptions ieOptions = new InternetExplorerOptions();
ieOptions.IgnoreZoomLevel = true;
driver = new InternetExplorerDriver(driverFilePath, ieOptions);
于 2015-07-20T19:50:19.470 回答
0

使用 Java 的工作代码

InternetExplorerOptions capabilities= new InternetExplorerOptions();
capabilities.setCapability(InternetExplorerDriver.IGNORE_ZOOM_SETTING, true);
System.setProperty("webdriver.ie.driver", Constant.drivers + "\\IEDriverServer.exe");
            driver = new InternetExplorerDriver(capabilities);
            driver.manage().window().maximize();
于 2019-08-26T03:06:30.053 回答
0

将 IgnoreZoomLevel 属性设置为 true 并将其作为 InternetExplorerOptions 传递给驱动程序。

InternetExplorerOptions options = new InternetExplorerOptions();
options.IgnoreZoomLevel = true;
IWebDriver driver = new InternetExplorerDriver(IEDriverLocation,options);
于 2015-10-13T05:47:48.283 回答