web-dev-qa-db-de.com

Festlegen der Standardgröße des Browserfensters in Protractor/WebdriverJS

Wenn ich meine Tests bei der Arbeit durchführe, ist der Browser aus irgendeinem Grund maximiert, aber wenn ich sie zu Hause ausführe, wird nur ein Browserfenster mit einer Breite von etwa 50% geöffnet. Dies führt zu Unstimmigkeiten beim Herunterscrollen usw. Es wäre ideal, wenn ich auf jedem Rechner, auf dem die Tests ausgeführt werden, ein Browserfenster derselben Größe öffnen möchte. 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 werden window.moveTo und window.resizeTo von Chrome nicht unterstützt).

92
jraede

Sie können die Standardbrowsergröße festlegen, indem Sie Folgendes ausführen:

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

So maximieren Sie den Browser-Fensterlauf:

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

Positionslauf setzen:

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

Wenn Sie einen Fehler erhalten:

WebDriverError: unknown error: operation is unsupported with remote debugging

Vorgang wird nicht unterstützt, wenn Remote-Debugging verwendet wird. Einige WebDriver Befehle (z. B. Ändern der Browser-Fenstergröße) erfordern eine Chrome-Erweiterung in den Browser geladen werden. ChromeDriver lädt normalerweise diese "Automatisierungserweiterung" bei jedem Start einer neuen Chrome-Sitzung.

ChromeDriver kann jedoch angewiesen werden, eine Verbindung zu einem vorhandenen .__ herzustellen. Chrome-Sitzung, anstatt eine neue zu starten. Dies geschieht mit 'debuggerAddress' im Capabilities-Objekt (auch als ChromeOptions-Objekt bezeichnet) . Da die Automatisierungserweiterung nur beim Start geladen wird, gibt es Einige Befehle, die ChromeDriver bei der Arbeit mit .__ nicht unterstützt. bestehende Sitzungen durch Remote-Debugging.

Wenn der Fehler "Vorgang nicht unterstützt, wenn Remote Debugging verwendet wird" angezeigt wird, versuchen Sie, den Test neu zu schreiben, sodass ein neuer Chrome .__ gestartet wird. Session. Dies kann durch Entfernen von 'debuggerAddress' aus der .__ durchgeführt werden. Capabilities-Objekt.

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

171

Sie können auch Ihren config.js verwenden, um die Fenstergröße einzustellen:

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

Wenn die bevorzugte Methode:

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

funktioniert für Sie nicht (zum Beispiel Ausführen von Protractor-Tests 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]);
            });
        });
    }
};
23
Martin Sznapka

Ich habe einfach den untenstehenden 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 haben setTimeout und executeScript in Ihrer Antwort? Ich bemühe mich, Best Practices in den Winkelmesser-Dokumenten zu finden ...

Die direkte Verwendung von maximize () ist meines Erachtens eine schlechte Idee und sollte nicht die bevorzugte Methode sein, da sie nicht auf jeder Maschine, auf der die Tests ausgeführt werden, dieselbe Größe festlegen würde und das Reaktionsverhalten beeinträchtigen könnte.

14
Eric Burel

In Selen 4 (Winkelmesser 6) ersetzt setRectsetSize und setPosition

Zum Beispiel,

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

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

fähigkeiten: { 'browserName': 'chrome', chromeOptions: { args: [ 'start-maximized' ] } }

1
Pritam Maske