Увеличивает масштаб изображения веб-сайта Selenium

Как изменить уровень масштабирования страницы в веб-драйвере селена? Я пробовал:

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

Но это не сработает.

Ответы

Ответ 1

Остерегайтесь того, что Selenium предполагает, что уровень масштабирования составляет 100%! Например, IE откажется запускать (выбрасывает исключение), когда уровень масштабирования отличается, потому что поиск этого элемента зависит от этого, и если вы изменили уровень масштабирования, он нажмет на неправильные элементы в неправильных местах.


Java

Вы можете использовать метод Keys.chord():

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

Используйте осторожно, и когда вы закончите, reset масштаб возвращается на 100%:

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

С#

(поскольку я понял, что привязки С# не имеют метода Keys.chord())

Или вы можете использовать Advanced User Interactions API, как это (опять-таки, код Java, но он должен работать на С#):

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

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

Опять же, не забудьте reset увеличить масштаб:

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

Обратите внимание, что наивный подход

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

не работает, потому что ключ Ctrl освобождается в этом методе sendKeys(). WebElement sendKeys() отличается от тем, что находится в Actions. Из-за этого требуется Keys.NULL, используемый в моем решении.

Ответ 2

Увеличить | Уменьшить. Функция Windows

Увеличить

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

Уменьшить

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

Увеличить | Уменьшить. Функция MAC

Увеличить

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

Уменьшить

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

Ответ 3

Подход Python работает для меня, за исключением того, что вы должны указать уровень масштабирования:

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

У вас есть зум% '= любой уровень масштабирования, который вы хотите. (например, "67%" ). Это работает для Chromedriver, который, похоже, не принимает команды send_keys.

Ответ 4

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

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

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

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

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

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

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

Это будет определенно не показывать никаких ошибок, и браузер откроется, а также будет перемещаться по 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

Двумя способами уровень масштабирования можно изменить с помощью Java (один для Chrome, а другой для Firefox):


Chrome

При использовании версии 3.3.1 драйвера клиента Java Selenium и ChromeDriver 2.28, следующие работы (где число в одинарных кавычках представляет собой уровень масштабирования для использования: 1 = 100%, 1,5 = 150% и т.д.):

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

Firefox

Уровень масштабирования можно изменить следующим образом:
1. Вышеупомянутый драйвер Java-клиента
2. GeckoDriver v0.15.0
3. Эти классы:
java.awt.Robot
java.awt.event.KeyEvent

Прежде всего, создайте экземпляр класса Robot:

Robot robot = new Robot();

Этот код приводит к снижению уровня масштабирования:

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

Этот код увеличивает уровень масштабирования:

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

Ответ 6

Кажется, что подход, предложенный для С#, больше не работает.

Подход для С#, который работает для меня в версии 2.0 WebDriver, составляет:

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

Ответ 7

Я знаю, что это очень поздно, но если вы не хотите использовать класс действия (или получить какие-либо ошибки, как и я), вы можете использовать чистый JavaScript для этого.

Вот код

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

Ответ 8

Для увеличения до 30% (или любого другого значения, которое вы хотите, но в моем случае 30%) используйте

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

Ответ 9

Использование класса Robot для меня:

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

это уменьшит масштаб 3 раза.

Ответ 10

Я использую Python 3.5; У меня такая же проблема, как и вы. Я думал, вы должны использовать Chrome в качестве браузера.

Я использовал PhantomJs, чтобы окончательно решить эту проблему:

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

11-17-2017 Обновление

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