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


107

出于某种原因,当我在工作中运行测试时,浏览器会最大化,但是当我在家运行测试时,它只会打开大约50%宽度的浏览器窗口。这会导致向下滚动等方面的差异,因此理想情况下,我希望在运行测试的每台计算机上,以相同大小打开浏览器窗口。最好的方法是什么?(我找到了其他语言的一些答案,但无法将它们改编成JavaScript)

新增中

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

什么都不做(显然window.moveTowindow.resizeToChrome不支持)。


我没有为你找出答案在这个时候,但我可以告诉你,window.moveTowindow.scrollTo通过浏览器肯定支持。
Colin Brock

scrollTo起作用。但是其他人则没有,至少从我的判断中看不到。尝试在控制台中键入...无济于事。
jraede

冒着偏离主题的危险,这里有个说明window.moveTo的小提琴window.resizeTo。在Chrome中对我来说效果很好。我不知道您可以在Chrome的控制台中调整当前窗口的大小,但是该resizeTo方法可用的事实表明Chrome支持它。
Colin Brock

好的,似乎适用于用JS打开浏览器的新窗口。但不适用于当前窗口,这是我需要的。
jraede

1
我的测试是关于事物是否正常工作以及在不同的响应式配置中是否可见的测试,因此我需要能够控制每个测试的窗口大小。
jraede

Answers:


191

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

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会话,而不是启动新的会话。这是通过功能(aka ChromeOptions)对象中的“ debuggerAddress”完成的。由于自动化扩展仅在启动时加载,因此在通过远程调试处理现有会话时,ChromeDriver不支持某些命令。

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

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


10
还可以使用browser.driver.manage().window().maximize();
Ben Smith

8
如果您希望所有测试都具有相同的分辨率,则可以在protractor.conf.js文件的onPrepare函数中调用上述方法。
nwinkler 2014年

1
@BenSmith不知道为什么,但browser.driver.manage().window().maximize();实际上并没有为我最大化窗口。我只是得到一个稍大的窗口。我只是用setSize()方法指定了宽度和高度
jetcom 2014年

1
@AlexandrosSpyropoulos:它应该可以工作,但是您必须确保没有以某种愚蠢的分辨率运行xvfb。例如,默认情况下为640x480。
塔达斯(Tadas Sasnauskas)2014年

1
@LeeGee更新了答案。
的Răzvan弗拉菲乌斯熊猫

42

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

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

您需要删除双破折号:args:['window-size = 800,600']
ezain

3
如答案所示,此功能对我来说是双破折号。
2015年

当使用'--headless'参数运行e2e脚本时,这也会设置浏览器的大小。如果菜单转移到了移动视图,这将很方便。
tony2tones

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

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

自动获得最佳分辨率的最佳想法,但您忘记了setPosition(0,0),因此它将恰好在屏幕上
Andrew

嗯,我的浏览器已经从0-0开始。但是,如果有人需要它的好处。
Martin Sznapka '17

我的开始于... 50,50或什么..只是说:)
安德鲁(Andrew)

它可能取决于操作系统,这里的Windows 8.1在Hyper-V中运行
Andrew

16

我只是将下面的代码添加到了我的protractor.conf.js文件中,并且效果很好。

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

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

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


4

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

例如,

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


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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.