web-dev-qa-db-fra.com

Comment définir la taille de fenêtre par défaut du navigateur dans Protractor/WebdriverJS

Pour une raison quelconque, lorsque je lance mes tests au travail, le navigateur est optimisé, mais lorsque je les lance à la maison, il n’ouvre qu’une fenêtre de navigateur d’environ 50% de la largeur. Cela provoque certaines divergences avec le défilement vers le bas, etc., donc j'aimerais idéalement qu'il ouvre une fenêtre de navigateur de la même taille sur chaque machine sur laquelle les tests sont exécutés. Quelle est la meilleure façon de faire cela? (J'ai trouvé des réponses pour d'autres langues mais je n'ai pas été en mesure de les adapter au javascript)

Ajouter

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

ne fait rien (apparemment, window.moveTo et window.resizeTo ne sont pas pris en charge par chrome).

92
jraede

Vous pouvez définir la taille de navigateur par défaut en exécutant:

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

Pour maximiser la fenêtre du navigateur, exécutez:

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

Pour définir la position exécutée:

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

Si vous obtenez une erreur:

WebDriverError: unknown error: operation is unsupported with remote debugging

Opération non prise en charge lors de l’utilisation du débogage à distance Some WebDriver les commandes (par exemple, le redimensionnement de la fenêtre du navigateur) nécessitent une extension Chrome être chargé dans le navigateur. ChromeDriver charge normalement cette "extension d'automatisation" chaque fois qu'il lance une nouvelle session Chrome.

Cependant, il peut être demandé à ChromeDriver de se connecter à un .__ existant. Session Chrome au lieu d'en lancer une nouvelle. Ceci est fait en utilisant 'debuggerAddress' dans l'objet Capabilities (aussi appelé ChromeOptions) . Etant donné que l'extension d'automatisation n'est chargée qu'au démarrage, il existe certaines commandes que ChromeDriver ne prend pas en charge lorsqu’on travaille avec sessions existantes par le débogage à distance.

Si l'erreur "Opération non prise en charge lors de l'utilisation du débogage .__ à distance" est incorrecte, essayez de réécrire le test pour qu'il lance un nouveau Chrome session. Cela peut être fait en supprimant 'debuggerAddress' du fichier Objet de capacités.

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

171

Vous pouvez également utiliser votre config.js pour définir la taille de la fenêtre:

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

Si la méthode préférée:

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

ne fonctionne pas pour vous (par exemple, en exécutant les tests Protractor dans Xvfb), vous pouvez également agrandir la fenêtre de cette façon (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);
        });
    });
},

Version 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]);
            });
        });
    }
};
23
Martin Sznapka

J'ai simplement ajouté le code ci-dessous dans mon fichier protractor.conf.js et cela a bien fonctionné.

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

Quel est l'objectif de setTimeout et executeScript dans votre réponse? J'ai du mal à trouver les meilleures pratiques dans la documentation des rapporteurs ...

À mon avis, utiliser directement maximiser () est une mauvaise idée et ne devrait pas être la méthode préférée, car elle ne définirait pas la même taille sur toutes les machines sur lesquelles les tests sont exécutés et pourrait rompre les comportements sensibles.

14
Eric Burel

Dans le sélénium 4 (rapporteur 6), setRect remplace setSize et setPosition

Par exemple,

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

Dans le fichier Protractor.conf.js, ajoutez la configuration suivante

capacités: { 'browserName': 'chrome', chromeOptions: { args: [ 'démarrage maximisé' ] } }

1
Pritam Maske