如何设置默认的浏览器窗口大小在量角器/WebdriverJS

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

(我已经找到了一些其他语言的答案,但是我还没有能够将它们改编成 JavaScript)

添加

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

什么都不做(显然谷歌 Chrome 不支持 window.moveTowindow.resizeTo)。

87205 次浏览

You can set the default browser size by running:

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

To maximize the browser window, run:

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

To set the position, run:

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

If you get an error:

WebDriverError: unknown error: operation is unsupported with remote debugging

Operation not supported when using remote debugging Some WebDriver commands (e.g. resizing the browser window) require a Chrome extension to be loaded into the browser. ChromeDriver normally loads this "automation extension" every time it launches a new Chrome session.

However ChromeDriver can be instructed to connect to an existing Chrome session instead of launching a new one. This is done using 'debuggerAddress' in the Capabilities (aka ChromeOptions) object. Since the automation extension is only loaded at startup, there are some commands that ChromeDriver does not support when working with existing sessions through remote debugging.

If you see the error "operation not supported when using remote debugging", try rewriting the test so that it launches a new Chrome session. This can be done by removing 'debuggerAddress' from the Capabilities object.

Source: Operation not supported when using remote debugging

If the preferred method:

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

doesn't work for you (for example running Protractor tests in Xvfb), then you can also maximize window this way (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 version:

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

I simply added the code below in my protractor.conf.js file and it did work fine.

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

What purpose does the setTimeout and executeScript serve in your answer? I struggle to find best practices in the protractor documentation...

To my mind, using directly maximize() is a bad idea and should not be the preferred method, since it would not set the same size on every machine where the tests are executed and could break responsive behaviours.

You can also use your config.js to set window size:

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

In Protractor.conf.js file add following configuration

capabilities: {
'browserName': 'chrome',
chromeOptions: {
args: [
'start-maximized'
]
}
}

In Selenium 4 (Protractor 6), setRect replaces setSize and setPosition

For example,

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

Modify your config.js file as per below.

onPrepare: function () {
browser.driver.manage().window().setSize(1280, 1024); // Width, height
},
capabilities: {
browserName: 'chrome',
chromeOptions: {
args: [ "--start-maximized" ] // To start the browser as maximixed
}
},

Add the below code. This will maximize the browser window.

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

if you want to go with async/await

You can maximize the window globally (once the browser started) like so

// protractor.conf.js


exports.config = {


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