web-dev-qa-db-ja.com

Protractor / WebdriverJSでデフォルトのブラウザーウィンドウサイズを設定する方法

何らかの理由で職場でテストを実行すると、ブラウザーは最大化されますが、自宅でテストを実行すると、幅が約50%のブラウザーウィンドウしか開きません。これにより、スクロールダウンなどの矛盾が発生するため、テストを実行するすべてのマシンで同じサイズのブラウザーウィンドウを開くようにするのが理想的です。これを行う最良の方法は何ですか? (他の言語の回答をいくつか見つけましたが、それらをJavaScriptに適応させることができませんでした)

追加中

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

何もしません(明らかにwindow.moveTowindow.resizeToはchromeではサポートされていません)。

101
jraede

次を実行することにより、デフォルトのブラウザサイズを設定できます。

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

ブラウザウィンドウを最大化するには、次を実行します。

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

位置の実行を設定するには:

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

エラーが発生した場合:

WebDriverError: unknown error: operation is unsupported with remote debugging

リモートデバッグの使用時にサポートされない操作一部のWebDriverコマンド(ブラウザーウィンドウのサイズ変更など)では、ブラウザーにChrome拡張機能をロードする必要があります。 ChromeDriverは通常、新しいChromeセッションを起動するたびに、この「自動化拡張機能」を読み込みます。

ただし、ChromeDriverは、新しいセッションを起動する代わりに、既存のChromeセッションに接続するように指示できます。これは、Capabilities(別名ChromeOptions)オブジェクトの「debuggerAddress」を使用して行われます。自動化拡張機能は起動時にのみ読み込まれるため、ChromeDriverがリモートデバッグを通じて既存のセッションを操作する場合にサポートしないコマンドがいくつかあります。

「リモートデバッグの使用時にサポートされていない操作」というエラーが表示された場合は、新しいChromeセッションを起動するようにテストを書き直してください。これは、Capabilitiesオブジェクトから「debuggerAddress」を削除することで実行できます。

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

182

config.jsを使用してウィンドウサイズを設定することもできます。

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

望ましい方法の場合:

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

(たとえば、XvfbでProtractorテストを実行する)が機能しない場合は、この方法でウィンドウを最大化することもできます(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バージョン:

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

Protractor.conf.jsファイルに次のコードを追加しただけで、うまくいきました。

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

あなたの答えではsetTimeoutとexecuteScriptはどのような目的に役立ちますか?分度器ドキュメントでベストプラクティスを見つけるのに苦労しています...

私の考えでは、直接maximum()を使用するのは悪い考えであり、推奨される方法ではありません。テストが実行されるすべてのマシンで同じサイズを設定せず、応答性の動作を壊す可能性があるからです。

14
Eric Burel

Selenium 4(分度器6)では、setRectsetSizesetPositionを置き換えます

例えば、

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

Protractor.conf.jsファイルに次の構成を追加します

機能:{'browserName': 'chrome'、chromeOptions:{args:['start-maximized']}}

1
Pritam Maske