Подтвердить что ты не робот

Ошибка измерения масштаба InternetExplorerDriver

Я пытаюсь запустить тесты против IE8, но я столкнулся с какой-то странной проблемой:

  • При создании экземпляра webdriver (driver = Selenium:: WebDriver.for: ie) IE запускается, а WebDriver генерирует исключение:

    "Неожиданная ошибка запуска Internet Explorer. Уровень масштабирования браузера был установлен на 0%"

  • Кажется, что IE показывает отказ подключиться к серверу драйверов IE, но если я обновляю браузер вручную, он прекрасно соединяется.

    Я проверил онлайн, и только два других человека, похоже, сообщили об этом. Одним из возможных решений было обеспечение того, чтобы все зоны имели одинаковые настройки "защищенного режима", которые они выполняют.

    Моя среда - это Windows 7 и IE8 с IE Driver Server v2.25.3, и я использую привязки Ruby.

Любые идеи?

4b9b3361

Ответ 1

В соответствии с ответом, данным Джим Эвансом (одним из разработчиков Selenium) в этой теме в WebDriver User Group, приведенный ниже код должен исправить вашу проблему.

DesiredCapabilities caps = DesiredCapabilities.internetExplorer();
caps.setCapability("ignoreZoomSetting", true);
driver = new InternetExplorerDriver(caps);

Ответ 2

Поскольку вопрос не помечен определенным языком, и поскольку ответ JacekM не работает для меня на С# (учитывая корпус, я предполагаю, что его для Java...). Я поставлю соответствующее решение для С# здесь:

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

Ответ 3

настроить масштаб браузера на 100% Чтобы быстро исправить это, измените масштаб вашего браузера на 100%.

Ответ 4

Самый надежный подход

Прежде чем начать с Internet Explorer и Selenium Webdriver Рассмотрите эти два важных правила.

  • Уровень масштабирования: должен быть установлен на значение по умолчанию (100%) и
  • Настройки зоны безопасности: должно быть одинаковым для всех. Параметры безопасности должны быть установлены в соответствии с разрешениями вашей организации.

Как установить это?

Просто перейдите в Internet Explorer, сделайте оба материала вручную. Это оно. Никакой секрет.

Сделайте это через свой код.

Метод 1:

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. Однако Selenium будет идентифицировать элементы только в том случае, если масштаб браузера составляет 100%. по умолчанию. Таким образом, окончательный код будет

Метод 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...

Надеюсь, это поможет. Сообщите мне, нужна ли дополнительная информация.

Ответ 5

При установке свойства IgnoreZoomLevel вы можете открыть браузер без ошибок, тест не найдет элементов с уровнем масштабирования, отличным от 100%.

Отправка Ctrl + 0 также не всегда будет иметь ожидаемый результат, в зависимости от настроек вашего DPI системы. Если вы выбрали Medium (120 dpi) или Larger (144 dpi) (настройки Windows 7), Ctrl + 0 установит масштаб на 125% или 150%.

Обходной путь, который я нашел, - установить уровень масштабирования в соответствии с настройками DPI, отредактировав параметр перед открытием IE в реестре. Это не требует прав администратора, поскольку все находится под HKEY_CURRENT_USER.

Это мой маленький вспомогательный класс, который я придумал. (С#)

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

Я придумал значения, сравнивающие значение ZoomFactor в реестре с разными настройками DPI системы, при увеличении IE до 100%. В более поздних версиях Windows существует более трех параметров DPI, поэтому вам нужно расширить класс, если вам это нужно.

Вы также можете изменить это, чтобы рассчитать любой уровень масштабирования, который вам нужен, но это было просто не актуально для меня.

Я просто вызываю InternetExplorerHelper.SetZoom100(); перед открытием IE и InternetExplorerHelper.ResetZoom() после его закрытия.

Ответ 6

InternetExplorerOptions options = new InternetExplorerOptions();
options.ignoreZoomSettings() ;
driver = new RemoteWebDriver(new URL("http://localhost:8888/wd/hub"),options);

Ответ 7

Это происходит, когда ваш браузер настроен на некоторый уровень масштабирования, отличный от 100% (происходит при прокрутке мыши на веб-странице при нажатии клавиши Ctrl). Вы можете исправить это, указав упомянутый выше код, чтобы позволить селену игнорировать уровень масштабирования браузера, или вы можете просто открыть браузер и reset уровень масштабирования до 100% либо путем перехода к настройкам, либо с помощью сочетания клавиш Ctrl + 0 (This работал на IE11 и хром)

Ответ 8

Спасибо за сообщение, это действительно сработало для меня. Для исправления исключения уровня масштабирования:

InternetExplorerOptions options = new InternetExplorerOptions {  IgnoreZoomLevel= true };
driver = new InternetExplorerDriver(@"C:\seleniumreferences\IEDriverServer32", options);

Ответ 9

Или Перейти к Internet Explorer Параметры> Дополнительно Установите флажок "Сбросить масштаб для новых окон и вкладок".

Нажмите на ссылку, чтобы увидеть изображение ---> Параметры Internet Explorer> Дополнительно

Ответ 10

InternetExplorerOptions ieOptions = new InternetExplorerOptions();
ieOptions.IgnoreZoomLevel = true;
driver = new InternetExplorerDriver(driverFilePath, ieOptions);

Ответ 11

Установите для свойства IgnoreZoomLevel значение true и передайте его как InternetExplorerOptions в драйвер.

InternetExplorerOptions options = new InternetExplorerOptions();
options.IgnoreZoomLevel = true;
IWebDriver driver = new InternetExplorerDriver(IEDriverLocation,options);

Ответ 12

Как ответ Tomas Lycken сказал, что языка не указано, поэтому я поделюсь своим решением в Python:

capabilities = DesiredCapabilities.INTERNETEXPLORER
capabilities['ignoreZoomSetting'] = True
driver = webdriver.Ie(capabilities=capabilities)

Ответ 13

Рабочий код с использованием 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();