Seleniumを利用したウェブの自動テストを実行するうえで、ブラウザ起動までに行わなければならない諸々の処理を簡単に行う方法をご紹介します。
Selenideの利用を前提とした説明となっています。
まえがき
Seleniumを利用したテストを行うための事前作業として、当然ですがブラウザを起動する必要があります。
ただ、ブラウザを起動してテストを開始するまでの間に以下の手続きを踏むことが必要です。
* ブラウザ毎にドライバの更新有無を確認
* (ドライバの更新があれば)
* ブラウザに対する設定の実施
手動で頑張ってもできないことはないですが、テストを実行する端末が複数ある場合には一つ一つドライバの更新作業するのは煩わしいですし、そもそも定期的かつ安定的なテスト実行の妨げとなるので、今回はこれらを効率的に実施する方法を記載します。
ブラウザ指定方法
Webのテストを行う上ではテスト対象のブラウザを指定する必要があります。
その方法はコード上で指定する方法と実行時のパラメータで指定する方法の2種類があります。
コード上で指定する場合
Selenideでは設定をConfigurationクラスで保持しており、ソースコード上でブラウザを指定する場合には以下のように記載します。
Configuration.browser = WebDriverRunner.CHROME
と書けばブラウザを切り替えることができます。
実行時パラメータで指定する場合
ただ、通常は同一のテストを複数のブラウザで実行するというニーズが前提にあるはず。
なので、テスト対象のブラウザはコード上で直接指定するのではなく、実行時のパラメータで切り替えるのが普通です。
selenide.browserを利用して以下のように記述することで実行ブラウザを指定できます。
java -Dselenide.browser=Chrome
とはいえ、ブラウザを指定する際にはそのブラウザ固有の設定もしたいもの。
かつ、いちいちテストコードにはブラウザの設定は書きたくない。
そのような場合への対処方法を以下にご紹介します。
ブラウザ別の設定方法
ブラウザの起動処理の前にパラメータ設定を行うコードを呼び出すことで解決ができます。
以下、サンプルコードです。
package com.driver;
public class IEWebDriverProvider implements WebDriverProvider {
@Override
public WebDriver createDriver(final DesiredCapabilities desiredCapabilities) {
InternetExplorerDriverManager.iedriver().arch32().setup();
desiredCapabilities.setCapability("ignoreProtectedModeSettings", true);
InternetExplorerOptions opt = new InternetExplorerOptions(desiredCapabilities)
.destructivelyEnsureCleanSession().withAttachTimeout(10, TimeUnit.SECONDS);
opt.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
return new InternetExplorerDriver(opt);
}
}
WebDriverProviderを実装したクラスを用意し、加えて実行時にパラメータとして以下のようにコードのパスを与えます。
-Dselenide.browser=com.driver.IEWebDriverProvider
そうすることでブラウザを起動させるタイミング、具体的には
WebDriverRunner.getAndCheckWebDriver();
が実行される中でブラウザに対する設定を行う上記コードもあわせて実行されます。
今回はIEを起動する例を記載していますが、各ブラウザに対してあらかじめ設定用のclassを用意しておくことが可能です。
この方法のメリットはブラウザに対して必要な事前設定を個別のテストに記述することを避けることで、テストコードの見通しが良くなる点を複数のテストで設定コードを使い回せる点にあります。
ドライバの自動更新
テスト実行時にはテストを実行する端末にインストールされているドライバのバージョンが古いためにテストが失敗することがあります。
しかし、SelenideにはWebdriverManagerを内包しており、自動的にブラウザを更新する処理が組み込まれているので、特に意識することなくテストを実行する端末のドライバが最新のドライバか否かをチェックして、最新でない場合には自動でダウンロードしてくれます。
Selenideを利用していない場合にもWebdriverManagerを利用することで同様の効果を得られると思われます。
ドライバのバージョンを指定する場合
最新ドライバのバージョンとテスト実行端末のブラウザのバージョンが適合しない場合、そのままではテストが実行できないのでドライバのバージョンを個別に指定する必要があります。
その場合には以下のようにドライバのバージョンを指定することも可能です。
java -Dwdm.chromeDriverVersion=1.99
また、ドライバが最新であることが明確かつ、テスト件数が膨大で少しでもテストにかかる時間を短縮したい等の理由により自動更新処理を止めたい場合もあります。
そのような場合にも以下のように設定することで、更新処理を止めることができます。
java -Dselenide.driverManagerEnabled=false
おわりに
以上、テスト開始の前提となるブラウザに関連する諸々の面倒を解消する方法をご紹介しました。
こちらを参考に快適なテスト自動化ライフをお過ごしいただければと思います。