Come impostare la dimensione della finestra del browser predefinita in Goniometro / WebdriverJS


107

Per qualche motivo quando eseguo i miei test al lavoro il browser è ingrandito, ma quando li eseguo a casa si apre solo una finestra del browser di circa il 50% di larghezza. Ciò causa alcune discrepanze con lo scorrimento verso il basso, ecc., Quindi idealmente mi piacerebbe che aprisse una finestra del browser della stessa dimensione su ogni macchina su cui vengono eseguiti i test. Qual'è il miglior modo per farlo? (Ho trovato alcune risposte per altre lingue ma non sono stato in grado di adattarle a javascript)

Aggiunta

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

non fa nulla (apparentemente window.moveToe window.resizeTonon sono supportati da chrome).


Non ho una risposta per te in questo momento, ma posso dirtelo window.moveToe window.scrollTosono sicuramente supportato da Chrome.
Colin Brock

scrollTo funziona. Ma gli altri no, almeno non da quello che posso dire. Prova a digitarlo nella console ... non fa nulla.
jraede

A rischio di andare fuori tema, ecco un violino che illustra window.moveToe window.resizeTo. Funziona bene per me in Chrome. Non so se puoi ridimensionare la finestra corrente dalla console in Chrome, ma il fatto che il resizeTometodo sia disponibile indica che Chrome lo supporta.
Colin Brock

Ok, sembra funzionare per le nuove finestre che il browser apre con JS. Ma non funziona con la finestra corrente, che è ciò di cui ho bisogno.
jraede

1
Il mio test è per verificare se le cose funzionano o meno e sono visibili in diverse configurazioni reattive, quindi devo essere in grado di controllare la dimensione della finestra per ogni test.
jraede

Risposte:


191

Puoi impostare la dimensione predefinita del browser eseguendo:

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

Per massimizzare la finestra del browser eseguire:

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

Per impostare la corsa di posizione:

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

Se ricevi un errore:

WebDriverError: unknown error: operation is unsupported with remote debugging

Operazione non supportata quando si utilizza il debug remoto Alcuni comandi WebDriver (ad esempio il ridimensionamento della finestra del browser) richiedono il caricamento di un'estensione di Chrome nel browser. ChromeDriver normalmente carica questa "estensione di automazione" ogni volta che avvia una nuova sessione di Chrome.

Tuttavia, a ChromeDriver può essere richiesto di connettersi a una sessione di Chrome esistente invece di avviarne una nuova. Questo viene fatto usando "debuggerAddress" nell'oggetto Capabilities (aka ChromeOptions). Poiché l'estensione di automazione viene caricata solo all'avvio, ci sono alcuni comandi che ChromeDriver non supporta quando si lavora con sessioni esistenti tramite il debug remoto.

Se visualizzi l'errore "operazione non supportata durante l'utilizzo del debug remoto", prova a riscrivere il test in modo che avvii una nuova sessione di Chrome. Questo può essere fatto rimuovendo "debuggerAddress" dall'oggetto Capabilities.

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


10
È anche possibile massimizzare il browser a schermo intero utilizzandobrowser.driver.manage().window().maximize();
Ben Smith

8
Se vuoi avere la stessa risoluzione per tutti i tuoi test, puoi chiamare quanto sopra nella funzione protractor.conf.jsdel tuo file onPrepare.
nwinkler

1
@ BenSmith non è sicuro del perché, ma in browser.driver.manage().window().maximize();realtà non massimizza la finestra per me. Ho solo una finestra leggermente più grande. setSize()
Finisco

1
@AlexandrosSpyropoulos: dovrebbe funzionare ma devi assicurarti di non eseguire xvfb con una risoluzione sciocca. Ad esempio, per impostazione predefinita è 640x480.
Tadas Sasnauskas

1
@LeeGee Risposta aggiornata.
Răzvan Flavius ​​Panda

42

Puoi anche usare il tuo config.jsper impostare la dimensione della finestra:

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

è necessario rimuovere il doppio trattino: args: ['window-size = 800,600']
ezain

3
Questo funziona come previsto per me CON il doppio trattino come mostrato nella risposta.
Monkpit

Questo imposta anche le dimensioni del browser quando si eseguono script e2e con gli argomenti '--headless'. Il che è utile se il menu viene spostato sulla visualizzazione mobile.
tony2tones

28

Se il metodo preferito:

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

non funziona per te (ad esempio eseguendo i test di Goniometro in Xvfb), puoi anche massimizzare la finestra in questo modo (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);
        });
    });
},

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

miglior ideea con auto ottieni risoluzione massima, ma hai dimenticato setPosition (0, 0) quindi sarà esattamente sullo schermo
Andrew

Hm, il mio browser inizia già dalla posizione 0-0. Ma buon punto se qualcuno ne ha bisogno.
Martin Sznapka

il mio inizia a ... 50,50 o qualcosa del genere .. sto solo dicendo :)
Andrew

può dipendere dal sistema operativo, qui è Windows 8.1 eseguito all'interno di Hyper-V
Andrew

16

Ho semplicemente aggiunto il codice qui sotto nel mio file protractor.conf.js e ha funzionato bene.

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

Quale scopo hanno setTimeout ed executeScript nella tua risposta? Faccio fatica a trovare le migliori pratiche nei documenti del goniometro ...

A mio avviso, usare direttamente maxim () è una cattiva idea e non dovrebbe essere il metodo preferito, poiché non imposterebbe le stesse dimensioni su ogni macchina in cui vengono eseguiti i test e potrebbe interrompere i comportamenti reattivi.


4

In Selenium 4 (Goniometro 6), setRectsostituisce setSizeesetPosition

Per esempio,

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

3

Nel file Protractor.conf.js aggiungere la seguente configurazione

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


0

Modifica il tuo file config.js come di seguito.

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

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

-1

Aggiungi sotto il codice, questo massimizzerà la finestra del browser

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

Benvenuto in stackoverflow. Ci sono già risposte che forniscono queste informazioni con molte più spiegazioni. Assicurati che le tue risposte aggiungano qualcosa di nuovo alla domanda.
Simon.SA
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.