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

107

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

Добавление

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

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

Jraede
источник
В настоящее время у меня нет ответа для вас, но я могу вам это сказать, window.moveToи window.scrollToони определенно поддерживаются Chrome.
Colin Brock
scrollTo работает. Но другие этого не делают, по крайней мере, насколько я могу судить. Попробуйте набрать его в консоли ... ничего не делает.
jraede
Рискуя отклониться от темы, вот скрипка, которая иллюстрирует window.moveToи window.resizeTo. У меня он отлично работает в Chrome. Я не знаю, можно ли изменить размер текущего окна с консоли в Chrome, но тот факт, что resizeToметод там доступен, указывает на то, что Chrome поддерживает его.
Колин Брок
Хорошо, похоже, работает для новых окон, которые браузер открывает с помощью JS. Но не работает с текущим окном, что мне и нужно.
jraede
1
Мой тест заключается в том, работает ли что-то и отображается ли оно в разных адаптивных конфигурациях, поэтому мне нужно иметь возможность контролировать размер окна для каждого теста.
jraede

Ответы:

192

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

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

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

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

Рэзван Флавиус Панда
источник
10
Также можно развернуть браузер до полного размера экрана, используяbrowser.driver.manage().window().maximize();
Бен Смит
8
Если вы хотите иметь одинаковое разрешение для всех ваших тестов, вы можете вызвать указанное выше в функции вашего protractor.conf.jsфайла onPrepare.
nwinkler
1
@BenSmith не уверен, почему, но на browser.driver.manage().window().maximize();самом деле не увеличивает окно для меня. У меня просто окно чуть больше. Я просто указываю ширину и высоту с помощью setSize()метода
jetcom
1
@AlexandrosSpyropoulos: он должен работать, но вы должны убедиться, что вы не используете xvfb в каком-то глупом разрешении. Например, по умолчанию это 640x480.
Тадас Саснаускас
1
@LeeGee Обновленный ответ.
Рэзван Флавиус Панда
42

Вы также можете использовать свой, config.jsчтобы установить размер окна:

// config.js
specs: [
    ...
],
capabilities: {
    browserName: 'chrome',
    chromeOptions: {
        args: ['--window-size=800,600'] // THIS!
    }
}
// ....
е-шфиют
источник
вам нужно удалить двойное тире: args: ['window-size = 800,600']
ezain
3
Для меня это работает так, как ожидалось, с двойным тире, как показано в ответе.
Monkpit 01
Это также устанавливает размеры браузера при запуске сценариев e2e с аргументами '--headless'. Это удобно, если меню переведено в мобильный вид.
tony2tones
28

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

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]);
            });
        });
    }
};
Мартин Снапка
источник
лучшая идея с автоматическим получением максимального разрешения, но вы забыли setPosition (0, 0), поэтому он будет точно над экраном
Эндрю
Хм, мой браузер уже запускается с позиции 0-0. Но хороший момент, если кому-то это нужно.
Мартин Снапка,
у меня начинается с ... 50,50 или около того .. просто говорю :)
Эндрю
это может зависеть от ОС, здесь Windows 8.1 работает внутри Hyper-V
Эндрю
16

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

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

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

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

Эрик Бурель
источник
4

В Selenium 4 (Protractor 6) setRectзаменяет setSizeиsetPosition

Например,

browser.driver.manage().window().setRect({height: 600, width: 800});
Эндрю Шлей
источник
3

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

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

Притам Маске
источник
0

Измените файл config.js, как показано ниже.

 onPrepare: function () {
      browser.driver.manage().window().setSize(1280, 1024); //width , height

       }, 
 capabilities: {
browserName: 'chrome',
chromeOptions: {
args: [ "--start-maximized" ] // to start browser as maximixed 
         }
    },
Самира Де Силва
источник
-1

Добавьте ниже код, это увеличит окно браузера

browser.driver.manage().window().maximize();
Бриджеш Ядав
источник
Добро пожаловать в stackoverflow. Уже есть ответы, которые предоставляют эту информацию с гораздо более подробным объяснением. Убедитесь, что ваши ответы добавляют что-то новое к вопросу.
Simon.SA