【问题标题】:How to set default browser window size in Protractor/WebdriverJS如何在 Protractor/WebdriverJS 中设置默认浏览器窗口大小
【发布时间】:2013-11-30 04:10:00
【问题描述】:

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

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

添加

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

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

【问题讨论】:

  • 我目前无法为您解答,但我可以告诉您,Chrome 肯定支持 window.moveTowindow.scrollTo
  • scrollTo 有效。但其他人没有,至少据我所知不是。尝试在控制台中输入它...什么也不做。
  • 冒着跑题的风险,here is a fiddle 说明了window.moveTowindow.resizeTo。它在 Chrome 中对我来说很好用。我不知道您可以在 Chrome 的控制台中调整当前窗口的大小,但 resizeTo 方法可用的事实表明 Chrome 支持它。
  • 好的,似乎适用于浏览器使用 JS 打开的新窗口。但不适用于当前窗口,这是我需要的。
  • 我的测试是看事物是否工作并且在不同的响应配置中可见,所以我需要能够控制每个测试的窗口大小。

标签: javascript angularjs selenium-webdriver webdriver protractor


【解决方案1】:

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

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 会议。这可以通过从 能力对象。

来源:Operation not supported when using remote debugging

【讨论】:

  • 也可以使用browser.driver.manage().window().maximize();将浏览器最大化到全屏尺寸
  • 如果您想为所有测试使用相同的分辨率,您可以在protractor.conf.js 文件的onPrepare 函数中调用上述方法。
  • @BenSmith 不知道为什么,但 browser.driver.manage().window().maximize(); 实际上并没有为我最大化窗口。我只是得到一个稍微大一点的窗口。我只是最终使用setSize() 方法指定宽度和高度
  • @AlexandrosSpyropoulos :它应该可以工作,但你必须确保你没有以某种愚蠢的分辨率运行 xvfb。例如默认为 640x480。
  • @LeeGee 更新答案。
【解决方案2】:

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

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

【讨论】:

  • 你需要删除双破折号:args: ['window-size=800,600']
  • 这对我来说可以按预期使用双破折号,如答案所示。
  • 这也设置了在运行带有“--headless”参数的 e2e 脚本时浏览器的大小。如果菜单转移到移动视图,这很方便。
【解决方案3】:

如果首选方法:

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) 所以它会正好在屏幕上
  • 嗯,我的浏览器已经从位置 0-0 开始了。但是,如果有人需要它,那就太好了。
  • 我的开始于...... 50,50 或其他......只是说:)
  • 它可能取决于操作系统,这里是在 Hyper-V 中运行的 Windows 8.1
【解决方案4】:

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

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

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

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

【讨论】:

    【解决方案5】:

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

    例如,

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

    【讨论】:

      【解决方案6】:

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

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

      【讨论】:

        【解决方案7】:

        如下修改你的 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
            }
        },
        

        【讨论】:

          【解决方案8】:

          如果你想和async/await一起去

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

          // protractor.conf.js
          
          exports.config = {
          
              async onPrepare() {
                  // start browser in specified window size
                  await browser.driver
                      .manage()
                      .window()
                      .setSize(1920, 1080);
              },
          }
          
          

          【讨论】:

            【解决方案9】:

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

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

            【讨论】:

            • 欢迎来到stackoverflow。已经有答案为这些信息提供了更多解释。请确保您的回答为问题添加了一些新内容。
            猜你喜欢
            • 2011-07-17
            • 2013-08-25
            • 2012-11-27
            • 1970-01-01
            • 1970-01-01
            • 2012-07-24
            • 1970-01-01
            • 1970-01-01
            • 2017-09-22
            相关资源
            最近更新 更多