Cómo configurar el tamaño predeterminado de la ventana del navegador en Transportador / WebdriverJS

107

Por alguna razón, cuando ejecuto mis pruebas en el trabajo, el navegador se maximiza, pero cuando las ejecuto en casa, solo abre una ventana del navegador de aproximadamente un 50% de ancho. Esto causa algunas discrepancias con el desplazamiento hacia abajo, etc., por lo que idealmente me gustaría que se abriera una ventana del navegador del mismo tamaño en cada máquina en la que se ejecutan las pruebas. ¿Cuál es la mejor manera de hacer esto? (Encontré algunas respuestas para otros idiomas, pero no he podido adaptarlas a javascript)

Añadiendo

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

no hace nada (aparentemente window.moveToy window.resizeTono son compatibles con Chrome).

jraede
fuente
No tengo una respuesta para ti en este momento, pero puedo decirte eso window.moveToy window.scrollTodefinitivamente Chrome es compatible.
Colin Brock
scrollTo funciona. Pero los demás no lo hacen, al menos no por lo que puedo decir. Intente escribirlo en la consola ... no hace nada.
jraede
A riesgo de salirse del tema, aquí hay un violín que ilustra window.moveToy window.resizeTo. Me funciona bien en Chrome. No sé si puede cambiar el tamaño de la ventana actual desde la consola en Chrome, pero el hecho de que el resizeTométodo esté disponible allí indica que Chrome lo admite.
Colin Brock
Ok, parece funcionar para nuevas ventanas que el navegador abre con JS. Pero no funciona con la ventana actual, que es lo que necesito.
jraede
1
Mi prueba es para ver si las cosas funcionan o no y si son visibles en diferentes configuraciones de respuesta, por lo que necesito poder controlar el tamaño de la ventana para cada prueba.
jraede

Respuestas:

191

Puede establecer el tamaño predeterminado del navegador ejecutando:

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

Para maximizar la ventana del navegador, ejecute:

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

Para configurar la carrera de posición:

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

Si recibe un error:

WebDriverError: unknown error: operation is unsupported with remote debugging

Operación no admitida cuando se usa la depuración remota Algunos comandos de WebDriver (por ejemplo, cambiar el tamaño de la ventana del navegador) requieren que se cargue una extensión de Chrome en el navegador. ChromeDriver normalmente carga esta "extensión de automatización" cada vez que inicia una nueva sesión de Chrome.

Sin embargo, se puede indicar a ChromeDriver que se conecte a una sesión de Chrome existente en lugar de iniciar una nueva. Esto se hace usando 'debuggerAddress' en el objeto Capabilities (también conocido como ChromeOptions). Dado que la extensión de automatización solo se carga al inicio, hay algunos comandos que ChromeDriver no admite cuando se trabaja con sesiones existentes a través de la depuración remota.

Si ves el error "operación no compatible cuando se usa la depuración remota", intenta reescribir la prueba para que inicie una nueva sesión de Chrome. Esto se puede hacer eliminando 'debuggerAddress' del objeto Capabilities.

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

Panda Răzvan Flavius
fuente
10
También es posible maximizar el navegador al tamaño de pantalla completa usandobrowser.driver.manage().window().maximize();
Ben Smith
8
Si desea tener la misma resolución para todas sus pruebas, puede llamar a lo anterior en protractor.conf.jsla onPreparefunción de su archivo .
nwinkler
1
@BenSmith no está seguro de por qué, pero en browser.driver.manage().window().maximize();realidad no maximiza la ventana para mí. Solo tengo una ventana un poco más grande. Acabo de especificar un ancho y una altura con el setSize()método
jetcom
1
@AlexandrosSpyropoulos: debería funcionar, pero debes asegurarte de que no estás ejecutando xvfb en una resolución tonta. Por ejemplo, por defecto es 640x480.
Tadas Sasnauskas
1
@LeeGee Respuesta actualizada.
Răzvan Flavius ​​Panda
42

También puede usar su config.jspara configurar el tamaño de la ventana:

// config.js
specs: [
    ...
],
capabilities: {
    browserName: 'chrome',
    chromeOptions: {
        args: ['--window-size=800,600'] // THIS!
    }
}
// ....
e-shfiyut
fuente
necesita eliminar el guión doble: args: ['window-size = 800,600']
ezain
3
Esto funciona como se esperaba para mí CON el guión doble como se muestra en la respuesta.
Monkpit
Esto también establece los tamaños del navegador cuando se ejecutan scripts e2e con los argumentos '--headless'. Lo cual es útil si el menú se cambia a la vista móvil.
tony2tones
28

Si el método preferido:

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

no funciona para usted (por ejemplo, ejecutar pruebas de transportador en Xvfb), entonces también puede maximizar la ventana de esta manera (transportador.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);
        });
    });
},

Versión de 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
fuente
la mejor idea con la resolución máxima de obtención automática, pero olvidó setPosition (0, 0), por lo que estará exactamente sobre la pantalla
Andrew
Hm, mi navegador ya comienza en la posición 0-0. Pero buen punto si alguien lo necesita.
Martin Sznapka
el mío comienza en ... 50,50 o algo ... solo digo :)
Andrew
puede depender del sistema operativo, aquí es Windows 8.1 que se ejecuta dentro de Hyper-V
Andrew
16

Simplemente agregué el código a continuación en mi archivo protractor.conf.js y funcionó bien.

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

¿Qué propósito tienen setTimeout y executeScript en su respuesta? Lucho por encontrar las mejores prácticas en los documentos del transportador ...

En mi opinión, usar maximizar () directamente es una mala idea y no debería ser el método preferido, ya que no establecería el mismo tamaño en todas las máquinas donde se ejecutan las pruebas y podría romper los comportamientos de respuesta.

Eric Burel
fuente
4

En Selenio 4 (Transportador 6), setRectreemplazasetSize ysetPosition

Por ejemplo,

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

En el archivo Protractor.conf.js agregue la siguiente configuración

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

Máscara de Pritam
fuente
0

Modifique su archivo config.js como se indica a continuación.

 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
fuente
-1

Agregue el siguiente código, esto maximizará la ventana del navegador

browser.driver.manage().window().maximize();
Brijesh Yadav
fuente
Bienvenido a stackoverflow. Ya existen respuestas que brindan esta información con mucha más explicación. Asegúrese de que sus respuestas agreguen algo nuevo a la pregunta.
Simon.SA