web-dev-qa-db-fra.com

Selenium WebDriver Zoom avant/arrière contenu de la page

Comment changer le niveau de zoom de la page dans le pilote Web Selenium? J'ai essayé: 

driver.Keyboard().pressKey(Keys.Control);
driver.Keyboard().pressKey(Keys.Add);

Mais ça ne marche pas.

19
user2099471

Attention, Selenium suppose que le niveau de zoom est à 100%! Par exemple, IE refusera de démarrer (émet une exception) lorsque le niveau de zoom est différent, car la localisation de l'élément en dépend et si vous modifiez le niveau de zoom, il cliquera sur les mauvais éléments, au mauvais endroit. des endroits.


Java

Vous pouvez utiliser la méthode Keys.chord() :

WebElement html = driver.findElement(By.tagName("html"));
html.sendKeys(Keys.chord(Keys.CONTROL, Keys.ADD));

Utilisez avec prudence et lorsque vous avez terminé, réinitialisez le zoom à 100%:

html.sendKeys(Keys.chord(Keys.CONTROL, "0"));

C #

(puisque j'ai réalisé que les liaisons C # n'avaient pas la méthode Keys.chord())]

Ou, vous pouvez utiliser le API d'interactions utilisateur avancées comme ceci (encore une fois, du code Java, mais il devrait fonctionner de la même manière en C #):

WebElement html = driver.findElement(By.tagName("html"));

new Actions(driver)
    .sendKeys(html, Keys.CONTROL, Keys.ADD, Keys.NULL)
    .perform();

Encore une fois, n'oubliez pas de réinitialiser le zoom après:

new Actions(driver)
    .sendKeys(html, Keys.CONTROL, "0", Keys.NULL)
    .perform();

Notez que l'approche naïve

html.sendKeys(Keys.CONTROL, Keys.ADD);

ne fonctionne pas , car le Ctrl la clé est libérée dans cette méthode sendKeys(). La WebElement'S sendKeys() est différente de celle de Actions . Pour cette raison, le Keys.NULL utilisé dans ma solution est requis.

25
Petr Janeček

Zoom avant | Zoom arrière Fonction sur Windows

Agrandir

WebElement html = driver.findElement(By.tagName("html"));
html.sendKeys(Keys.chord(Keys.CONTROL, Keys.ADD));

Dézoomer

html.sendKeys(Keys.chord(Keys.CONTROL, Keys.SUBTRACT));

Zoom avant | Zoom arrière Fonction sur MAC

Agrandir

WebElement html = driver.findElement(By.tagName("html"));
html.sendKeys(Keys.chord(Keys.COMMAND, Keys.ADD));

Dézoomer

html.sendKeys(Keys.chord(Keys.COMMAND, Keys.SUBTRACT));
4
Prashanth Sams

L’approche Python fonctionne pour moi, sauf que vous devez spécifier le niveau de zoom:

driver.execute_script("document.body.style.zoom='zoom %'")

Avez 'zoom%' = quel que soit le niveau de zoom souhaité. (par exemple «67%»). Cela fonctionne pour Chromedriver, qui ne semble pas accepter les commandes send_keys.

4
Ben

Le niveau de zoom peut être modifié avec Java de deux manières (l'une pour Chrome et l'autre pour Firefox):


Chrome

Lorsque vous utilisez v̲e̲r̲s̲i̲o̲n̲ ̲3̲.3̲.̲1 du pilote de client Selenium Java et Ch̲r̲omeD̲r̲i̲v̲e̲r̲ 2̲.̲2̲8 , les travaux suivants (où le nombre est indiqué dans le chapitre "Citations") 1,5 = 150%, etc.):

JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("document.body.style.zoom = '1.5'");

Firefox

Le niveau de zoom peut être modifié avec les éléments suivants:
1. Le pilote de client Java susmentionné
2. G̲e̲c̲k̲o̲D̲r̲iv̲e̲r̲ v̲0̲.̲1̲5̲.̲0
3. Ces cours:
Java.awt.Robot
Java.awt.event.KeyEvent

Tout d’abord, instanciez la classe Robot:

Robot robot = new Robot();

Ce code provoque le niveau de zoom sur diminution:

robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_MINUS);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyRelease(KeyEvent.VK_MINUS);

Ce code entraîne le niveau de zoom sur augmentation:

robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_EQUALS);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyRelease(KeyEvent.VK_EQUALS);
3
User253489

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 régler cela?

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

Faites-le avec votre code.

Méthode 1:

//Move the following line into code format
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...

Ceci ne montrera définitivement aucune erreur et le navigateur s'ouvrira et permettra également de naviguer vers l'URL.

MAIS Cela ne permettra d'identifier 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%, par exemple. 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.

2
NiNa

Utiliser la classe Robot a fonctionné pour moi:

for(int i=0; i<3; i++){
        Robot robot = new Robot();
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_MINUS);
        robot.keyRelease(KeyEvent.VK_CONTROL);
        robot.keyRelease(KeyEvent.VK_MINUS);
        }

cela fera un zoom arrière 3 fois.

0
Himank Shekher

vous pouvez utiliser la méthode "Keys.chord" pour effectuer un zoom arrière et un zoom avant

Dézoomer

       WebElement zoomPage = driver.findElement(By.tagName("html"));
       zoomPage.sendKeys(Keys.chord(Keys.CONTROL, Keys.ADD))

lorsque vous avez terminé votre travail et que vous souhaitez réinitialiser le navigateur à 100%, utilisez le code ci-dessous Si vous souhaitez cliquer sur un élément, vous devez donc réinitialiser la fenêtre du navigateur à 100% avant de cliquer sur il.

 zoomPage.sendKeys(Keys.chord(Keys.CONTROL, "0"));

Vous pouvez également utiliser le code de script Java pour Zoom OUT.

 JavascriptExecutor executor = (JavascriptExecutor)driver;
 executor.executeScript("document.body.style.zoom = '110%'");
0
Ankit jain

On dirait que l'approche proposée pour C # ne fonctionne plus.

L'approche pour C # qui fonctionne pour moi dans WebDriver version 2.5 est la suivante:

        public void ZoomIn()
        {
             new Actions(Driver)
                .SendKeys(Keys.Control).SendKeys(Keys.Add)
                .Perform();
        }

        public void ZoomOut()
        {
            new Actions(Driver)
               .SendKeys(Keys.Control).SendKeys(Keys.Subtract)
               .Perform();
        }
0
Denis Koreyba

Je sais que c'est tard, mais si vous ne voulez pas utiliser la classe d'action (ou obtenir des erreurs, comme je l'ai fait), vous pouvez utiliser du JavaScript pur pour le faire.

Voici le code

((IJavaScriptExecutor) Browser.Driver).ExecuteScript("document.body.style.zoom = '70%';");

0
Right QA

J'utilise Python 3.5 .; J'ai le même problème que toi. Je pensais que vous deviez utiliser Chrome comme navigateur. 

J'ai utilisé PhantomJs pour enfin résoudre ce problème:

from Selenium.webdriver.common.keys import Keys
from Selenium import webdriver
browser = webdriver.PhantomJS()
browser.get('http://www.*.com')
print(browser.title)
c=browser.find_element_by_tag_name("body")
c.send_keys(Keys.LEFT_CONTROL+Keys.Add)`
0
thonner

11-17-2017 Mise à jour

var html = page.FindElement(By.XPath("/html"));
html.SendKeys(Keys.Control + "0" + Keys.Control);
0
roncansan

Pour un zoom avant de 30% (ou toute autre valeur que vous souhaitez mais dans mon cas, 30%), utilisez

JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("document.body.style.zoom = '30%';");