Jak ustawić domyślny rozmiar okna przeglądarki w Protractor / WebdriverJS

107

Z jakiegoś powodu, kiedy uruchamiam testy w pracy, przeglądarka jest zmaksymalizowana, ale kiedy uruchamiam je w domu, otwiera się tylko okno przeglądarki o szerokości około 50%. Powoduje to pewne rozbieżności podczas przewijania w dół itp., Więc najlepiej byłoby, gdyby otwierało okno przeglądarki o tym samym rozmiarze na każdym komputerze, na którym przeprowadzane są testy. Jak najlepiej to zrobić? (Znalazłem odpowiedzi dla innych języków, ale nie byłem w stanie dostosować ich do javascript)

Dodawanie

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

nic nie robi (najwyraźniej window.moveToi window.resizeTonie są obsługiwane przez Chrome).

jraede
źródło
W tej chwili nie mam dla Ciebie odpowiedzi, ale mogę ci to powiedzieć window.moveToi na window.scrollTopewno są obsługiwane przez Chrome.
Colin Brock
scrollTo działa. Ale inni nie, przynajmniej nie z tego, co mogę powiedzieć. Spróbuj wpisać to w konsoli ... nic nie robi.
jraede
Ryzykując wyjście poza temat, oto skrzypce, które ilustrują window.moveToi window.resizeTo. U mnie działa dobrze w Chrome. Nie wiem, czy można zmienić rozmiar bieżącego okna z konsoli w Chrome, ale fakt, że resizeTometoda jest tam dostępna, wskazuje, że Chrome ją obsługuje.
Colin Brock
Wygląda na to, że działa dla nowych okien, które przeglądarka otwiera za pomocą JS. Ale nie działa z bieżącym oknem, czego potrzebuję.
jraede
1
Mój test dotyczy tego, czy rzeczy działają, czy nie, i są widoczne w różnych konfiguracjach responsywnych, więc muszę mieć możliwość kontrolowania rozmiaru okna dla każdego testu.
jraede

Odpowiedzi:

192

Możesz ustawić domyślny rozmiar przeglądarki, uruchamiając:

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

Aby zmaksymalizować okno przeglądarki, uruchom:

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

Aby ustawić bieg pozycji:

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

Jeśli pojawi się błąd:

WebDriverError: unknown error: operation is unsupported with remote debugging

Operacja nie jest obsługiwana podczas korzystania ze zdalnego debugowania Niektóre polecenia WebDriver (np. Zmiana rozmiaru okna przeglądarki) wymagają załadowania do przeglądarki rozszerzenia Chrome. ChromeDriver normalnie ładuje to „rozszerzenie automatyzacji” za każdym razem, gdy uruchamia nową sesję Chrome.

Można jednak poinstruować ChromeDriver, aby połączyć się z istniejącą sesją Chrome zamiast uruchamiać nową. Odbywa się to za pomocą „debuggerAddress” w obiekcie Capabilities (aka ChromeOptions). Ponieważ rozszerzenie automatyzacji jest ładowane tylko podczas uruchamiania, istnieje kilka poleceń, których ChromeDriver nie obsługuje podczas pracy z istniejącymi sesjami poprzez zdalne debugowanie.

Jeśli zobaczysz komunikat o błędzie „operacja nie jest obsługiwana w przypadku zdalnego debugowania”, spróbuj przepisać test, aby uruchamiał nową sesję Chrome. Można to zrobić, usuwając „debuggerAddress” z obiektu Capabilities.

Źródło: https://sites.google.com/a/chromium.org/chromedriver/help/operation-not-supported-when-using-remote-debugging

Răzvan Flavius ​​Panda
źródło
10
Można również zmaksymalizować przeglądarkę do pełnego ekranu za pomocąbrowser.driver.manage().window().maximize();
Ben Smith
8
Jeśli chcesz mieć tę samą rozdzielczość dla wszystkich testów, możesz wywołać powyższe w funkcji protractor.conf.jspliku onPrepare.
nwinkler
1
@BenSmith nie wiem dlaczego, ale browser.driver.manage().window().maximize();tak naprawdę nie maksymalizuje dla mnie okna. Po prostu dostaję nieco większe okno. setSize()
Skończyło
1
@AlexandrosSpyropoulos: powinno działać, ale musisz się upewnić, że nie używasz xvfb w jakiejś głupiej rozdzielczości. Na przykład domyślnie jest to 640x480.
Tadas Sasnauskas
1
@LeeGee Zaktualizowana odpowiedź.
Răzvan Flavius ​​Panda
42

Możesz także użyć swojego, config.jsaby ustawić rozmiar okna:

// config.js
specs: [
    ...
],
capabilities: {
    browserName: 'chrome',
    chromeOptions: {
        args: ['--window-size=800,600'] // THIS!
    }
}
// ....
e-shfiyut
źródło
musisz usunąć podwójny myślnik: args: ['window-size = 800,600']
ezain
3
Działa to zgodnie z oczekiwaniami dzięki podwójnemu myślnikowi, jak pokazano w odpowiedzi.
Monkpit
To również ustawia rozmiary przeglądarki podczas uruchamiania skryptów e2e z argumentami „--headless”. Jest to przydatne, jeśli menu zostanie przeniesione do widoku mobilnego.
tony2tones
28

Jeśli preferowana metoda:

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

nie działa dla Ciebie (na przykład uruchamianie testów Protractor w Xvfb), możesz również zmaksymalizować okno w ten sposób (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);
        });
    });
},

Wersja 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
źródło
najlepsza idea z automatycznym uzyskaniem maksymalnej rozdzielczości, ale zapomniałeś setPosition (0, 0), więc będzie dokładnie nad ekranem
Andrew
Hm, moja przeglądarka już startuje na pozycji 0-0. Ale dobra uwaga, jeśli ktoś tego potrzebuje.
Martin Sznapka
mój zaczyna się o ... 50,50 czy coś ... tak tylko mówię :)
Andrew
może to zależeć od systemu operacyjnego, tutaj jest to Windows 8.1 działający w Hyper-V
Andrew
16

Po prostu dodałem poniższy kod do mojego pliku protractor.conf.js i działał dobrze.

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

Do jakiego celu służą setTimeout i executeScript w Twojej odpowiedzi? Trudno mi znaleźć najlepsze praktyki w dokumentach kątomierza ...

Moim zdaniem użycie bezpośredniej maksymalizacji () jest złym pomysłem i nie powinno być preferowaną metodą, ponieważ nie ustawiłoby tego samego rozmiaru na każdej maszynie, na której wykonywane są testy, i może zepsuć zachowania responsywne.

Eric Burel
źródło
4

W Selenium 4 (Protractor 6) setRectzastępuje setSizeisetPosition

Na przykład,

browser.driver.manage().window().setRect({height: 600, width: 800});
Andrew Schlei
źródło
3

W pliku Protractor.conf.js dodaj następującą konfigurację

możliwości: {'browserName': 'chrome', chromeOptions: {args: ['start-maximized']}}

Pritam Maske
źródło
0

Zmodyfikuj plik config.js zgodnie z poniższym opisem.

 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
źródło
-1

Dodaj poniższy kod, zmaksymalizuje to okno przeglądarki

browser.driver.manage().window().maximize();
Brijesh Yadav
źródło
Witamy w stackoverflow. Istnieją już odpowiedzi, które dostarczają tych informacji o wiele więcej wyjaśnień. Upewnij się, że Twoje odpowiedzi dodają coś nowego do pytania.
Simon.SA