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

Javascript 如何在量角器/WebdriverJS中设置默认浏览器窗口大小,javascript,angularjs,selenium-webdriver,webdriver,protractor,Javascript,Angularjs,Selenium Webdriver,Webdriver,Protractor,出于某种原因,当我在工作中运行测试时,浏览器会最大化,但当我在家中运行测试时,它只会打开一个大约50%宽的浏览器窗口。这会导致向下滚动等出现一些差异,因此我希望在运行测试的每台机器上打开一个大小相同的浏览器窗口。最好的方法是什么 (我已经为其他语言找到了一些答案,但我无法将它们改编成JavaScript) 添加 browser.executeScript('window.moveTo(0,0);' + 'window.resizeTo(screen.width, screen.heigh

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

(我已经为其他语言找到了一些答案,但我无法将它们改编成JavaScript)

添加

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

不执行任何操作(显然,Google Chrome不支持
window.moveTo
window.resizeTo

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

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

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

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

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


来源:

如果首选方法:

browser.driver.manage().window().maximize();
不适合您(例如,在Xvfb中运行量角器测试),那么您也可以通过这种方式最大化窗口(dragrator.conf.js):

打字稿版本:

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]);
            });
        });
    }
};
从“量角器”导入{Config,browser};
导出let配置:配置={
...
onPrepare:()=>{
设置超时(()=>{
browser.driver.executeScript(()=>{
返回[
window.screen.availWidth,
window.screen.availHeight
];
}).然后((结果:[编号,编号])=>{
browser.driver.manage().window().setSize(结果[0],结果[1]);
});
});
}
};

我只是简单地将下面的代码添加到我的dragrator.conf.js文件中,它确实工作得很好

onPrepare: function() {
    var width = 1600;
    var height = 1200;
    browser.driver.manage().window().setSize(width, height);
},
setTimeout和executeScript在您的答案中起什么作用?我努力在量角器文档中找到最佳实践


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

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

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

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

capabilities: {
    'browserName': 'chrome',
    chromeOptions: {
      args: [
               'start-maximized'
            ]
    }
}
在Selenium 4(量角器6)中,
setRect
替换
setSize
setPosition

比如说,

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

按照下面的说明修改您的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
    }
},

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

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

如果您想使用
async/wait

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



我现在还没有答案,但我可以告诉你,
window.moveTo
window.scrollTo
绝对受Chrome.scrollTo的支持。但其他人没有,至少从我所知道的来看不是。尝试在控制台中键入它…什么都不做。冒着脱离主题的风险,这说明了
window.moveTo
window.resizeTo
。它在铬上对我很好。我不知道你是否可以在Chrome中从控制台调整当前窗口的大小,但是
resizeTo
方法在那里可用这一事实表明Chrome支持它。好的,似乎正在为浏览器用JS打开的新窗口工作。但不适用于当前窗口,这正是我所需要的。我的测试是测试在不同的响应配置中是否工作以及是否可见,因此我需要能够控制每次测试的窗口大小。还可以使用
browser.driver.manage().window().maximize()将浏览器最大化为全屏大小
如果希望所有测试都具有相同的分辨率,可以在
Gragrator.conf.js
文件的
onPrepare
函数中调用上述函数。@BenSmith不确定原因,但
browser.driver.manage().window().maximize()实际上并没有为我最大化窗口。我只是有一个稍微大一点的窗户。我只是用
setSize()指定了一个宽度和高度method@AlexandrosSpyropoulos:它应该可以工作,但您必须确保您没有以某种愚蠢的分辨率运行xvfb。例如,默认值为640x480。@LeeGee更新了答案。最好的IDEA具有自动获取最大分辨率,但您忘记了设置位置(0,0),因此它将完全位于屏幕上。嗯,我的浏览器已经在位置0-0处启动。但如果有人需要它,这是很好的一点。我的开始于。。。50,50或是别的什么。。只是说:)这可能取决于操作系统,这里是Windows 8.1在Hyper V6内部运行。您需要删除双破折号:args:['window-size=800600']这对我来说就像答案中所示的双破折号一样有效。这还设置了在运行带有'--headless'args'的e2e脚本时的浏览器大小。如果菜单切换到移动视图,这很方便。欢迎使用stackoverflow。已经有一些答案为这些信息提供了更多的解释。请确保您的答案为问题添加了新内容。
browser.driver.manage().window().maximize();
// protractor.conf.js

exports.config = {

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