Como definir o tamanho da janela do navegador padrão no transferidor / WebdriverJS

Por alguma razão, quando executo meus testes no trabalho, o navegador é maximizado, mas quando os executo em casa, ele só abre uma janela do navegador com cerca de 50% de largura. Isso causa algumas discrepâncias com a rolagem para baixo, etc, então eu gostaria de ter uma janela do navegador do mesmo tamanho em todas as máquinas em que os testes são executados. Qual é a melhor forma de fazer isso? (Encontrei algumas respostas para outras linguagens, mas não consegui adaptá-las para o javascript)

Adicionando

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

não faz nada (aparentemente window.moveTo e window.resizeTo não são suportados pelo chrome).

Você pode definir o tamanho do navegador padrão executando:

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

Para maximizar a execução da janela do navegador:

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

Para definir a corrida de posição:

 var x = 150; var y = 100; browser.driver.manage().window().setPosition(x, y); 

Se você receber um erro:

 WebDriverError: unknown error: operation is unsupported with remote debugging 

Operação não suportada ao usar a debugging remota Alguns comandos do WebDriver (por exemplo, resize a janela do navegador) exigem que uma extensão do Chrome seja carregada no navegador. O ChromeDriver normalmente carrega essa “extensão de automação” toda vez que inicia uma nova session do Google Chrome.

No entanto, o ChromeDriver pode ser instruído a se conectar a uma session existente do Google Chrome em vez de iniciar uma nova. Isso é feito usando ‘debuggerAddress’ no object Capabilities (aka ChromeOptions). Como a extensão de automação é carregada apenas na boot, há alguns comandos que o ChromeDriver não suporta ao trabalhar com sessões existentes por meio de debugging remota.

Se você vir o erro “operação não suportada ao usar a debugging remota”, tente rewrite o teste para que ele inicie uma nova session do Google Chrome. Isso pode ser feito removendo ‘debuggerAddress’ do object Capabilities.

Fonte: https://sites.google.com/a/chromium.org/chromedriver/help/operation-not-supported-when-using-remote-debugging

Você também pode usar seu config.js para definir o tamanho da janela:

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

Se o método preferido:

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

não funciona para você (por exemplo, executando testes do Protractor no Xvfb), então você também pode maximizar a janela dessa maneira (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); }); }); }, 

Versão do 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]); }); }); } }; 

Eu simplesmente adicionei o código abaixo no meu arquivo protractor.conf.js e ele funcionou bem.

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

Qual é a finalidade do setTimeout e do executeScript na sua resposta? Eu me esforço para encontrar as melhores práticas nos documentos do transferidor …

A meu ver, usar diretamente maximize () é uma má ideia e não deve ser o método preferido, já que não definiria o mesmo tamanho em todas as máquinas onde os testes são executados e poderia quebrar comportamentos responsivos.