109

出于某种原因,当我在工作中运行我的测试时,浏览器被最大化,但是当我在家里运行它们时,它只打开一个大约 50% 宽度的浏览器窗口。这会导致向下滚动等出现一些差异,所以我希望它在运行测试的每台机器上打开一个相同大小的浏览器窗口。最好的方法是什么?

(我已经找到了一些其他语言的答案,但我无法将它们适应 JavaScript)

添加

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

什么都不做(显然Google Chromewindow.moveTowindow.resizeTo支持)。

4

9 回答 9

199

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

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:未知错误:远程调试不支持操作

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

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

如果您看到错误“使用远程调试时不支持操作”,请尝试重写测试以启动新的 Chrome 会话。这可以通过从 Capabilities 对象中删除“debuggerAddress”来完成。

来源:使用远程调试时不支持操作

于 2013-11-25T16:54:04.303 回答
43

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

// config.js
specs: [
    ...
],
capabilities: {
    browserName: 'chrome',
    chromeOptions: {
        args: ['--window-size=800,600'] // THIS!
    }
}
// ....
于 2016-10-27T12:17:42.580 回答
28

如果首选方法:

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);
        });
    });
},

打字稿版本:

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]);
            });
        });
    }
};
于 2015-09-24T16:18:50.743 回答
17

我只是在我的protractor.conf.js文件中添加了下面的代码,它确实工作正常。

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

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

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

于 2016-03-31T16:35:57.703 回答
5

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

capabilities: {
    'browserName': 'chrome',
    chromeOptions: {
      args: [
               'start-maximized'
            ]
    }
}
于 2019-02-05T05:58:50.013 回答
5

在 Selenium 4 (Protractor 6) 中,setRect替换setSizesetPosition

例如,

browser.driver.manage().window().setRect({height: 600, width: 800});
于 2019-04-03T15:01:23.927 回答
0

如下修改您的 config.js 文件。

onPrepare: function () {
    browser.driver.manage().window().setSize(1280, 1024); // Width, height
},
capabilities: {
    browserName: 'chrome',
    chromeOptions: {
        args: [ "--start-maximized" ] // To start the browser as maximixed
    }
},
于 2019-12-22T14:37:19.730 回答
0

如果你想和async/await

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

// protractor.conf.js

exports.config = {

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

于 2021-02-08T23:05:17.190 回答
-1

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

browser.driver.manage().window().maximize();
于 2020-07-30T19:06:05.633 回答