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

jra*_*ede 103 javascript webdriver angularjs selenium-webdriver protractor

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

添加

browser.executeScript('window.moveTo(0,0);'+
    'window.resizeTo(screen.width, screen.height);');
Run Code Online (Sandbox Code Playgroud)

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

Răz*_*nda 186

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

var width = 800;
var height = 600;
browser.driver.manage().window().setSize(width, height);
Run Code Online (Sandbox Code Playgroud)

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

browser.driver.manage().window().maximize();
Run Code Online (Sandbox Code Playgroud)

设置头寸运行:

var x = 150;
var y = 100;
browser.driver.manage().window().setPosition(x, y);
Run Code Online (Sandbox Code Playgroud)

如果你收到错误:

WebDriverError: unknown error: operation is unsupported with remote debugging
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

  • 使用`browser.driver.manage().window().maximize();可以将浏览器最大化到全屏大小. (10认同)
  • 如果你想对你的所有测试都有相同的分辨率,你可以在`protractor.conf.js`文件的`onPrepare`函数中调用上面的内容. (8认同)

e-s*_*yut 36

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

// config.js
specs: [
    ...
],
capabilities: {
    browserName: 'chrome',
    chromeOptions: {
        args: ['--window-size=800,600'] // THIS!
    }
}
// ....
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说是有效的,如双答案所示. (3认同)
  • 您需要删除双破折号:args:['window-size = 800,600'] (2认同)

Mar*_*pka 25

如果是首选方法:

browser.driver.manage().window().maximize();
Run Code Online (Sandbox Code Playgroud)

不起作用(例如在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);
        });
    });
},
Run Code Online (Sandbox Code Playgroud)

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]);
            });
        });
    }
};
Run Code Online (Sandbox Code Playgroud)


Eri*_*rel 15

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

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

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

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


Pri*_*ske 5

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

capabilities: {
    'browserName': 'chrome',
    chromeOptions: {
      args: [
               'start-maximized'
            ]
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 5

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

例如,

browser.driver.manage().window().setRect({height: 600, width: 800});
Run Code Online (Sandbox Code Playgroud)