オブジェクトリポジトリ Selenium

⚡ スマートサマリー

オブジェクトリポジトリ Selenium 要素ロケーターを単一の外部ファイルに集約し、テストスクリプトから分離します。このアプローチにより、メンテナンス性が向上し、テスターは多数のテストケースを編集するのではなく、1か所でロケーターを更新できるようになります。

  • 🗂️ コアコンセプト: ユーザーインターフェイスロケーターをキーと値のペアとして保存し、 Selenium WebDriverのテストロジック。
  • 📄 プロパティファイル方式: ロケーターを.propertiesテキストファイルに保存し、実行時にjava.util.Propertiesクラスを介して読み込みます。
  • 🧩 XMLファイル方式: ドキュメントオブジェクトモデルとdom4jを含むXMLファイルを使用して、selectSingleNode経由でロケータを読み取ります。
  • 🔧 実装フロー: ファイルを作成し、キーと値のペアデータを保存し、値を変数に読み込んでから、それらをfindElementに渡します。
  • 🛡️ メンテナンス特典: ロケーターが変更された場合は、影響を受けるすべてのテストケースではなく、リポジトリファイルのみを更新してください。

オブジェクトリポジトリ Selenium

オブジェクト リポジトリとは何ですか?

オブジェクト リポジトリは、すべてのオブジェクトの共通の保存場所です。で Selenium WebDriver コンテキストでは、オブジェクトは通常、Web 要素を一意に識別するために使用されるロケーターになります。

オブジェクトリポジトリを使用する最大の利点は、オブジェクトとテストケースを分離できることです。あるWeb要素のロケーター値が変更された場合、そのロケーターが使用されているすべてのテストケースを変更するのではなく、オブジェクトリポジトリのみを変更すれば済みます。オブジェクトリポジトリを維持することで、フレームワーク実装のモジュール性が向上します。

オブジェクト リポジトリの種類 Selenium ウェブドライバー

Selenium WebDriverには、デフォルトでは組み込みのオブジェクトリポジトリは提供されていません。ただし、キーと値のペア方式を使用してオブジェクトリポジトリを構築できます。この場合、キーはオブジェクトに付けられた名前を指し、値はWebページ内でオブジェクトを一意に識別するために使用されるプロパティを指します。

作成できるオブジェクトリポジトリの種類は次のとおりです。 Selenium ウェブドライバー。

  1. プロパティファイルを使用したオブジェクトリポジトリ
  2. XMLファイルを使用したオブジェクトリポジトリ

Selenium プロパティ ファイルを使用した Web ドライバー オブジェクト リポジトリ

この方式では、プロパティファイルはテキストファイルであり、データはキーと値のペアの形式で格納されます。以下のチュートリアルでは、次のトピックについて説明します。

ステップ1) Eclipseでプロパティファイルを作成する

  1. まず、Eclipseで以下のJavaプロジェクト構造を作成する必要があります。プロジェクト名とパッケージ名は、有効な名前であれば何でも構いません。

プロパティ ファイルの作成 Eclipse

  1. メインプロジェクトフォルダを右クリックして、「新規」→「その他」を選択します。

プロパティ ファイルの作成 Eclipse

  1. 次のウィンドウで、[一般] -> [ファイル] を選択し、[次へ] ボタンをクリックします。

プロパティ ファイルの作成 Eclipse

  1. 新しいファイルリソースウィンドウで拡張子「.properties」の有効なファイル名を入力し、「完了」ボタンをクリックします。

プロパティ ファイルの作成 Eclipse

  1. プロジェクト構造には「application.properties」という名前のファイルが表示される必要があります。

プロパティ ファイルの作成 Eclipse

ステップ 2) データをプロパティ ファイルに保存する

  1. データはプロパティファイルにキーと値のペアの形式で保存され、キーはファイル全体で一意である。
  2. プロパティファイルを使用して、ロケーター値からWeb要素を識別してみます。
  3. application.properties ファイルを開く Eclipse 以下のデータを保存します
MobileTesting=//a[text()='MOBILE TESTING']
EmailTextBox = philadelphia-field-email
SignUpButton = philadelphia-field-submit

プロパティファイルへのデータの保存

4) このチュートリアルでは、次のデモ Web サイトを使用します。

https://demo.guru99.com/test/guru99home/テストシナリオは以下のとおりです。

  • XPATHを使用してモバイルテストのリンクをクリックします。
  • 戻る
  • IDを使用してメールテキストボックスにデータを入力してください
  • IDを使用して「サインアップ」ボタンをクリックします

ステップ 3) プロパティファイルからデータを読み取る

  1. プロパティファイルからデータを読み込むには、java.utilパッケージに用意されている組み込みのPropertiesクラスを使用できます。
  2. まず、以下のようにPropertiesクラスのオブジェクトを作成する必要があります。
  Properties obj = new Properties();
  1. プロパティファイルへのパスを指定して、FileInputStreamクラスのオブジェクトを作成する必要があります。
FileInputStream objfile = new FileInputStream(System.getProperty("user.dir")+"\\application.properties");
  1. JavaのPropertiesクラスが提供するloadメソッドを使用すると、プロパティファイルからデータを読み込むことができます。以下のコードは、loadメソッドの使用例を示しています。
Properties obj = new Properties();
FileInputStream objfile = new FileInputStream(System.getProperty("user.dir")+"\\application.properties");
obj.load(objfile);
String mobileTesting = obj.getProperty("MobileTesting");

文字列「mobileTesting」には、Web ページ内のモバイル テスト リンクを識別するための XPATH が含まれます。

ステップ 4) テスト スクリプトでプロパティ ファイルを使用する

プロパティファイルは、テストスクリプト内で、プロパティファイルからデータを読み込み、そのデータをfindElementメソッドのパラメータとして渡すことで使用できます。以下のコードは、テストスクリプト内でプロパティファイルから読み込んだデータを使用する方法を示しています。

driver.findElement(By.xpath(obj.getProperty("MobileTesting"))).click();
driver.findElement(By.id(obj.getProperty("EmailTextBox"))).sendKeys("testguru99@gmail.com");
driver.findElement(By.id(obj.getProperty("SignUpButton"))).click();

以下は、上記のテスト シナリオで使用される完全なコードです。

package com.objectrepository.demo;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class DemoOR {

    public static void main(String[] args) throws IOException {

        // Create WebDriver Instance
        WebDriver driver;
        System.setProperty("webdriver.chrome.driver", "G:\\chromedriver.exe");
        driver = new ChromeDriver();
        driver.get("https://demo.guru99.com/test/guru99home/");
        driver.manage().window().maximize();
        // Load the properties File
        Properties obj = new Properties();
        FileInputStream objfile = new FileInputStream(System.getProperty("user.dir")+"\\application.properties");
        obj.load(objfile);
        // Navigate to link Mobile Testing and Back
        driver.findElement(By.xpath(obj.getProperty("MobileTesting"))).click();
        driver.navigate().back();
        // Enter Data into Form
        driver.findElement(By.id(obj.getProperty("EmailTextBox"))).sendKeys("testguru99@gmail.com");
        driver.findElement(By.id(obj.getProperty("SignUpButton"))).click();
    }

}

Selenium XML ファイルを使用した WebDriver オブジェクト リポジトリ

XMLはExtensible Markup Languageの略です。XMLファイルは、基本構造としてDocument Object Model(DOM)を使用します。XMLファイル形式は、ウェブページが構築されるHTML形式を再現します。以下に、取り上げるトピックの一覧を示します。

ステップ1) EclipseでXMLファイルを作成する

  1. 以下の Java プロジェクト構造を次の場所に作成する必要があります。 Eclipse.

XML ファイルの作成 Eclipse

  1. プロジェクトフォルダーを右クリックし、「新規」→「その他」を選択します。

XML ファイルの作成 Eclipse

  1. XMLフォルダ内のXMLファイルを選択し、「次へ」ボタンをクリックします。

XML ファイルの作成 Eclipse

  1. 有効なXMLファイル名を入力し、「完了」ボタンをクリックしてください。

XML ファイルの作成 Eclipse

  1. 以下に示すように、XML ファイルがプロジェクト フォルダーに追加されます。

XML ファイルの作成 Eclipse

ステップ 2) データを XML ファイルに保存する

データは、ドキュメントオブジェクトモデル(DOM)の形式でXMLファイルに保存できます。分かりやすくするために、以下のテストシナリオを例として使用します。

  • XPATHを使用してモバイルテストのリンクをクリックします。
  • ホームページに戻る
  • IDを使用してメールテキストボックスにデータを入力してください
  • IDを使用して「サインアップ」ボタンをクリックします

使用するXMLファイルのフォーマットは以下のとおりです。

<menu>
      <mobiletesting>//a[text()='MOBILE TESTING']</mobiletesting>
      <email> philadelphia-field-email</email>
      <signup> philadelphia-field-submit </signup>
 </menu>

上記のXMLコードをproperties.xmlに保存します。

データを XML ファイルに保存する

「デザイン」タブには次のように表示されます。

データを XML ファイルに保存する

ステップ 3) XML ファイルからデータを読み取る

1. XMLファイルからのデータ読み込みは、Javaの組み込みクラス「dom4j」を使用して行うことができます。コードを実行する前に、以下のJARファイルをプロジェクトのビルドパスに追加する必要があることに注意してください。

  • jaxen.jar
  • dom4j-1.6.jar

2. 以下は、XMLファイルからデータを読み込むためのコードです。

        File inputFile = new File(System.getProperty("user.dir") +"\\properties.xml");
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read(inputFile);
        String mobileTesting = document.selectSingleNode("//menu/mobiletesting").getText();
        String emailTextBox = document.selectSingleNode("//menu/email").getText();
        String signUpButton = document.selectSingleNode("//menu/signup").getText();

3. まず、File オブジェクトを作成し、それを SAXReader クラスの 'read' メソッドのパラメータとして渡します。XML ファイルのデータが正常に読み込まれたら、'selectSingleNode' メソッドを使用して XML ドキュメントの個々のノードにアクセスできます。

ステップ 4) テスト スクリプトで XML ファイルを使用する

XMLファイルは、テストスクリプト内でデータ読み込みを行い、そのデータをfindElementメソッドのパラメータとして渡すことで使用できます。以下のコードは、テストスクリプト内でXMLファイルから読み取ったデータを使用する方法を示しています。

driver.findElement(By.xpath(mobileTesting)).click();
driver.findElement(By.id(emailTextBox)).sendKeys("testguru99@gmail.com");
driver.findElement(By.id(signUpButton)).click();

以下のコードは、Selenium WebDriverでXMLファイルを使用する方法を示しています。

package com.objectrepository.demo;
import java.io.*;
import java.util.*;
import org.dom4j.*;
import org.dom4j.io.SAXReader;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class DemoORXML {

    public static void main(String[] args) throws DocumentException {
        // Creating WebDriver Instance
        WebDriver driver;
        System.setProperty("webdriver.chrome.driver", "G:\\chromedriver.exe");
        driver = new ChromeDriver();
        driver.get("https://demo.guru99.com/test/guru99home/");
        driver.manage().window().maximize();
        // Reading XML File
        File inputFile = new File(System.getProperty("user.dir") +"\\properties.xml");
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read(inputFile);
        String mobileTesting = document.selectSingleNode("//menu/mobiletesting").getText();
        String emailTextBox = document.selectSingleNode("//menu/email").getText();
        String signUpButton = document.selectSingleNode("//menu/signup").getText();

        // Navigating to Mobile Testing and back
        driver.findElement(By.xpath(mobileTesting)).click();
        driver.navigate().back();
        // Entering Form Data
        driver.findElement(By.id(emailTextBox)).sendKeys("testguru99@gmail.com");
        driver.findElement(By.id(signUpButton)).click();

    }
}

Webドライバーをダウンロードする Eclipse プロジェクト

よくあるご質問

オブジェクトリポジトリは、要素ロケーターのみを外部に格納します。ページオブジェクトモデルは、ロケーターとページアクションをページクラス内にラップする、より広範なパターンです。

はい。ロケーターはExcelファイルやCSVファイルに保存し、Apache POIなどのライブラリを使用して読み込み、findElement関数に渡すこともできます。

明確で分かりやすいキーを使用し、ロケーターをページごとにグループ化し、IDなどの安定したロケーターを優先し、重複を避けてください。モジュールごとにリポジトリを1つにすることで、ロケーターの変更が単一のエントリのみを更新するようにします。

はい。複数のAI支援ツールがページをスキャンし、要素を検出して、既製のロケーターをリポジトリにエクスポートします。ただし、テスターはロケーターの安定性を確認する必要があります。

AIによる自己修復機能は、実行中に要素の属性を監視し、保存されているロケーターが破損した場合、自動的に代替の一致を選択します。これにより、インターフェースの軽微な変更があってもテストの実行が継続され、メンテナンスの手間が軽減されます。