Cara mengatur ukuran jendela browser default di Protractor / WebdriverJS

107

Untuk beberapa alasan ketika saya menjalankan pengujian saya di tempat kerja, browser dimaksimalkan, tetapi ketika saya menjalankannya di rumah, itu hanya membuka jendela browser dengan lebar sekitar 50%. Hal ini menyebabkan beberapa perbedaan dengan menggulir ke bawah, dll, jadi saya idealnya ingin itu membuka jendela browser dengan ukuran yang sama di setiap mesin tempat pengujian dijalankan. Apa cara terbaik untuk melakukannya? (Saya telah menemukan beberapa jawaban untuk bahasa lain tetapi belum dapat menyesuaikannya dengan javascript)

Menambahkan

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

tidak melakukan apa-apa, (tampaknya window.moveTodan window.resizeTotidak didukung oleh chrome).

jraede
sumber
Saya tidak punya jawaban untuk Anda saat ini, tetapi saya dapat memberi tahu Anda window.moveTodan window.scrollTopasti didukung oleh Chrome.
Colin Brock
scrollTo bekerja. Tapi yang lain tidak, setidaknya tidak dari apa yang bisa saya ceritakan. Coba ketikkan di konsol ... tidak melakukan apa pun.
jraede
Beresiko keluar dari topik, berikut ini biola yang menggambarkan window.moveTodan window.resizeTo. Ini berfungsi dengan baik untuk saya di Chrome. Saya tidak tahu apakah Anda dapat mengubah ukuran jendela saat ini dari konsol di Chrome, tetapi fakta bahwa resizeTometode ini tersedia di sana menunjukkan bahwa Chrome mendukungnya.
Colin Brock
Ok, tampaknya bekerja untuk jendela baru yang membuka browser dengan JS. Tapi tidak bekerja dengan jendela saat ini, yang saya butuhkan.
jraede
1
Pengujian saya adalah untuk mengetahui apakah semuanya berfungsi atau tidak dan terlihat dalam konfigurasi responsif yang berbeda, jadi saya harus dapat mengontrol ukuran jendela untuk setiap pengujian.
jraede

Jawaban:

192

Anda dapat mengatur ukuran browser default dengan menjalankan:

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

Untuk memaksimalkan jendela browser, jalankan:

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

Untuk mengatur run posisi:

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

Jika Anda mendapatkan kesalahan:

WebDriverError: unknown error: operation is unsupported with remote debugging

Operasi tidak didukung saat menggunakan debugging jarak jauh Beberapa perintah WebDriver (misalnya mengubah ukuran jendela browser) memerlukan ekstensi Chrome untuk dimuat ke browser. ChromeDriver biasanya memuat "ekstensi otomatisasi" ini setiap kali sesi Chrome baru diluncurkan.

Namun ChromeDriver dapat diinstruksikan untuk menyambung ke sesi Chrome yang sudah ada alih-alih meluncurkan yang baru. Ini dilakukan dengan menggunakan 'debuggerAddress' di objek Capabilities (alias ChromeOptions). Karena ekstensi otomatisasi hanya dimuat saat memulai, ada beberapa perintah yang tidak didukung ChromeDriver saat bekerja dengan sesi yang ada melalui proses debug jarak jauh.

Jika Anda melihat kesalahan "operasi tidak didukung saat menggunakan debugging jarak jauh", coba tulis ulang pengujian sehingga sesi Chrome baru diluncurkan. Ini bisa dilakukan dengan menghapus 'debuggerAddress' dari objek Capabilities.

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

Răzvan Flavius ​​Panda
sumber
10
Dimungkinkan juga untuk memaksimalkan browser ke ukuran layar penuh menggunakanbrowser.driver.manage().window().maximize();
Ben Smith
8
Jika Anda ingin memiliki resolusi yang sama untuk semua pengujian Anda, Anda dapat memanggil di atas dalam fungsi protractor.conf.jsfile Anda onPrepare.
nwinkler
1
@BenSmith tidak yakin mengapa, tetapi browser.driver.manage().window().maximize();tidak benar-benar memaksimalkan jendela untuk saya. Saya hanya mendapatkan jendela yang sedikit lebih besar. Saya baru saja menentukan lebar dan tinggi dengan setSize()metode
jetcom
1
@AlexandrosSpyropoulos: seharusnya berfungsi tetapi Anda harus memastikan bahwa Anda tidak menjalankan xvfb dalam beberapa resolusi konyol. Misalnya secara default adalah 640x480.
Tadas Sasnauskas
1
@LeeGee Jawaban yang diperbarui.
Răzvan Flavius ​​Panda
42

Anda juga dapat menggunakan Anda config.jsuntuk mengatur ukuran jendela:

// config.js
specs: [
    ...
],
capabilities: {
    browserName: 'chrome',
    chromeOptions: {
        args: ['--window-size=800,600'] // THIS!
    }
}
// ....
e-shfiyut
sumber
Anda perlu menghapus tanda hubung ganda: args: ['window-size = 800.600']
ezain
3
Ini berfungsi seperti yang diharapkan untuk saya DENGAN tanda hubung ganda seperti yang ditunjukkan pada jawaban.
Monkpit
Ini juga menyetel ukuran browser saat menjalankan skrip e2e dengan args '--headless'. Yang berguna jika menu dialihkan ke tampilan seluler.
tony2tones
28

Jika metode yang disukai:

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

tidak berfungsi untuk Anda (misalnya menjalankan pengujian Busur Derajat di Xvfb), maka Anda juga dapat memaksimalkan jendela dengan cara ini (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);
        });
    });
},

Versi 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
sumber
ide terbaik dengan resolusi otomatis dapatkan maksimal, tetapi Anda lupa setPosition (0, 0) sehingga akan tepat di atas layar
Andrew
Hm, browser saya sudah mulai di posisi 0-0. Tapi bagus jika seseorang membutuhkannya.
Martin Sznapka
milikku dimulai pada ... 50,50 atau sesuatu .. hanya mengatakan :)
Andrew
itu mungkin tergantung pada OS, ini dia Windows 8.1 berjalan di dalam Hyper-V
Andrew
16

Saya hanya menambahkan kode di bawah ini di file protractor.conf.js saya dan itu berfungsi dengan baik.

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

Apa tujuan setTimeout dan executionScript dalam jawaban Anda? Saya berjuang untuk menemukan praktik terbaik di dokumen busur derajat ...

Menurut pendapat saya, menggunakan maksimalkan () secara langsung adalah ide yang buruk dan seharusnya bukan metode yang disukai, karena tidak akan menyetel ukuran yang sama pada setiap mesin tempat pengujian dijalankan, dan dapat merusak perilaku responsif.

Eric Burel
sumber
4

Di Selenium 4 (Busur derajat 6), setRectmenggantikan setSizedansetPosition

Sebagai contoh,

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

Dalam file Protractor.conf.js tambahkan konfigurasi berikut

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

Pritam Maske
sumber
0

Ubah file config.js Anda seperti di bawah ini.

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

Tambahkan kode di bawah ini, ini akan memaksimalkan jendela browser

browser.driver.manage().window().maximize();
Brijesh Yadav
sumber
Selamat datang di stackoverflow. Sudah ada jawaban yang memberikan informasi ini dengan lebih banyak penjelasan. Harap pastikan jawaban Anda menambahkan sesuatu yang baru pada pertanyaan tersebut.
Simon.SA