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


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

добавлять

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

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

4 89

4 ответа:

вы можете установить размер браузера по умолчанию, запустив:

var width = 800;
var height = 600;
browser.driver.manage().window().setSize(width, height);

чтобы развернуть окно браузера запустите:

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

для установки положения run:

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 может быть проинструктирован для подключения к существующему Хром сессии вместо того, чтобы запустить новый. Это делается с помощью 'debuggerAddress' в объекте Capabilities (aka ChromeOptions). С расширением автоматизации загружается только при запуске, есть некоторые команды, которые ChromeDriver не поддерживает при работе с существующие сеансы через удаленную отладку.

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

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

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

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

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

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

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

Я просто добавил код ниже в мой транспортир.конф.JS файл и он работает нормально.

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

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

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