Як встановити розмір вікна браузера за замовчуванням у 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.
Колін Брок

прокруткаВи працює. Але інші ні, принаймні не з того, що я можу сказати. Спробуйте ввести його в консоль ... нічого не робить.
jraede

Загрожуючи зайти поза темою, ось загадка, яка ілюструє window.moveToта window.resizeTo. Для мене це добре працює в Chrome. Я не знаю, що ви можете змінити розмір поточного вікна з консолі в Chrome, але той факт, що resizeToметод доступний там, вказує на підтримку Chrome.
Колін Брок

Гаразд, здається, працює над новими вікнами, які браузер відкриває за допомогою JS. Але це не працює з поточним вікном, що саме мені потрібно.
jraede

1
Мій тест полягає в тому, чи спрацьовують справи чи ні, чи вони видно в різних чутливих конфігураціях, тому мені потрібно мати можливість контролювати розмір вікна для кожного тесту.
jraede

Відповіді:


191

Ви можете встановити розмір браузера за замовчуванням, виконавши:

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" в об'єкті Capability (він же ChromeOptions). Оскільки розширення автоматизації завантажується лише при запуску, є деякі команди, які ChromeDriver не підтримує під час роботи з існуючими сеансами за допомогою віддаленої налагодження.

Якщо ви бачите помилку "операція не підтримується при використанні віддаленої налагодження", спробуйте переписати тест, щоб він запустив новий сеанс Chrome. Це можна зробити, видаливши 'debuggerAddress' з об’єкта Capability.

Джерело: 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()
вказівку

1
@AlexandrosSpyropoulos: це має працювати, але ви повинні переконатися, що ви не запускаєте xvfb з деякою дурною роздільною здатністю. Наприклад, за замовчуванням це 640x480.
Tadas Sasnauskas

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

Це також встановлює розміри браузера під час запуску сценаріїв e2e з аргументами '- без голови'. Що зручно, якщо меню переходить на перегляд для мобільних пристроїв.
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
Andrew

16

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

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

Якій меті слугують setTimeout та ExecuteScript у вашій відповіді? Я намагаюся знайти кращі практики в документах транспортування ...

На мій погляд, використання прямого максимізування () є поганою ідеєю і не повинно бути бажаним методом, оскільки воно не встановлюватиме однаковий розмір на кожній машині, де виконуються тести, і може порушити реакцію поведінки.


4

У селені 4 (транспортир 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.