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


107

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

Добавление

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

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


В настоящее время у меня нет ответа для вас, но я могу вам это сказать, 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.