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.
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.