如何设置浏览器内部窗口/视口大小?

时间:2016-04-01 00:12:20

标签: javascript selenium selenium-webdriver protractor

如果我调用该函数:

browser.driver.manage().window().setSize(1000, 1000);

它将我的窗口大小设置为1000x1000,将内部窗口/视口大小设置为990x918。通过内部窗口大小,我指的是窗口中实际包含内容的部分,例如,不包括窗口边框或制表符。在这种情况下,我的每边都有一个5px的边框,然后是我想要占用的82px的网址和标签栏。

我想设置内部窗口大小,以便我不需要专门为运行测试的计算机进行帐户,例如,如果碰巧有一个额外的工具栏。

是否有用于设置窗口实际内部内容填充部分大小的量角器命令?

根据以下答案,我将其添加到我的conf的onPrepare部分:

protractor.setViewportSize = function(width, height){
    const JS_GET_PADDING = "return {"
       + "w: window.outerWidth - window.innerWidth,"
       + "h: window.outerHeight - window.innerHeight };";

     browser.executeScript(JS_GET_PADDING).then(function(pad){
       browser.manage().window().setSize(width + pad.w, height + pad.h);
     });
};

在测试中,我称之为:

protactor.setViewportSize(1440, 1000);

2 个答案:

答案 0 :(得分:4)

我不认为有任何内置方法可以将视口大小调整为给定大小。但是,可以通过设置与目标内部尺寸匹配的外部尺寸来完成:

var webdriver = require('./node_modules/protractor/node_modules/selenium-webdriver');

// extension method to set the inner size
webdriver.WebDriver.prototype.setViewportSize = function(width, height){
  const JS_GET_PADDING = "return {"
    + "w: window.outerWidth - window.innerWidth,"
    + "h: window.outerHeight - window.innerHeight };";

  var self = this;
  self.executeScript(JS_GET_PADDING).then(function(pad){
    self.manage().window().setSize(width + pad.w, height + pad.h);
  });
};

// start the browser
var driver = new webdriver.Builder().withCapabilities({browserName: 'firefox'}).build();

// set the window inner size to 800 x 600
driver.setViewportSize(800, 600);

// quit
driver.sleep(5000);
driver.quit();

答案 1 :(得分:0)

这是 C# 版本 @Florent B. 答案:

sudo pip3 install opencv-python

用法:

    public static void SetViewportSize(RemoteWebDriver driver, int width, int height)
    {            
        var jsGetPadding = @"return [ window.outerWidth - window.innerWidth,window.outerHeight - window.innerHeight ];";
        var paddingArray = driver.ExecuteScript(jsGetPadding) as ReadOnlyCollection<object>; 
        driver.Manage().Window.Size = new Size(width + int.Parse(paddingArray[0].ToString()), height + int.Parse(paddingArray[1].ToString()));
    
    }