İletki / WebdriverJS'de varsayılan tarayıcı pencere boyutu nasıl ayarlanır


107

Bazı nedenlerden dolayı, testlerimi işte çalıştırdığımda tarayıcı maksimize ediliyor, ancak onları evde çalıştırdığımda yalnızca yaklaşık% 50 genişlikte bir tarayıcı penceresi açılıyor. Bu, aşağı kaydırma vb. İle bazı tutarsızlıklara neden olur, bu yüzden ideal olarak testlerin çalıştırıldığı her makinede aynı boyutta bir tarayıcı penceresi açmasını istiyorum. Bunu yapmanın en iyi yolu nedir? (Diğer diller için bazı cevaplar buldum ancak bunları javascript'e uyarlayamadım)

Ekleme

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

hiçbir şey yapmaz (görünüşe göre window.moveTove window.resizeToChrome tarafından desteklenmiyor).


Şu anda size bir cevabım yok, ancak size söyleyebilirim window.moveTove window.scrollTokesinlikle Chrome tarafından destekleniyor.
Colin Brock

scrollTo çalışır. Ama diğerleri bilmiyor, en azından söyleyebileceğim kadarıyla. Konsola yazmayı deneyin ... hiçbir şey yapmaz.
jraede

Kapalı başlıkları alma riskini göze alarak, burada bir keman olduğunu göstermektedir window.moveTove window.resizeTo. Chrome'da benim için iyi çalışıyor. Mevcut pencereyi Chrome'daki konsoldan yeniden boyutlandırabileceğinizi bilmiyorum, ancak resizeToyöntemin orada mevcut olması Chrome'un bunu desteklediğini gösteriyor.
Colin Brock

Tamam, tarayıcının JS ile açtığı yeni pencereler için çalışıyor gibi görünüyor. Ancak mevcut pencereyle çalışmıyor, ihtiyacım olan şey bu.
jraede

1
Benim testim, işlerin çalışıp çalışmadığı ve farklı duyarlı konfigürasyonlarda görünür olup olmadığı içindir, bu nedenle her test için pencere boyutunu kontrol edebilmem gerekiyor.
jraede

Yanıtlar:


192

Varsayılan tarayıcı boyutunu şu şekilde ayarlayabilirsiniz:

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

Tarayıcı penceresini büyütmek için şunu çalıştırın:

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

Çalıştırmayı ayarlamak için:

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

Hata alırsanız:

WebDriverError: unknown error: operation is unsupported with remote debugging

Uzaktan hata ayıklama kullanılırken işlem desteklenmez Bazı WebDriver komutları (örneğin, tarayıcı penceresini yeniden boyutlandırma) tarayıcıya bir Chrome uzantısı yüklenmesini gerektirir. ChromeDriver normalde bu "otomasyon uzantısını" her yeni Chrome oturumu başlattığında yükler.

Ancak ChromeDriver'a yeni bir Chrome oturumunu başlatmak yerine mevcut bir Chrome oturumuna bağlanması talimatı verilebilir. Bu, Capabilities (ChromeOptions olarak da bilinir) nesnesindeki 'debuggerAddress' kullanılarak yapılır. Otomasyon uzantısı yalnızca başlangıçta yüklendiğinden, ChromeDriver'ın uzaktan hata ayıklama yoluyla mevcut oturumlarla çalışırken desteklemediği bazı komutlar vardır.

"Uzaktan hata ayıklama kullanılırken işlem desteklenmiyor" hatasını görürseniz yeni bir Chrome oturumu başlatması için testi yeniden yazmayı deneyin. Bu, Capabilities nesnesinden 'debuggerAddress' kaldırılarak yapılabilir.

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


10
Kullanarak tarayıcıyı tam ekran boyutuna browser.driver.manage().window().maximize();
Ben Smith

8
Tüm testleriniz için aynı çözünürlüğe sahip olmak istiyorsanız, yukarıdakini protractor.conf.jsdosyanızın onPrepareişlevinde çağırabilirsiniz .
nwinkler

1
@BenSmith neden olduğundan emin değilim, ama browser.driver.manage().window().maximize();aslında pencereyi benim için büyütmüyor . Sadece biraz daha büyük bir pencere alıyorum. setSize()Yöntemle bir genişlik ve yükseklik belirledim
jetcom

1
@AlexandrosSpyropoulos: Çalışması gerekir, ancak xvfb'yi aptalca bir çözünürlükte çalıştırmadığınızdan emin olmalısınız. Örneğin varsayılan olarak 640x480'dir.
Tadas Sasnauskas

1
@LeeGee Güncellenmiş cevap.
Răzvan Flavius ​​Panda

42

config.jsPencere boyutunu ayarlamak için de kullanabilirsiniz :

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

çift ​​çizgiyi kaldırmanız gerekiyor: args: ['window-size = 800,600']
ezain

3
Bu, cevapta gösterildiği gibi çift çizgi İLE benim için beklendiği gibi çalışıyor.
Monkpit

Bu aynı zamanda e2e komut dosyalarını '--headless' değiştirgeleri ile çalıştırırken tarayıcı boyutlarını da ayarlar. Menü mobil görünüme geçerse kullanışlıdır.
tony2tones

28

Tercih edilen yöntem ise:

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

sizin için çalışmazsa (örneğin Xvfb'de Açıölçer testlerini çalıştırma), bu şekilde pencereyi de büyütebilirsiniz (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 sürümü:

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

otomatik ile en iyi fikir maksimum çözünürlüğü alır, ancak setPosition (0, 0) 'ı unuttunuz, bu yüzden tam olarak ekranın üzerinde olacak
Andrew

Hm, tarayıcım zaten 0-0 konumunda başlıyor. Ama birinin buna ihtiyacı varsa iyi bir nokta.
Martin Sznapka

benimki ... 50,50 veya başka bir şeyde başlıyor .. sadece :)
Andrew

işletim sistemine bağlı olabilir, burada Windows 8.1 Hyper-V içinde çalışıyor
Andrew

16

Aşağıdaki kodu protractor.conf.js dosyama ekledim ve sorunsuz çalıştı.

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

SetTimeout ve executeScript cevabınızda hangi amaca hizmet ediyor? İletki belgelerinde en iyi uygulamaları bulmakta zorlanıyorum ...

Bana göre doğrudan maximize () kullanmak kötü bir fikirdir ve tercih edilen yöntem olmamalıdır, çünkü testlerin yapıldığı her makinede aynı boyutu ayarlamaz ve duyarlı davranışları bozabilir.


4

Selenium 4'te (Açıölçer 6), setRectyerine geçer setSizevesetPosition

Örneğin,

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

3

Protractor.conf.js dosyasına aşağıdaki yapılandırmayı ekleyin

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


0

Config.js dosyanızı aşağıdaki gibi değiştirin.

 onPrepare: function () {
      browser.driver.manage().window().setSize(1280, 1024); //width , height

       }, 
 capabilities: {
browserName: 'chrome',
chromeOptions: {
args: [ "--start-maximized" ] // to start browser as maximixed 
         }
    },

-1

Aşağıdaki kodu ekleyin, bu tarayıcı penceresini büyütecektir

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

Stackoverflow'a hoş geldiniz. Bu bilgiyi çok daha fazla açıklamayla sağlayan cevaplar zaten var. Lütfen yanıtlarınızın soruya yeni bir şey eklediğinden emin olun.
Simon.SA
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.