Как установить размер окна браузера по умолчанию в Protractor/WebdriverJS

По какой-то причине, когда я запускаю свои тесты на работе, браузер максимизируется, но когда я запускаю их дома, он открывает окно браузера шириной около 50%. Это приводит к некоторым расхождениям при прокрутке вниз и т.д., Поэтому я хотел бы, чтобы он открыл окно браузера того же размера на каждой машине, на которой запущены тесты. Какой лучший способ сделать это? (Я нашел ответы на другие языки, но не смог их адаптировать к javascript)

Добавление

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

ничего не делает (видимо window.moveTo и window.resizeTo не поддерживаются хром).

Ответ 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: unknown error: operation is unsupported with remote debugging

Операция не поддерживается при использовании удаленной отладки. Некоторые WebDriver команды (например, изменение размера окна браузера) требуют расширения Chrome для загрузки в браузер. ChromeDriver обычно загружает этот "расширение автоматизации" при каждом запуске нового сеанса Chrome.

Однако ChromeDriver может быть поручено подключиться к существующему Chrome, вместо запуска нового. Это делается с использованием 'debuggerAddress' в объекте Capabilities (aka ChromeOptions). Поскольку расширение автоматизации загружается только при запуске, есть некоторые команды, которые ChromeDriver не поддерживает при работе с существующих сеансов посредством удаленной отладки.

Если вы видите ошибку "операция не поддерживается при использовании удаленного отладки", попробуйте переписать тест, чтобы он запускал новый Chrome сессия. Это можно сделать, удалив "debuggerAddress" из Объект возможностей.

Источник: https://sites.google.com/a/chromium.org/chromedriver/help/operation-not-supported-when-using-remote-debugging

Ответ 2

Вы также можете использовать config.js для установки размера окна:

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

Ответ 3

Если предпочтительный метод:

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

не работает для вас (например, выполнение тестов Protractor в Xvfb), тогда вы также можете увеличить окно таким образом (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]);
            });
        });
    }
};

Ответ 4

Я просто добавил код ниже в файл protractor.conf.js, и он отлично работал.

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

Какую цель выполняет setTimeout и executeScript в вашем ответе? Я изо всех сил пытаюсь найти лучшие практики в документах транспортира...

На мой взгляд, использование метода maximize() - это плохая идея и не должно быть предпочтительным методом, поскольку он не будет устанавливать одинаковый размер на каждой машине, где выполняются тесты, и может нарушать поведение, реагирующее на запросы.

Ответ 5

В файле Protractor.conf.js добавьте следующую конфигурацию

Возможности: {'browserName': 'chrome', chromeOptions: {args: ['start-maximized']}}