Увеличивает масштаб изображения веб-сайта 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);