如何在Protractor / WebdriverJS中设置默认浏览器窗口大小

时间:2013-11-16 20:35:35

标签: javascript angularjs selenium-webdriver webdriver protractor

出于某种原因,当我在工作中运行测试时,浏览器最大化,但是当我在家中运行它时,它只打开一个宽度约为50%的浏览器窗口。这会导致向下滚动等一些差异,所以我最好让它在运行测试的每台机器上打开一个相同大小的浏览器窗口。最好的方法是什么? (我已经找到了其他语言的一些答案,但还未能使它们适应javascript)

添加

browser.executeScript('window.moveTo(0,0);'+
    'window.resizeTo(screen.width, screen.height);');

什么都不做,(铬显然不支持window.moveTowindow.resizeTo。)

9 个答案:

答案 0 :(得分:178)

您可以通过运行以下方式设置默认浏览器大小:

var width = 800;
var height = 600;
browser.driver.manage().window().setSize(width, height);

要最大化浏览器窗口运行:

browser.driver.manage().window().maximize();

设置位置运行:

var x = 150;
var y = 100;
browser.driver.manage().window().setPosition(x, y);

如果您收到错误:

WebDriverError: unknown error: operation is unsupported with remote debugging
  

使用远程调试时不支持操作某些WebDriver   命令(例如,调整浏览器窗口大小)需要Chrome扩展程序   要加载到浏览器中。 ChromeDriver通常会加载它   每次启动新的Chrome会话时都会显示“自动扩展”。

     

但是,可以指示ChromeDriver连接到现有的   Chrome会话而不是启动新会话。这是使用完成的   Capabilities(aka ChromeOptions)对象中的'debuggerAddress'。   由于自动化扩展仅在启动时加载,因此存在   ChromeDriver在使用时不支持的一些命令   通过远程调试现有会话。

     

如果您看到错误“使用遥控器时不支持操作   调试“,尝试重写测试,以便启动新的Chrome   会话。这可以通过从中删除'debuggerAddress'来完成   能力对象。

来源:https://sites.google.com/a/chromium.org/chromedriver/help/operation-not-supported-when-using-remote-debugging

答案 1 :(得分:32)

您还可以使用config.js设置窗口大小:

// config.js
specs: [
    ...
],
capabilities: {
    browserName: 'chrome',
    chromeOptions: {
        args: ['--window-size=800,600'] // THIS!
    }
}
// ....

答案 2 :(得分:23)

如果是首选方法:

browser.driver.manage().window().maximize();

不适合你(比如在Xvfb中运行Protractor测试),那么你也可以用这种方式最大化窗口(protractor.conf.js):

onPrepare: function() {
    setTimeout(function() {
        browser.driver.executeScript(function() {
            return {
                width: window.screen.availWidth,
                height: window.screen.availHeight
            };
        }).then(function(result) {
            browser.driver.manage().window().setSize(result.width, result.height);
        });
    });
},

TypeScript版本:

import {Config, browser} from "protractor";

export let config: Config = {
    ...
    onPrepare: () => {
        setTimeout(() => {
            browser.driver.executeScript<[number, number]>(() => {
                return [
                    window.screen.availWidth,
                    window.screen.availHeight
                ];
            }).then((result: [number, number]) => {
                browser.driver.manage().window().setSize(result[0], result[1]);
            });
        });
    }
};

答案 3 :(得分:14)

我只是在我的protractor.conf.js文件中添加了下面的代码,它确实运行良好。

onPrepare: function() {
    var width = 1600;
    var height = 1200;
    browser.driver.manage().window().setSize(width, height);
},

你的答案中setTimeout和executeScript的用途是什么?我很难在量角器文档中找到最佳实践......

在我看来,直接使用maximize()是一个坏主意,不应该是首选方法,因为它不会在执行测试的每台机器上设置相同的大小,并且可能会破坏响应行为。

答案 4 :(得分:1)

在Protractor.conf.js文件中添加以下配置

功能:{     'browserName':'chrome',     chromeOptions:{       args:[                “开始最大化”             ]     }   }

答案 5 :(得分:1)

在硒4(量角器6)中,setRect替换了setSizesetPosition

例如,

browser.driver.manage().window().setRect({height: 600, width: 800});

答案 6 :(得分:1)

如果你想和async/await

您可以像这样全局最大化窗口(一旦浏览器启动)

// protractor.conf.js

exports.config = {

    async onPrepare() {
        // start browser in specified window size
        await browser.driver
            .manage()
            .window()
            .setSize(1920, 1080);
    },
}

答案 7 :(得分:0)

按照以下说明修改config.js文件。

 onPrepare: function () {
      browser.driver.manage().window().setSize(1280, 1024); //width , height

       }, 
 capabilities: {
browserName: 'chrome',
chromeOptions: {
args: [ "--start-maximized" ] // to start browser as maximixed 
         }
    },

答案 8 :(得分:-1)

添加以下代码。这将最大化浏览器窗口。

browser.driver.manage().window().maximize();