0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Selenium開発 個人的メモ

Posted at

Seleniumの開発、ソースコードについての個人的メモです。

:motorcycle: 実行環境

mavenプロジェクトとして構成し、Seleniumの実行はmvn testコマンドを実行する。

:motorcycle: ファイル・ソース構成

image.png

:motorcycle: ソース内容

上記の構成で、それぞれのソースは以下とする。
 ①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>

:motorcycle: 実行方法

pom.xmlの存在するディレクトリでmvn testを事項するか、IDEからpom.xmlを実行する。

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?