So legen Sie die Standardgröße des Browserfensters in Protractor / WebdriverJS fest

107

Aus irgendeinem Grund wird der Browser maximiert, wenn ich meine Tests bei der Arbeit ausführe. Wenn ich sie jedoch zu Hause ausführe, wird nur ein Browserfenster mit einer Breite von ca. 50% geöffnet. Dies führt zu einigen Unstimmigkeiten beim Scrollen nach unten usw., daher möchte ich, dass auf jedem Computer, auf dem die Tests ausgeführt werden, ein Browserfenster gleicher Größe geöffnet wird. Was ist der beste Weg, dies zu tun? (Ich habe einige Antworten für andere Sprachen gefunden, konnte sie jedoch nicht an Javascript anpassen.)

Hinzufügen

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

tut nichts (anscheinend window.moveTound window.resizeTowerden nicht von Chrom unterstützt).

jraede
quelle
Ich habe derzeit keine Antwort für Sie, aber ich kann Ihnen das sagen window.moveTound werde window.scrollTodefinitiv von Chrome unterstützt.
Colin Brock
scrollTo funktioniert. Aber die anderen nicht, zumindest nicht nach dem, was ich sagen kann. Versuchen Sie es in der Konsole einzugeben ... tut nichts.
jraede
Auf die Gefahr Wegthema bekommen, hier ist eine Geige , die veranschaulicht window.moveTound window.resizeTo. Es funktioniert gut für mich in Chrome. Ich weiß nicht, dass Sie die Größe des aktuellen Fensters über die Konsole in Chrome ändern können, aber die Tatsache, dass die resizeToMethode dort verfügbar ist, zeigt an, dass Chrome sie unterstützt.
Colin Brock
Ok, scheint für neue Fenster zu funktionieren, die der Browser mit JS öffnet. Funktioniert aber nicht mit dem aktuellen Fenster, was ich brauche.
jraede
1
Mein Test besteht darin, ob Dinge funktionieren und in verschiedenen reaktionsfähigen Konfigurationen sichtbar sind. Daher muss ich in der Lage sein, die Fenstergröße für jeden Test zu steuern.
jraede

Antworten:

191

Sie können die Standardgröße des Browsers festlegen, indem Sie Folgendes ausführen:

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

So maximieren Sie die Ausführung des Browserfensters:

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

So stellen Sie den Positionslauf ein:

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

Wenn Sie eine Fehlermeldung erhalten:

WebDriverError: unknown error: operation is unsupported with remote debugging

Vorgang bei Remote-Debugging nicht unterstützt Bei einigen WebDriver-Befehlen (z. B. Ändern der Größe des Browserfensters) muss eine Chrome-Erweiterung in den Browser geladen werden. ChromeDriver lädt diese "Automatisierungserweiterung" normalerweise jedes Mal, wenn eine neue Chrome-Sitzung gestartet wird.

ChromeDriver kann jedoch angewiesen werden, eine Verbindung zu einer vorhandenen Chrome-Sitzung herzustellen, anstatt eine neue zu starten. Dies erfolgt über 'debuggerAddress' im Capabilities-Objekt (auch bekannt als ChromeOptions). Da die Automatisierungserweiterung nur beim Start geladen wird, gibt es einige Befehle, die ChromeDriver nicht unterstützt, wenn Sie mit vorhandenen Sitzungen über Remote-Debugging arbeiten.

Wenn der Fehler "Vorgang bei Verwendung des Remote-Debugging nicht unterstützt" angezeigt wird, schreiben Sie den Test neu, damit eine neue Chrome-Sitzung gestartet wird. Dies kann durch Entfernen von 'debuggerAddress' aus dem Capabilities-Objekt erfolgen.

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

Răzvan Flavius ​​Panda
quelle
10
Es ist auch möglich, den Browser auf die volle Bildschirmgröße zu maximieren, indem Siebrowser.driver.manage().window().maximize();
Ben Smith
8
Wenn Sie für alle Ihre Tests dieselbe Auflösung haben möchten, können Sie die oben protractor.conf.jsgenannten onPrepareFunktionen in der Funktion Ihrer Datei aufrufen .
Nwinkler
1
@ BenSmith weiß nicht warum, browser.driver.manage().window().maximize();maximiert aber nicht wirklich das Fenster für mich. Ich bekomme nur ein etwas größeres Fenster. Ich setSize()
gebe
1
@AlexandrosSpyropoulos: Es sollte funktionieren, aber Sie müssen sicherstellen, dass Sie xvfb nicht in einer dummen Auflösung ausführen. Zum Beispiel ist es standardmäßig 640x480.
Tadas Sasnauskas
1
@ LeeGee Aktualisierte Antwort.
Răzvan Flavius ​​Panda
42

Sie können auch Ihre config.jsFenstergröße verwenden , um Folgendes festzulegen:

// config.js
specs: [
    ...
],
capabilities: {
    browserName: 'chrome',
    chromeOptions: {
        args: ['--window-size=800,600'] // THIS!
    }
}
// ....
e-shfiyut
quelle
Sie müssen Double Dash entfernen: Argumente: ['Fenstergröße = 800.600']
Ezain
3
Dies funktioniert wie erwartet für mich MIT dem Doppelstrich, wie in der Antwort gezeigt.
Monkpit
Dadurch werden auch die Browsergrößen festgelegt, wenn e2e-Skripte mit den Argumenten '--headless' ausgeführt werden. Das ist praktisch, wenn das Menü in die mobile Ansicht verschoben wird.
Tony2tones
28

Wenn die bevorzugte Methode:

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

funktioniert bei Ihnen nicht (z. B. Ausführen von Winkelmessertests in Xvfb), dann können Sie das Fenster auch auf diese Weise maximieren (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);
        });
    });
},

TypeScript-Version:

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
quelle
beste Idee mit Auto erhalten maximale Auflösung, aber Sie haben setPosition (0, 0) vergessen, so dass es genau über dem Bildschirm sein wird
Andrew
Hm, mein Browser startet bereits bei Position 0-0. Aber guter Punkt, wenn jemand es braucht.
Martin Sznapka
meins beginnt um ... 50,50 oder so .. nur sagen :)
Andrew
es kann vom Betriebssystem abhängen, hier ist es Windows 8.1, das in Hyper-V ausgeführt wird
Andrew
16

Ich habe einfach den folgenden Code in meine Datei protractor.conf.js eingefügt und es hat gut funktioniert.

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

Welchen Zweck erfüllen setTimeout und executeScript in Ihrer Antwort? Ich habe Mühe, Best Practices in den Winkelmesser-Dokumenten zu finden ...

Meiner Meinung nach ist die direkte Verwendung von maxim () eine schlechte Idee und sollte nicht die bevorzugte Methode sein, da nicht auf jedem Computer, auf dem die Tests ausgeführt werden, die gleiche Größe festgelegt wird und das Reaktionsverhalten beeinträchtigt werden kann.

Eric Burel
quelle
4

In Selen 4 (Winkelmesser 6) setRectersetzt setSizeundsetPosition

Beispielsweise,

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

Fügen Sie in der Datei Protractor.conf.js die folgende Konfiguration hinzu

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

Pritam Maske
quelle
0

Ändern Sie Ihre Datei config.js wie folgt.

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

Fügen Sie den folgenden Code hinzu, um das Browserfenster zu maximieren

browser.driver.manage().window().maximize();
Brijesh Yadav
quelle
Willkommen bei stackoverflow. Es gibt bereits Antworten, die diese Informationen viel ausführlicher erklären. Bitte stellen Sie sicher, dass Ihre Antworten der Frage etwas Neues hinzufügen.
Simon.SA