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


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


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!
    }
}
// ....

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

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.


4

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

Por exemplo,

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

3

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

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


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 
         }
    },

-1

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

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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.