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).


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


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!
    }
}
// ....

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

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.


4

W Selenium 4 (Protractor 6) setRectzastępuje setSizeisetPosition

Na przykład,

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

3

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

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


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 
         }
    },

-1

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

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.