Selenideで全画面のキャプチャを取る方法

mabushiisign

Seleniumを使ったテストの記述を楽にしてくれるSelenideを使ってみました。

スクリーンショットも簡単に取ることができます。

1Selenide.screenshot("toppage");

これだけで、画像とhtmlソースがbuild/reports/tests/ フォルダに toppage.png, toppage.htmlとして保存してくれます。

課題

これで取った画像サイズが、Windowサイズになってしまいます。デフォルトでは「1366×768」。
実行時であれば

1Configuration.browserSize = "1366x1200";

でWindowサイズを変更できるのですが、対象の画面によって縦サイズは変わるので予め決めておくのは現実的ではありません。
ブラウザのWindowを動的に変えれればいいのですがどうやればいいのでしょうか。

対策

思いつくのは、表示された後、対象の画面のbodyのサイズを取得し、Windowサイズを変更すればよいというものです。

画面サイズを取得する

WebDriverの機能にそのままのものがありません。
JavaScriptであれば取得できるので、JavaScriptを実行してその結果を取れればいいと思います。
Selenide.executeJavaScriptメソッドでJavaScriptを実行し、その結果を取得します。

1int width = ((Number) Selenide.executeJavaScript("return document.body.clientWidth")).intValue();
2int height = ((Number) Selenide.executeJavaScript("return document.body.clientHeight")).intValue();
3System.out.println(width + "x" + height);

Windowサイズを変更する

こちらは、設定する場所を見つけるのが面倒でしたが、WebDriverのメソッドで可能です。

1WebDriverRunner.getWebDriver().manage().window().setSize(new Dimension(width, height));

まとめ

単純に画面にアクセスし、全画面キャプチャを取得するコードはこうなります。

1Configuration.browser = Browsers.CHROME;
2Configuration.headless = true;
3
4Selenide.open("http://www.yahoo.co.jp/");
5
6int width = ((Number) Selenide.executeJavaScript("return document.body.clientWidth")).intValue();
7int height = ((Number) Selenide.executeJavaScript("return document.body.clientHeight")).intValue();
8WebDriverRunner.getWebDriver().manage().window().setSize(new Dimension(width, height));
9
10Selenide.screenshot("yahoo");

これで、テストなどを行う基本的な準備が出来たかなと思います。

ABOUT ME
mabushiisign
mabushiisign
B'zとdoaとミスチルと登山が好きな40代のプログラマです。 普段は、SIer企業で働いています。
記事URLをコピーしました