InternetExplorerDriver Ошибка уровня масштабирования
Я пытаюсь запустить тесты с IE8, но столкнулся со странной проблемой:
При создании экземпляра веб-драйвера (driver = Selenium::WebDriver.for:ie) IE запускается и WebDriver создает исключение:
"Неожиданная ошибка при запуске Internet Explorer. Уровень масштабирования браузера был установлен на 0%"
Похоже, что IE показывает сбой подключения к серверу драйверов IE, но если я обновлю браузер вручную, он подключится просто нормально.
Я проверил онлайн, и только два других человека, кажется, сообщили об этом. Одним из возможных решений было гарантировать, что все зоны имеют одинаковые настройки "защищенного режима", что они делают.
Моя среда - Windows 7 и IE8 с IE Driver Server v2.25.3, и я использую привязки Ruby.
Есть идеи?
12 ответов
Согласно ответу Джима Эванса (одного из разработчиков Selenium) в этой теме в группе пользователей WebDriver, приведенный ниже код должен решить вашу проблему.
DesiredCapabilities caps = DesiredCapabilities.internetExplorer();
caps.setCapability("ignoreZoomSetting", true);
driver = new InternetExplorerDriver(caps);
Поскольку вопрос не помечен конкретным языком, и поскольку ответ 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);
Самый надежный подход
Перед началом работы с 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...
Надеюсь это поможет. Дайте мне знать, если потребуется дополнительная информация.
Хотя установка свойства IgnoreZoomLevel позволяет открывать браузер без ошибок, тест не обнаружит элементов с уровнем масштабирования, отличным от 100%.
Отправка Ctrl+0 также не всегда будет иметь ожидаемый результат, в зависимости от настроек DPI вашей системы. Если вы выбрали Среднее (120 точек на дюйм) или Больше (144 точек на дюйм) (настройки 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 zoom, установленным на 100%. В более новых версиях Windows имеется более 3 настроек DPI, поэтому вам нужно расширить класс, если они вам нужны.
Вы также можете изменить это, чтобы рассчитать любой уровень масштабирования, который вы хотите, но это было просто не актуально для меня.
Я просто звоню InternetExplorerHelper.SetZoom100();
перед открытием IE и InternetExplorerHelper.ResetZoom()
после закрытия
InternetExplorerOptions options = new InternetExplorerOptions();
options.ignoreZoomSettings() ;
driver = new RemoteWebDriver(new URL("http://localhost:8888/wd/hub"),options);
Это в основном происходит, когда в вашем браузере установлен какой-либо уровень масштабирования, отличный от 100%(происходит, когда вы прокручиваете мышь на веб-странице, нажимая клавишу Ctrl.). Вы можете исправить это, указав код, упомянутый выше, чтобы селен мог игнорировать уровень масштабирования браузера, или вы можете просто открыть браузер и сбросить уровень масштабирования до 100%, либо перейдя в настройки, либо воспользовавшись сочетанием клавиш Ctrl+0(Это сработало для IE11 и хром)
Спасибо за пост, это действительно работает для меня. Для исправления исключения уровня масштабирования:
InternetExplorerOptions options = new InternetExplorerOptions { IgnoreZoomLevel= true };
driver = new InternetExplorerDriver(@"C:\seleniumreferences\IEDriverServer32", options);
Или перейдите в раздел Параметры обозревателя Internet Explorer> Дополнительно. Установите флажок "Сбросить масштаб для новых окон и вкладок".
Нажмите на ссылку, чтобы увидеть изображение ---> Параметры Internet Explorer> Дополнительно
Как сказал ответ Томаса Ликена, язык не указан, поэтому я поделюсь своим решением на Python:
capabilities = DesiredCapabilities.INTERNETEXPLORER
capabilities['ignoreZoomSetting'] = True
driver = webdriver.Ie(capabilities=capabilities)
Установите для свойства IgnoreZoomLevel значение true и передайте его как InternetExplorerOptions драйверу.
InternetExplorerOptions options = new InternetExplorerOptions();
options.IgnoreZoomLevel = true;
IWebDriver driver = new InternetExplorerDriver(IEDriverLocation,options);
Рабочий код с использованием 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();
InternetExplorerOptions ieOptions = new InternetExplorerOptions();
ieOptions.IgnoreZoomLevel = true;
driver = new InternetExplorerDriver(driverFilePath, ieOptions);