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.
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.
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"));
(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.
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));
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.
Le niveau de zoom peut être modifié avec Java de deux manières (l'une pour Chrome et l'autre pour Firefox):
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'");
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);
Avant de commencer avec Internet Explorer et Selenium Webdriver Prenez en compte ces deux règles importantes.
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.
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.
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%'");
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();
}
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%';");
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)`
11-17-2017 Mise à jour
var html = page.FindElement(By.XPath("/html"));
html.SendKeys(Keys.Control + "0" + Keys.Control);
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%';");