Selenium webdriver放大/缩小页面内容

use*_*471 22 selenium zoom selenium-webdriver

如何在selenium web驱动程序中更改页面缩放级别?我试过了:

driver.Keyboard().pressKey(Keys.Control);
driver.Keyboard().pressKey(Keys.Add);
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

Pet*_*ček 26

请注意Selenium假设缩放级别为100%!例如,当缩放级别不同时,IE将拒绝启动(抛出异常),因为元素定位依赖于此,如果您更改了缩放级别,它将在错误的位置单击错误的元素.


Java的

您可以使用以下Keys.chord()方法:

WebElement html = driver.findElement(By.tagName("html"));
html.sendKeys(Keys.chord(Keys.CONTROL, Keys.ADD));
Run Code Online (Sandbox Code Playgroud)

谨慎使用,完成后,将缩放重置为100%:

html.sendKeys(Keys.chord(Keys.CONTROL, "0"));
Run Code Online (Sandbox Code Playgroud)

C#

(因为我意识到C#绑定没有这个Keys.chord()方法)

或者,您可以像这样使用高级用户交互API(再次,Java代码,但它应该在C#中使用相同的):

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

new Actions(driver)
    .sendKeys(html, Keys.CONTROL, Keys.ADD, Keys.NULL)
    .perform();
Run Code Online (Sandbox Code Playgroud)

再次,不要忘记之后重置缩放:

new Actions(driver)
    .sendKeys(html, Keys.CONTROL, "0", Keys.NULL)
    .perform();
Run Code Online (Sandbox Code Playgroud)

请注意,天真的方法

html.sendKeys(Keys.CONTROL, Keys.ADD);
Run Code Online (Sandbox Code Playgroud)

不起作用,因为Ctrl密钥是在此sendKeys()方法中释放的.的WebElementsendKeys()是来自不同那个在Actions.因此,Keys.NULL需要在我的解决方案中使用.


小智 6

以下是使用Java更改缩放级别的两种方法(一种用于Chrome浏览器,另一种用于Firefox):


使用v?e?r?s?i?o?n?Selenium Java Client Driver的?3?。?3?。?1C?h?r?o?m?e?D?r?i?v?e?r??2?。?2?8,以下工作原理(其中单引号中的数字表示要使用的缩放级别; 1 = 100%,1.5 = 150%等):

JavascriptExecutor executor = (JavascriptExecutor)driver;
executor.executeScript("document.body.style.zoom = '1.5'");
Run Code Online (Sandbox Code Playgroud)

火狐浏览器

可以使用以下方式修改缩放级别:
1.上述Java客户端驱动程序
2. G?e?c?k?o?D?r?i?v?e?r??v?0?。?1?5?。?0
3.这些类:
java.awt.Robot
java.awt.event.KeyEvent

首先,实例化Robot类:

Robot robot = new Robot();
Run Code Online (Sandbox Code Playgroud)

此代码导致缩放级别降低

robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_MINUS);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyRelease(KeyEvent.VK_MINUS);
Run Code Online (Sandbox Code Playgroud)

此代码使缩放级别增加

robot.keyPress(KeyEvent.VK_CONTROL);
robot.keyPress(KeyEvent.VK_EQUALS);
robot.keyRelease(KeyEvent.VK_CONTROL);
robot.keyRelease(KeyEvent.VK_EQUALS);
Run Code Online (Sandbox Code Playgroud)


小智 6

通过 JavaScript 执行更改缩放级别是可以的,但它仅适用于显示的第一页。后续页面将返回到 100% 缩放级别。到目前为止,我发现的最佳解决方案是设置 Chrome 选项的设备比例因子。

ChromeOptions options = new ChromeOptions();
options.addArguments("force-device-scale-factor=0.75");
options.addArguments("high-dpi-support=0.75");
WebDriver driver = new ChromeDriver(options);
Run Code Online (Sandbox Code Playgroud)


Ben*_*Ben 5

Python方法对我有用,除了您必须指定缩放级别:

driver.execute_script("document.body.style.zoom='zoom %'")
Run Code Online (Sandbox Code Playgroud)

拥有'zoom%'=您想要的缩放级别。(例如“ 67%”)。这适用于Chromedriver,它似乎不接受send_keys命令。

  • 根据[this](/sf/ask/2239059021/)_这使得它放大CSS,而不是Chrome本身。_我在 Firefox 中尝试过,但没有成功 (3认同)
  • 寻找一种使用 Python 缩小 Firefox 窗口的方法。有什么帮助吗? (2认同)
  • 修改`document.body.style.zoom`会弄乱复杂页面的页面布局 (2认同)