Seleniumをつかうと、結合テストを自動化した上にスクショまで取ってくれるということでしたが、前回はうまくいきませんでした。
そこで今回は、Selenium4でリベンジしたいと思います。
sts4+JUnit5+Selenium4+Chromeを使ってみる
1. Selenium4とは?
Selenium 4は、Selenium 3との互換性が一部破壊されています。
これは、一部のAPIが更新、変更、削除されたためです。
ネットで検索するとSelenium 3の情報も多いため、参考にするときは、注意が必要です。
ただし、Selenium 4は、Selenium 3と同様に、WebDriver APIに完全に準拠しています。
したがって、導入時に依存性さえ気を付ければ、WebDriver APIを使用するアプリケーションは、ほとんどの場合、変更を加えずにSelenium 4に移行できます。
以下は、Selenium 4で追加された主な機能のいくつかです。
これらはSelenium 4の主な機能の一部ですが、他にも様々な改善や機能追加があります。
Selenium 4の使用には、Selenium 3からのアップグレードが必要ですが、新機能の導入やパフォーマンスの改善など、多くのメリットがあります。
1-1. ネイティブサポート
Selenium 4では、W3C Webdriver APIの最新バージョンがネイティブにサポートされています。
これにより、Seleniumのブラウザドライバーは、デフォルトでW3C Webdriver APIを使用するようになりました。
また、プロトコルエラーのハンドリングも改善されています。
1-2. スクリプトの非同期実行
Selenium 4では、非同期JavaScript実行APIが導入されました。
これにより、JavaScriptコードを同期的に実行する必要がなくなり、テストのパフォーマンスが向上します。
1-3. HTTP/2のサポート
Selenium 4では、HTTP/2のサポートが追加されています。
これにより、ブラウザとの通信がより高速になり、パフォーマンスが向上します。
1-4. Safariでの自動化の改善
Selenium 4では、Safariドライバーが完全に再設計され、Safariでの自動化が改善されました。
Safariドライバーは、W3C Webdriver APIを使用するようになり、Safari 13以降で動作します。
1-5. 新しいブラウザドライバーのサポート
Selenium 4では、新しいブラウザドライバーのサポートが追加されました。
例えば、Chromiumブラウザのドライバーがサポートされました。
1-6. DevTools APIのサポート
Selenium 4では、DevTools APIのサポートが追加されました。
これにより、Chrome DevToolsを使用してブラウザの内部状態を観察できるようになります。
2. 導入
2-1. pom.xmlに以下を追加します
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>4.4.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.9.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-chrome-driver</artifactId>
<version>4.9.0</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-remote-driver</artifactId>
<version>4.9.0</version>
&
2-2. プロジェクトの更新を行います
プロジェクトを右クリック>Mavenプロジェクトの更新>スナップショット/リリースの更新を強制にチェックを入れる>OKを押下します。
2-3. コンパイルを行います
プロジェクトを右クリック>実行>Mavenビルド>ゴールに「compile」を設定>実行を押下します。
コンソールに[INFO] BUILD SUCCESSと表示されれば成功です。
もしエラーが出るようなら、一度sts4を再起動してもう一度コンパイルを行うと、うまくいくかと思います。
コンパイルを行うことにより、WebDriverManagerが、Chromeのバージョンを取得し、対応するSelenium Chrome Driverが取得されます。
3. JUnit5でテスト
3-1. テストコード
定番の、Googleのページに遷移してキャプチャを撮るテストコードを書きます。
遷移先ページのTitleが「Google」なら成功です。
import java.io.File;
import java.io.IOException;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.apache.commons.io.FileUtils;
public class SeleniumTest {
@Test
public void myTest() throws IOException {
// WebDriverを作成
WebDriverManager.chromedriver().setup();
ChromeOptions options = new ChromeOptions();
options.addArguments("--guest"); // ゲストで開く
options.addArguments("--window-size=1280,720"); // ブラウザサイズの指定
WebDriver driver = new ChromeDriver(options);
// Googleのページに遷移する
driver.get("https://www.google.co.jp/");
// 遷移が成功したことを確認する
Assertions.assertEquals("Google", driver.getTitle());
// キャプチャを撮る
TakesScreenshot screenshotDriver = (TakesScreenshot)driver;
File screenshotFile = screenshotDriver.getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(screenshotFile, new File("C:\\Users\\koji_\\Documents\\captures\\screenshot.png"));
&
3-2. テスト結果
保存されたキャプチャはこちら
4. まとめ
今回は、sts4+JUnit5+Selenium4+Chromeを使った結合テストをやってみました。
導入さえうまくできれば、使い方は簡単そうですね。
テストが捗りそうです。
ポイントは、初回またはChromeのバージョンが変わったとき、コンパイルするということでした。
このテスト環境では、Chromeのバージョンに合わせてSelenium Chrome Driverが自動的に取得されるため、手動でのバージョン管理が不要であり、環境構築の手間を省くことができます。
このように、STS4やJUnit5、Selenium4、Chromeを組み合わせた結合テスト環境は、効率的かつ正確なテスト実行を可能にし、品質保証の向上に役立ちます。
今回は以上となります。
ありがとうございました。