Seleniumの開発、ソースコードについての個人的メモです。
実行環境
mavenプロジェクトとして構成し、Seleniumの実行はmvn testコマンドを実行する。
ファイル・ソース構成
ソース内容
上記の構成で、それぞれのソースは以下とする。
①CommonUtil.java
②Login1Test.java
③Login2Test.java
④Login3Test.java
⑤Login4Test.java
⑥pom.xml
①CommonUtil.java
import org.openqa.selenium.*;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
public class CommonUtil {
public void takeScreenshot(WebDriver driver, String fileName) {
// スクリーンショット保存ディレクトリを作成
File screenshotDirectory = new File("screenshots");
if (!screenshotDirectory.exists()) {
screenshotDirectory.mkdirs();
}
// 現在のウィンドウサイズを保存しておく
Dimension originalSize = driver.manage().window().getSize();
// JavascriptExecutor を使ってページの高さと幅を取得
JavascriptExecutor js = (JavascriptExecutor) driver;
long height = (Long) js.executeScript("return document.body.scrollHeight"); // ページの高さを取得
long width = (Long) js.executeScript("return document.body.scrollWidth"); // ページの幅を取得
// ページ全体に合わせてウィンドウサイズを変更
driver.manage().window().setSize(new Dimension((int) width, (int) height));
// スクリーンショットを取得
File screenshot = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
// スクリーンショットの保存先ファイルを作成
File destinationFile = new File(screenshotDirectory, fileName);
try {
// スクリーンショットを指定のパスにコピー
Files.copy(screenshot.toPath(), destinationFile.toPath());
} catch (IOException e) {
// エラーの詳細をログに記録
System.err.println("Error while saving screenshot: " + e.getMessage());
e.printStackTrace();
}
// 元のウィンドウサイズに戻す
driver.manage().window().setSize(originalSize); // 元のサイズに戻す
}
}
②Login1Test.java
import io.github.bonigarcia.wdm.WebDriverManager;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import static org.junit.jupiter.api.Assertions.*;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class Login1Test {
CommonUtil commonUtil = new CommonUtil();
WebDriver driver;
@BeforeAll
static void setupClass() {
//System.setProperty("webdriver.chrome.driver", "./exe/chromedriver.exe");
//WebDriverManager.chromedriver().setup();
ChromeDriver.builder();
}
@BeforeEach
void setupTest() {
driver = new ChromeDriver();
}
@Test
void loginSuccess() {
// トップページへアクセスする。
driver.get("http://localhost:8080/atrs");
// スクリーンショットを撮る
commonUtil.takeScreenshot(driver, "Login1Test_ATRSPage.png");
// login というIDの要素を取得(ログインボタン)
WebElement loginButton = driver.findElement(By.id("login"));
// ログインボタンが存在するか確認(アサーション)
assertNotNull(loginButton, "Login button should be found.");
// ログインボタンがクリック可能か確認
assertTrue(loginButton.isDisplayed(), "Login button should be displayed.");
assertTrue(loginButton.isEnabled(), "Login button should be enabled.");
// 画面右上のログインボタンを押下する。
loginButton.click();
// 「会員番号」と「パスワード」の入力画面が表示されること。
// スクリーンショットを撮る
commonUtil.takeScreenshot(driver, "Login1Test_MemberNumberAndPassword.png");
// lomembershipNumber というIDの要素を取得(会員番号)
WebElement membershipNumber = driver.findElement(By.id("membershipNumber"));
// 会員番号が存在するか確認
assertNotNull(membershipNumber, "Membership Number should be found.");
// 会員番号が空白であるか確認
assertTrue(membershipNumber.getText().isEmpty(), "Membership Number should be empty.");
// password というIDの要素を取得(パスワード)
WebElement password = driver.findElement(By.id("password"));
// パスワードが存在するか確認
assertNotNull(password, "Password should be found.");
// パスワードが空白であるか確認
assertTrue(password.getText().isEmpty(), "Password should be empty.");
// 会員番号に"0000000001"をセット
membershipNumber.sendKeys("0000000001");
// パスワードに"aaaaa11111"をセット
password.sendKeys("aaaaa11111");
// ログインボタンをクリック
driver.findElement(By.id("login-btn")).click();
// トップ画面が表示されること。
// スクリーンショットを撮る
commonUtil.takeScreenshot(driver, "Login1Test_TopPage.png");
// 画面右上に「ようこそ 電電 花子 さま」と記載されたプルダウンが表示される。
// name というIDの要素を取得(プルダウン)
WebElement name = driver.findElement(By.id("name"));
// プルダウンが存在するか確認
assertNotNull(name, "Hello Welcome pull-down should be found.");
// プルダウンが空白でないことを確認
System.out.println(name.getText());
assertFalse(name.getText().isEmpty(), "Hello Welcome pull-down should not be empty.");
// プルダウンに文字列"ようこそ"が含まれること
assertTrue(name.getText().contains("ようこそ"), "ようこそ should be contained.");
// プルダウンに文字列"電電 花子"が含まれること
assertTrue(name.getText().contains("電電 花子"), "電電 花子 should be contained.");
// プルダウンに文字列"さま"が含まれること
assertTrue(name.getText().contains("さま"), "さま should be contained.");
}
@AfterEach
void tearDown() {
// テスト終了後にブラウザを閉じる
if (driver != null) {
driver.quit();
}
}
}
③Login2Test.java
import io.github.bonigarcia.wdm.WebDriverManager;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class Login2Test {
CommonUtil commonUtil = new CommonUtil();
WebDriver driver;
@BeforeAll
static void setupClass() {
//System.setProperty("webdriver.chrome.driver", "./exe/chromedriver.exe");
//WebDriverManager.chromedriver().setup();
ChromeDriver.builder();
}
@BeforeEach
void setupTest() {
driver = new ChromeDriver();
}
@Test
void loginErrorForInvalidValue() {
// トップページへアクセスする。
driver.get("http://localhost:8080/atrs");
// スクリーンショットを撮る
commonUtil.takeScreenshot(driver, "Login2Test_ATRSPage.png");
// login というIDの要素を取得(ログインボタン)
WebElement loginButton = driver.findElement(By.id("login"));
// 画面右上のログインボタンを押下する。
loginButton.click();
// 「会員番号」と「パスワード」の入力画面が表示されること。
// スクリーンショットを撮る
commonUtil.takeScreenshot(driver, "Login2Test_MemberNumberAndPassword.png");
// lomembershipNumber というIDの要素を取得(会員番号)
WebElement membershipNumber = driver.findElement(By.id("membershipNumber"));
// password というIDの要素を取得(パスワード)
WebElement password = driver.findElement(By.id("password"));
// 会員番号に"0000000001"をセット
membershipNumber.sendKeys("0000000001");
// パスワードに"bbbbb11111"をセット
password.sendKeys("bbbbb11111");
// ログインボタンをクリック
driver.findElement(By.id("login-btn")).click();
// エラーメッセージが表示されること。
// スクリーンショットを撮る
commonUtil.takeScreenshot(driver, "Login2Test_LoginError.png");
// "alert-danger"クラスの要素を取得する
WebElement alertDangerClass = driver.findElement(By.className("alert-danger"));
// alertDangerClass に"Bad credentials"が含まれること
assertTrue(alertDangerClass.getText().contains("Bad credentials"), "'Bad credentials' should be contained.");
}
@AfterEach
void tearDown() {
// テスト終了後にブラウザを閉じる
if (driver != null) {
driver.quit();
}
}
}
④Login3Test.java
import io.github.bonigarcia.wdm.WebDriverManager;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class Login3Test {
CommonUtil commonUtil = new CommonUtil();
WebDriver driver;
@BeforeAll
static void setupClass() {
//System.setProperty("webdriver.chrome.driver", "./exe/chromedriver.exe");
//WebDriverManager.chromedriver().setup();
ChromeDriver.builder();
}
@BeforeEach
void setupTest() {
driver = new ChromeDriver();
}
@Test
void loginErrorForEmptyValue() {
// トップページへアクセスする。
driver.get("http://localhost:8080/atrs");
// スクリーンショットを撮る
commonUtil.takeScreenshot(driver, "Login3Test_ATRSPage.png");
// login というIDの要素を取得(ログインボタン)
WebElement loginButton = driver.findElement(By.id("login"));
// 画面右上のログインボタンを押下する。
loginButton.click();
// 「会員番号」と「パスワード」の入力画面が表示されること。
// スクリーンショットを撮る
commonUtil.takeScreenshot(driver, "Login3Test_MemberNumberAndPassword.png");
// lomembershipNumber というIDの要素を取得(会員番号)
WebElement membershipNumber = driver.findElement(By.id("membershipNumber"));
// password というIDの要素を取得(パスワード)
WebElement password = driver.findElement(By.id("password"));
// 会員番号を空にセット
membershipNumber.sendKeys("");
// パスワードを空にセット
password.sendKeys("");
// ログインボタンをクリック
driver.findElement(By.id("login-btn")).click();
// エラーメッセージが表示されること。
// スクリーンショットを撮る
commonUtil.takeScreenshot(driver, "Login3Test_LoginError.png");
// "parsley-required"クラスの要素を取得する
WebElement parsleyRequiredClass = driver.findElement(By.className("parsley-required"));
// parsleyRequiredClass に"入力必須項目です"が含まれること
assertTrue(parsleyRequiredClass.getText().contains("入力必須項目です"), "'入力必須項目です' should be contained.");
}
@AfterEach
void tearDown() {
// テスト終了後にブラウザを閉じる
if (driver != null) {
driver.quit();
}
}
}
```ruby:⑤Login4Test.java
import io.github.bonigarcia.wdm.WebDriverManager;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class Login4Test {
CommonUtil commonUtil = new CommonUtil();
WebDriver driver;
@BeforeAll
static void setupClass() {
//System.setProperty("webdriver.chrome.driver", "./exe/chromedriver.exe");
//WebDriverManager.chromedriver().setup();
ChromeDriver.builder();
}
@BeforeEach
void setupTest() {
driver = new ChromeDriver();
}
@Test
void loginExit() {
// トップページへアクセスする。
driver.get("http://localhost:8080/atrs");
// スクリーンショットを撮る
commonUtil.takeScreenshot(driver, "Login4Test_ATRSPage.png");
// ウィンドウを閉じる
driver.quit();
}
}
⑥pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>Login2</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>23</maven.compiler.source>
<maven.compiler.target>23</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.27.0</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.7.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>5.3.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.36</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.36</version>
</dependency>
</dependencies>
</project>
実行方法
pom.xmlの存在するディレクトリでmvn testを事項するか、IDEからpom.xmlを実行する。
以上