何らかの理由で職場でテストを実行すると、ブラウザーは最大化されますが、自宅でテストを実行すると、幅が約50%のブラウザーウィンドウしか開きません。これにより、スクロールダウンなどの矛盾が発生するため、テストを実行するすべてのマシンで同じサイズのブラウザーウィンドウを開くようにするのが理想的です。これを行う最良の方法は何ですか? (他の言語の回答をいくつか見つけましたが、それらをJavaScriptに適応させることができませんでした)
追加中
browser.executeScript('window.moveTo(0,0);'+
'window.resizeTo(screen.width, screen.height);');
何もしません(明らかにwindow.moveTo
とwindow.resizeTo
はchromeではサポートされていません)。
次を実行することにより、デフォルトのブラウザサイズを設定できます。
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」を削除することで実行できます。
config.js
を使用してウィンドウサイズを設定することもできます。
// config.js
specs: [
...
],
capabilities: {
browserName: 'chrome',
chromeOptions: {
args: ['--window-size=800,600'] // THIS!
}
}
// ....
望ましい方法の場合:
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]);
});
});
}
};
Protractor.conf.jsファイルに次のコードを追加しただけで、うまくいきました。
onPrepare: function() {
var width = 1600;
var height = 1200;
browser.driver.manage().window().setSize(width, height);
},
あなたの答えではsetTimeoutとexecuteScriptはどのような目的に役立ちますか?分度器ドキュメントでベストプラクティスを見つけるのに苦労しています...
私の考えでは、直接maximum()を使用するのは悪い考えであり、推奨される方法ではありません。テストが実行されるすべてのマシンで同じサイズを設定せず、応答性の動作を壊す可能性があるからです。
Selenium 4(分度器6)では、setRect
がsetSize
とsetPosition
を置き換えます
例えば、
browser.driver.manage().window().setRect({height: 600, width: 800});
Protractor.conf.jsファイルに次の構成を追加します
機能:{'browserName': 'chrome'、chromeOptions:{args:['start-maximized']}}