Como definir o tamanho da janela do navegador padrão em Protractor / WebdriverJS

107

Por alguma razão, quando eu executo meus testes no trabalho, o navegador está maximizado, mas quando eu os executo em casa ele apenas abre uma janela do navegador com cerca de 50% de largura. Isso causa algumas discrepâncias com a rolagem para baixo etc., portanto, o ideal é que ele abra uma janela do navegador do mesmo tamanho em cada máquina em que os testes são executados. Qual é a melhor forma de fazer isso? (Encontrei algumas respostas para outros idiomas, mas não consegui adaptá-las para javascript)

Adicionando

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

não faz nada (aparentemente window.moveToe window.resizeTonão são suportados pelo cromo).

jraede
fonte
Não tenho uma resposta para você no momento, mas posso dizer isso window.moveToe window.scrollTodefinitivamente são suportados pelo Chrome.
Colin Brock
scrollTo funciona. Mas os outros não, pelo menos não pelo que posso dizer. Tente digitá-lo no console ... não faz nada.
jraede de
Correndo o risco de sair do assunto, aqui está um violino que ilustra window.moveToe window.resizeTo. Funciona bem para mim no Chrome. Não sei se você pode redimensionar a janela atual do console no Chrome, mas o fato de o resizeTométodo estar disponível ali indica que o Chrome o suporta.
Colin Brock
Ok, parece estar funcionando para novas janelas que o navegador abre com JS. Mas não funciona com a janela atual, que é o que eu preciso.
jraede de
1
Meu teste é para ver se as coisas funcionam ou não e são visíveis em diferentes configurações responsivas, então eu preciso ser capaz de controlar o tamanho da janela para cada teste.
jraede

Respostas:

191

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

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

Para maximizar a janela do navegador, execute:

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

Para definir a posição de execuçã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 depuração remota Alguns comandos WebDriver (por exemplo, redimensionar 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 sessão do Chrome.

No entanto, o ChromeDriver pode ser instruído a se conectar a uma sessão existente do Chrome em vez de iniciar uma nova. Isso é feito usando 'debuggerAddress' no objeto Capabilities (também conhecido como ChromeOptions). Como a extensão de automação só é carregada na inicialização, existem alguns comandos que o ChromeDriver não oferece suporte ao trabalhar com sessões existentes por meio de depuração remota.

Se você vir o erro "operação não suportada ao usar depuração remota", tente reescrever o teste para que ele inicie uma nova sessão do Chrome. Isso pode ser feito removendo 'debuggerAddress' do objeto Capabilities.

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

Răzvan Flavius ​​Panda
fonte
10
Também é possível maximizar o navegador para o tamanho de tela inteira usandobrowser.driver.manage().window().maximize();
Ben Smith
8
Se você quiser ter a mesma resolução para todos os seus testes, você pode chamar o acima na função protractor.conf.jsdo seu arquivo onPrepare.
nwinkler
1
@BenSmith não sabe por quê, mas browser.driver.manage().window().maximize();não maximiza a janela para mim. Acabei de obter uma janela um pouco maior. Acabei especificando uma largura e altura com o setSize()método
jetcom
1
@AlexandrosSpyropoulos: deve funcionar, mas você tem que se certificar de que não está executando o xvfb em uma resolução boba. Por exemplo, por padrão é 640x480.
Tadas Sasnauskas de
1
Resposta atualizada do @LeeGee.
Răzvan Flavius ​​Panda de
42

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

// config.js
specs: [
    ...
],
capabilities: {
    browserName: 'chrome',
    chromeOptions: {
        args: ['--window-size=800,600'] // THIS!
    }
}
// ....
e-shfiyut
fonte
você precisa remover o traço duplo: args: ['window-size = 800.600']
ezain
3
Isso funciona conforme o esperado para mim COM o traço duplo, conforme mostrado na resposta.
Monkpit 01 de
Isso também define os tamanhos do navegador ao executar scripts e2e com os argumentos '--headless'. O que é útil se o menu mudar para a visualização móvel.
tony2tones
28

Se o método preferido:

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

não funciona para você (por exemplo, executar testes do Protractor no Xvfb), então você também pode maximizar a janela desta forma (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 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]);
            });
        });
    }
};
Martin Sznapka
fonte
melhor ideea com resolução máxima de obtenção automática, mas você esqueceu setPosition (0, 0), então será exatamente sobre a tela
Andrew
Hm, meu navegador já começa na posição 0-0. Mas bom ponto se alguém precisar.
Martin Sznapka,
o meu começa em ... 50,50 ou algo assim .. apenas dizendo :)
Andrew
pode depender do sistema operacional, aqui está o Windows 8.1 rodando dentro do Hyper-V
Andrew
16

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

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

Qual é o propósito de setTimeout e executeScript em sua resposta? Tenho dificuldade em encontrar as melhores práticas nos documentos do transferidor ...

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

Eric Burel
fonte
4

No Selênio 4 (Transferidor 6), setRectsubstitui setSizeesetPosition

Por exemplo,

browser.driver.manage().window().setRect({height: 600, width: 800});
Andrew Schlei
fonte
3

No arquivo Protractor.conf.js, adicione a seguinte configuração

recursos: {'browserName': 'chrome', chromeOptions: {args: ['start-maximized']}}

Pritam Maske
fonte
0

Modifique seu arquivo config.js conforme abaixo.

 onPrepare: function () {
      browser.driver.manage().window().setSize(1280, 1024); //width , height

       }, 
 capabilities: {
browserName: 'chrome',
chromeOptions: {
args: [ "--start-maximized" ] // to start browser as maximixed 
         }
    },
Sameera De Silva
fonte
-1

Adicione o código abaixo, isso irá maximizar a janela do navegador

browser.driver.manage().window().maximize();
Brijesh Yadav
fonte
Bem-vindo ao stackoverflow. Já existem respostas que fornecem esta informação com muito mais explicação. Certifique-se de que suas respostas adicionem algo novo à pergunta.
Simon.SA