Selenium webdriver放大/缩小页面内容

时间:2013-02-22 12:54:59

标签: selenium zoom

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

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

但它不起作用。

14 个答案:

答案 0 :(得分:25)

请注意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's sendKeys()the one in Actions不同。因此,我的解决方案中使用的Keys.NULL 必需

答案 1 :(得分:5)

Python方法适合我,除了你必须指定缩放级别:

diffSecs = (59 + (July.getSeconds() - today.getSeconds())); // seconds

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

答案 2 :(得分: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));

答案 3 :(得分:3)

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

使用v̲e̲r̲s̲i̲o̲n̲ ̲3̲.̲3̲.̲1的Selenium Java客户端驱动程序和C̲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'");

火狐

可以使用以下内容修改缩放级别:
1.上述Java客户端驱动程序
2. G̲e̲c̲k̲o̲D̲r̲i̲v̲e̲r̲ ̲v̲0̲.̲1̲5̲.̲0
这些课程:
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);

答案 4 :(得分:2)

最强大的方法

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

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

    只需转到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。但是,只有当浏览器缩放为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...
    

    希望这会有所帮助。如果需要进一步的信息,请告诉我。

答案 5 :(得分: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();
        }

答案 6 :(得分:0)

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

这是代码

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

答案 7 :(得分:0)

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

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

答案 8 :(得分:0)

使用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次。

答案 9 :(得分:0)

我正在使用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)`

答案 10 :(得分:0)

11-17-2017更新

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

答案 11 :(得分:0)

你可以使用&#34; Keys.chord&#34;缩小和放大的方法

缩小

       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脚本代码进行缩小

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

答案 12 :(得分:0)

您可以找到here的Firefox硒解决方案。 有效100%。

答案 13 :(得分:0)

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

火狐

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

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

Chrome

await driver.executeScript('document.body.style.zoom = "300%"');