83

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

Добавление

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

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

+0

у меня нет ответа для вас в это время, но я могу вам сказать, что '' window.moveTo' и window.scrollTo 'определенно поддерживаются Chrome. –

+0

scrollTo работает. Но другие не делают, по крайней мере, не из того, что я могу сказать. Попробуйте ввести его в консоль ... ничего не делает. – jraede

+0

Рискуя выйти из темы, [здесь скрипка] (http://jsfiddle.net/z3wfk/), которая иллюстрирует 'window.moveTo' и' window.resizeTo'. Он отлично работает для меня в Chrome.Я не знаю, что вы можете изменить размер текущего окна с консоли в Chrome, но тот факт, что доступен метод resizeTo, указывает, что Chrome поддерживает его. –

ответ

151

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

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 

Operation not supported when using remote debugging Some WebDriver commands (e.g. resizing the browser window) require a Chrome extension to be loaded into the browser. ChromeDriver normally loads this "automation extension" every time it launches a new Chrome session.

However ChromeDriver can be instructed to connect to an existing Chrome session instead of launching a new one. This is done using 'debuggerAddress' in the Capabilities (aka ChromeOptions) object. Since the automation extension is only loaded at startup, there are some commands that ChromeDriver does not support when working with existing sessions through remote debugging.

If you see the error "operation not supported when using remote debugging", try rewriting the test so that it launches a new Chrome session. This can be done by removing 'debuggerAddress' from the Capabilities object.

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

+8

Также возможно увеличить браузер до полного размера экрана с помощью' browser.driver. manage(). window(). maximize(); ' –

+0

@BenSmith: Я упомянул об этом со своего первоначального ответа :) –

+8

Если вы хотите иметь такое же разрешение для всех своих тестов, вы можете вызвать это в своем« транспортире » .conf.js' файл 'onPrepare'. – nwinkler

21

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

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

не работает для вас (например, работает транспортир тесты в 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); 
     }); 
    }); 
}, 

машинопись версия:

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]); 
      }); 
     }); 
    } 
}; 
+0

best ideea с авто макс. Разрешением, но вы забыли setPosition (0, 0), так что это будет точно по экрану – Andrew

+0

Хм, мой браузер уже начинается с позиции 0-0. Но хороший момент, если кому-то это понадобится. –

+0

шахта начинается с ... 50,50 или что-то .. просто говорит :) – Andrew

12

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

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

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

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

21

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

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

вам нужно удалить двойную тире: args: ['window-size = 800 600 '] – ezain

+2

Это работает как ожидалось для меня. С двойной чертой, как показано в ответе. – Monkpit

+0

Идеально подходит для меня. И приятно иметь возможность устанавливать размеры экрана без магии кода. –

Смежные вопросы