27

如何在 Selenium WebDriver 中更改页面缩放级别?我试过:

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

但它不起作用。

4

14 回答 14

31

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


爪哇

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

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

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

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

C#

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

或者,您可以像这样使用Advanced User Interactions API(同样是 Java 代码,但它在 C# 中的工作方式应该相同):

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

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

同样,不要忘记之后重置缩放:

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

请注意,天真的方法

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

不起作用,因为在此方法Ctrl中释放了密钥。sendKeys()WebElement与中sendKeys()Actions不同。因此,Keys.NULL我的解决方案中使用的 是必需的。

于 2013-02-22T13:25:41.777 回答
9

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


铬合金

当使用Selenium Java 客户端驱动程序的v̲e̲r̲s̲i̲o̲n̲ ̲3̲.̲3̲.̲1C̲h̲r̲o̲m̲e̲D̲r̲i̲v̲e̲r̲ ̲2̲.̲2̲8时,以下工作(其中单引号中的数字表示要使用的缩放级别;1 = 10.%0%,等等。11) :

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

火狐

缩放级别可以通过以下方式修改:
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();

此代码导致缩放级别降低

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);
于 2017-04-15T00:49:37.893 回答
7

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

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

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

于 2015-07-17T18:57:11.957 回答
4

放大| 缩小功能开启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));
于 2013-09-05T11:29:08.363 回答
2

最稳健的方法

在开始使用 Internet Explorer 和 Selenium Webdriver 之前请考虑这两个重要规则。

  1. 缩放级别:应设置为默认(100%)和
  2. 安全区域设置:对所有人都应该相同。应根据您的组织权限设置安全设置。

这个怎么设置?

只需转到 Internet Explorer,手动完成这两项工作。就是这样。没有秘密。

通过您的代码执行此操作。

方法一:

//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。然而,只有当浏览器缩放为 100% 时,Selenium 才会识别元素。默认。所以最终的代码是

方法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...

希望这可以帮助。如果需要更多信息,请告诉我。

于 2016-11-25T09:45:58.080 回答
1

对于放大到 30%(或您希望的任何其他值,但在我的情况下为 30%),请使用

JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("document.body.style.zoom = '30%';");
于 2017-03-21T09:17:05.470 回答
1

我正在使用 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)`
于 2017-06-02T07:46:33.090 回答
1

您可以使用“Keys.chord”方法进行缩小和放大

缩小

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

当您完成工作并想将浏览器重置为 100% 时,请使用以下代码如果您想单击任何元素,因此在单击事件之前,您可以在单击后将浏览器窗口重置为 100%。

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

您也可以使用 Java 脚本代码进行 Zoom OUT

 JavascriptExecutor executor = (JavascriptExecutor)driver;
 executor.executeScript("document.body.style.zoom = '110%'");
于 2018-02-08T10:33:11.147 回答
0

似乎为 C# 提出的方法不再适用。

在 WebDriver 2.5 版中适用于我的 C# 方法是:

        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();
        }
于 2016-02-18T11:49:41.993 回答
0

我知道这已经很晚了,但是如果您不想使用操作类(或像我一样遇到任何错误),您可以使用纯 JavaScript 来执行此操作。

这是代码

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

于 2016-07-15T02:43:39.793 回答
0

使用机器人类对我有用:

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 倍。

于 2017-04-12T04:47:26.597 回答
0

2017 年 11 月 17 日更新

var html = page.FindElement(By.XPath("/html"));
html.SendKeys(Keys.Control + "0" + Keys.Control);
于 2017-11-17T15:43:21.280 回答
0

你可以在这里找到Selenium with Firefox 的解决方案。工作 100%。

于 2020-11-17T01:49:03.443 回答
0

您可以使用 Selenium 的驱动程序来执行将为您放大或缩小的脚本。

火狐

await driver.executeScript('document.body.style.MozTransform = "scale(3)"');
await driver.executeScript(
  'document.body.style.MozTransformOrigin = "top"'
);

这将导致放大 300% 并滚动到顶部。

铬合金

await driver.executeScript('document.body.style.zoom = "300%"');
于 2021-03-22T23:14:45.163 回答