web-dev-qa-db-fra.com

Erreur de niveau de zoom InternetExplorerDriver

J'essaie d'exécuter des tests sur IE8 mais j'ai rencontré un problème étrange:

  1. Lors de la création de l'instance webdriver (driver = Selenium :: WebDriver.for: c'est-à-dire), IE démarre et une exception est levée par WebDriver:

    "Erreur inattendue lors du lancement d'Internet Explorer. Le niveau de zoom du navigateur a été défini sur 0%"

  2. Internet Explorer semble indiquer que la connexion au serveur de pilotes IE a échoué, mais si j'actualise le navigateur manuellement, la connexion est parfaite.

    J'ai vérifié en ligne et seulement deux autres personnes semblent l'avoir signalé. Une solution possible était de s'assurer que toutes les zones ont les mêmes paramètres de "mode protégé", ce qui est le cas.

    Mon environnement est Windows 7 et IE8 avec IE Driver Server v2.25.3 et j'utilise les liaisons Ruby.

Des idées?

18
Mark Micallef

Selon la réponse donnée par Jim Evans (un des développeurs de Selenium) dans ce fil sur WebDriver User Group le code ci-dessous devrait résoudre votre problème.

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

Puisque la question n'est pas marquée avec un langage spécifique, et depuis la réponse de JacekM n'a pas fonctionné pour moi en C # (étant donné le boîtier, je suppose que c'est pour Java ...). Je vais mettre la solution correspondante pour C # ici:

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);
13
Tomas Aschan

 adjust browser zoom to 100% Pour résoudre ce problème rapidement, réglez le zoom de votre navigateur à 100%.

10

L'approche la plus robuste

Avant de commencer avec Internet Explorer et Selenium Webdriver Prenez en compte ces deux règles importantes.

  1. Le niveau de zoom: doit être défini sur la valeur par défaut (100%) et
  2. Les paramètres de la zone de sécurité: doivent être identiques pour tous. Les paramètres de sécurité doivent être définis en fonction des autorisations de votre organisation.

Comment définir ceci?

Allez simplement dans Internet Explorer, faites les deux choses manuellement. C'est tout. Pas de secret.

Faites-le avec votre code.

Méthode 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...

Ne montrer aucune erreur et le navigateur ouvrira et naviguera également vers l'URL.

MAIS Ce n'identifiera aucun élément et vous ne pouvez donc pas continuer.

Pourquoi? Parce que nous avons simplement supprimé l'erreur et demandé à IE de s'ouvrir et d'obtenir cette URL. Cependant, Selenium identifiera les éléments uniquement si le zoom du navigateur est de 100%, c.-à-d. défaut. Donc, le code final serait

Méthode 2 La méthode de preuve robuste et complète:

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...

J'espère que cela t'aides. Faites-moi savoir si d'autres informations sont nécessaires.

7
NiNa

Bien que la définition de la propriété IgnoreZoomLevel vous permette d'ouvrir le navigateur sans erreur, le test ne trouvera aucun élément à un niveau de zoom autre que 100%.

L'envoi de Ctrl + 0 n'aura pas toujours le résultat escompté, en fonction du paramètre DPI de votre système. Si vous avez sélectionné Moyen (120 dpi) ou Plus grand (144 dpi) (paramètres Windows 7), Ctrl + 0 définira le zoom sur 125% ou 150%.

Une solution de contournement que j'ai trouvée consiste à définir le niveau de zoom en fonction des paramètres DPI en modifiant le paramètre, avant d'ouvrir IE, dans le registre. Cela ne nécessite pas de droits d'administrateur puisque tout se trouve sous HKEY_CURRENT_USER.

Ceci est ma petite classe d'aide que je suis venu avec. (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);
            }
        }
    }
}

Je suis venu avec les valeurs comparant la valeur ZoomFactor dans le registre à différents paramètres DPI du système avec le zoom IE défini à 100%. Il existe plus de 3 paramètres DPI dans les nouvelles versions de Windows. Vous devez donc étendre la classe si vous en avez besoin.

Vous pouvez également modifier cela pour calculer le niveau de zoom souhaité, mais cela ne me concernait pas du tout.

J'appelle simplement InternetExplorerHelper.SetZoom100(); avant d'ouvrir IE et InternetExplorerHelper.ResetZoom() après l'avoir fermé.

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

Cela se produit généralement lorsque votre navigateur est réglé sur un niveau de zoom autre que 100% (Cela se produit lorsque vous faites défiler la souris sur une page Web tout en appuyant sur la touche Ctrl.). Vous pouvez résoudre ce problème en spécifiant le code mentionné ci-dessus pour laisser Selenium ignorer le niveau de zoom du navigateur ou vous pouvez simplement ouvrir le navigateur et réinitialiser le niveau de zoom à 100% IE11 et chrome)

2
Santosh Kaparthi

Merci pour le post, cela a vraiment fonctionné pour moi .

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

Ou Goto Internet Explorer Options> Avancé Cochez la case «Réinitialiser le niveau de zoom pour les nouvelles fenêtres et les nouveaux onglets».

Cliquez sur Lien pour voir l'image ---> Options d'Internet Explorer> Avancé

1
JeffG
InternetExplorerOptions ieOptions = new InternetExplorerOptions();
ieOptions.IgnoreZoomLevel = true;
driver = new InternetExplorerDriver(driverFilePath, ieOptions);
0
William

Définissez la propriété IgnoreZoomLevel sur true et transmettez-la en tant que InternetExplorerOptions au pilote.

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

Comme La réponse de Tomas Lycken a dit, il n'y a pas de langage spécifié, donc je vais partager ma solution dans Python:

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