Selenium フレームワーク: データ、キーワード、ハイブリッド駆動

Selenium フレームワークとは何ですか?

また, Selenium 自動化フレームワーク コードのメンテナンスを簡単かつ効率的に行うコード構造です。 フレームワークがないと、ユーザーは「コード」と「データ」を同じ場所に配置する可能性があり、再利用も読み取りもできません。 フレームワークは、コードの再利用性の向上、移植性の向上、スクリプトのメンテナンスコストの削減、コードの可読性の向上などの有益な結果をもたらします。

Selenium フレームワークの種類

主にXNUMXつです フレームワークの種類 手動テスト ケースを自動化するために Selenium WebDriver によって作成されました

  • データドリブンフレームワーク
  • キーワード駆動フレームワーク
  • ハイブリッド駆動フレームワーク

Selenium フレームワークの種類

Selenium のデータ駆動型フレームワーク

Selenium のデータ駆動型フレームワーク データセットをテストケースから分離する方法です。 データ セットがテスト ケースから分離されると、コードを変更することなく、特定の機能に合わせてデータ セットを簡単に変更できます。 これは、次のような外部ファイルからテスト ケースとスイートをフェッチするために使用されます。 Excel、.csv、.xml、または一部のデータベース テーブル。

Selenium のデータ駆動型フレームワーク

Excel を読み書きするために、Apache は非常に有名なライブラリ POI を提供します。 このライブラリは、両方の読み取りと書き込みに十分な機能を備えています。 XLS > XLSX Excelのファイル形式です。

読むために XLS ファイル、 HSSF 実装は POI ライブラリによって提供されます。

読むために XLSX、 XSSF の実装 THEN ライブラリ の選択になります。 これらの実装を詳しく調べてみましょう。

データ駆動型テストについてはすでに学習しました。 前のチュートリアル

Seleniumのキーワード駆動型フレームワーク

Seleniumのキーワード駆動型フレームワーク は、共通の機能セットと命令のキーワードを分離することにより、自動テストを高速化するために使用される方法です。 実行するすべての操作と指示は、Excel シートなどの外部ファイルに記述されます。 ユーザーは、テストしたい機能を簡単に制御および指定できます。

完全なフレームワークは次のようになります

Seleniumのキーワード駆動型フレームワーク

ご覧のとおり、これは 5 ステップのフレームワークです。勉強してみようステップwise 詳細に

ステップ1)

  • ドライバー スクリプト Execute.java は ReadGuru99ExcelFile.java を呼び出します。
  • ReadGuru99ExcelFile.java には Excel からデータを読み取るための POI スクリプトがあります

ステップ2)

  • ReadGuru99ExcelFile.java は TestCase.xlsx からデータを読み取ります
  • シートはこんな感じです~

Seleniumのキーワード駆動型フレームワーク

  • Excelファイルに記述されたキーワードに従って、フレームワークがUI上の操作を実行します。
  • たとえば、「ログイン」ボタンをクリックする必要があります。 同様に、Excel には「クリック」というキーワードが含まれます。 これで、AUT はページ上に何百ものボタンを配置できるようになり、ログイン ボタンを識別するために、Excel でオブジェクト名を loginButton として入力し、オブジェクト タイプを名前として入力します (上の画像で強調表示された行を参照)。 オブジェクト タイプは、Xpath、名前 CSS、またはその他の値です。

ステップ3) ReadGuru99ExcelFile.java は、このデータをドライバー スクリプト Execute.java に渡します。

ステップ4)

  • すべての UI Web 要素について、要素ロケーター (Xpath、名前、CSS パス、クラス名など) を配置するオブジェクト リポジトリを作成する必要があります。

Seleniumのキーワード駆動型フレームワーク

  • Execute.java (ドライバー スクリプト) はオブジェクト リポジトリ全体を読み取り、変数に保存します。
  • このオブジェクト リポジトリを読み取るには、それを読み取る getObjectRepository メソッドを持つ ReadObject クラスが必要です。
  • Seleniumのキーワード駆動型フレームワーク

注意: なぜオブジェクト リポジトリを作成する必要があるのか​​と思われるかもしれません。 答えはコードのメンテナンスに役立ちます。 たとえば、10 の異なるテスト ケースで、名前 = btnlogin のボタンを使用しています。 将来的には、開発者は名前を btnlogin から submit に変更することを決定します。 10 個のテスト ケースすべてに変更を加える必要があります。 オブジェクト リポジトリの場合は、リポジトリ内で XNUMX 回だけ変更を加えます。

ステップ5)

  • ドライバーは Excel およびオブジェクト リポジトリから UIOperation クラスにデータを渡します
  • UIOperationクラスには、Excelに記載されているCLICK、SETTEXTなどのキーワードに対応するアクションを実行する関数があります。
  • UIOperationクラスは Java Web 要素上で操作を実行するコードを実際に実装したクラス

Seleniumのキーワード駆動型フレームワーク

完全なプロジェクトは次のようになります-

Seleniumのキーワード駆動型フレームワーク

例を見てみましょう:

テストシナリオ: 2 つのテスト ケースを実行しています

  • テストケース1:
  • 後藤 http://demo.guru99.com/V4/
  • ユーザーIDを入力してください
  • パスワードを入力します
  • [リセット]をクリックします
  • テストケース2:
  • 後藤 http://demo.guru99.com/V4/
  • ユーザーIDを入力してください
  • パスワードを入力します
  • ログインをクリックします

オブジェクトのプロパティ

url=http://demo.guru99.com/V4/
username=uid
password=password
title=barone
loginButton=btnLogin
resetButton=btnReset

ReadGuru99ExcelFile.java

package excelExportAndFileIO;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class ReadGuru99ExcelFile {
    
    public Sheet readExcel(String filePath,String fileName,String sheetName) throws IOException{
    //Create a object of File class to open xlsx file
    File file =    new File(filePath+"\\"+fileName);
    //Create an object of FileInputStream class to read excel file
    FileInputStream inputStream = new FileInputStream(file);
    Workbook guru99Workbook = null;
    //Find the file extension by spliting file name in substing and getting only extension name
    String fileExtensionName = fileName.substring(fileName.indexOf("."));
    //Check condition if the file is xlsx file
    if(fileExtensionName.equals(".xlsx")){
    //If it is xlsx file then create object of XSSFWorkbook class
    guru99Workbook = new XSSFWorkbook(inputStream);
    }
    //Check condition if the file is xls file
    else if(fileExtensionName.equals(".xls")){
        //If it is xls file then create object of XSSFWorkbook class
        guru99Workbook = new HSSFWorkbook(inputStream);
    }
    //Read sheet inside the workbook by its name
    Sheet guru99Sheet = guru99Workbook.getSheet(sheetName);
     return guru99Sheet;    
    }
}

ReadObject.java

package operation;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class ReadObject {
    Properties p = new Properties();
    public Properties getObjectRepository() throws IOException{
        //Read object repository file
        InputStream stream = new FileInputStream(new File(System.getProperty("user.dir")+"\\src\\objects\\object.properties"));
        //load all objects
        p.load(stream);
         return p;
    }
    
}

UIOperation.java

package operation;
import java.util.Properties;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class UIOperation {
    WebDriver driver;
    public UIOperation(WebDriver driver){
        this.driver = driver;
    }
    public void perform(Properties p,String operation,String objectName,String objectType,String value) throws Exception{
        System.out.println("");
        switch (operation.toUpperCase()) {
        case "CLICK":
            //Perform click
            driver.findElement(this.getObject(p,objectName,objectType)).click();
            break;
        case "SETTEXT":
            //Set text on control
            driver.findElement(this.getObject(p,objectName,objectType)).sendKeys(value);
            break;
            
        case "GOTOURL":
            //Get url of application
            driver.get(p.getProperty(value));
            break;
        case "GETTEXT":
            //Get text of an element
            driver.findElement(this.getObject(p,objectName,objectType)).getText();
            break;
        default:
            break;
        }
    }
    
    /**
     * Find element BY using object type and value
     * @param p
     * @param objectName
     * @param objectType
     * @return
     * @throws Exception
     */
    private By getObject(Properties p,String objectName,String objectType) throws Exception{
        //Find by xpath
        if(objectType.equalsIgnoreCase("XPATH")){
            
            return By.xpath(p.getProperty(objectName));
        }
        //find by class
        else if(objectType.equalsIgnoreCase("CLASSNAME")){
            
            return By.className(p.getProperty(objectName));
            
        }
        //find by name
        else if(objectType.equalsIgnoreCase("NAME")){
            
            return By.name(p.getProperty(objectName));
            
        }
        //Find by css
        else if(objectType.equalsIgnoreCase("CSS")){
            
            return By.cssSelector(p.getProperty(objectName));
            
        }
        //find by link
        else if(objectType.equalsIgnoreCase("LINK")){
            
            return By.linkText(p.getProperty(objectName));
            
        }
        //find by partial link
        else if(objectType.equalsIgnoreCase("PARTIALLINK")){
            
            return By.partialLinkText(p.getProperty(objectName));
            
        }else
        {
            throw new Exception("Wrong object type");
        }
    }
}

ExecuteTest.java

package testCases;
import java.util.Properties;
import operation.ReadObject;
import operation.UIOperation;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;
import excelExportAndFileIO.ReadGuru99ExcelFile;
public class ExecuteTest {
@Test
    public void testLogin() throws Exception {
        // TODO Auto-generated method stub
WebDriver webdriver = new FirefoxDriver();
ReadGuru99ExcelFile file = new ReadGuru99ExcelFile();
ReadObject object = new ReadObject();
Properties allObjects = object.getObjectRepository();
UIOperation operation = new UIOperation(webdriver);
//Read keyword sheet
Sheet guru99Sheet = file.readExcel(System.getProperty("user.dir")+"\\","TestCase.xlsx" , "KeywordFramework");
//Find number of rows in excel file
    int rowCount = guru99Sheet.getLastRowNum()-guru99Sheet.getFirstRowNum();
    //Create a loop over all the rows of excel file to read it
    for (int i = 1; i < rowCount+1; i++) {
        //Loop over all the rows
        Row row = guru99Sheet.getRow(i);
        //Check if the first cell contain a value, if yes, That means it is the new testcase name
        if(row.getCell(0).toString().length()==0){
        //Print testcase detail on console
            System.out.println(row.getCell(1).toString()+"----"+ row.getCell(2).toString()+"----"+
            row.getCell(3).toString()+"----"+ row.getCell(4).toString());
        //Call perform function to perform operation on UI
            operation.perform(allObjects, row.getCell(1).toString(), row.getCell(2).toString(),
                row.getCell(3).toString(), row.getCell(4).toString());
     }
        else{
            //Print the new testcase name when it started
                System.out.println("New Testcase->"+row.getCell(0).toString() +" Started");
            }
        }
    }
}

実行後の出力は次のようになります –

Seleniumのキーワード駆動型フレームワーク

このチュートリアルのデモ用の Selenium プロジェクト ファイルをダウンロードします。

ハイブリッド駆動フレームワーク

ハイブリッド駆動フレームワーク Selenium のコンセプトは、キーワード駆動フレームワークとデータ駆動フレームワークの両方の利点を活用しています。 これは使いやすいフレームワークで、手動テスターはフレームワーク内でコーディングすることなく、キーワード、テスト データ、オブジェクト リポジトリを確認するだけでテスト ケースを作成できます。

ここでキーワードについては、テスト ケースを維持するために Excel ファイルを使用します。テスト データについては、データ、プロバイダーを使用できます。 テスト フレームワーク。

ハイブリッド駆動フレームワーク

ここのハイブリッド フレームワークでは、キーワード駆動フレームワークでは何も変更する必要はありません。ExecuteTest.java ファイルを HybridExecuteTest.java ファイルに置き換えるだけです。

ハイブリッド駆動フレームワーク

この HybridExecuteTest ファイルには、データ プロバイダーの概念に基づくキーワード駆動のコードがすべて含まれています。

ハイブリッド フレームワークの完全な図表現は次のようになります。

ハイブリッド駆動フレームワーク

ハイブリッド実行テスト.java

package testCases;
import java.io.IOException;
import java.util.Properties;
import operation.ReadObject;
import operation.UIOperation;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import excelExportAndFileIO.ReadGuru99ExcelFile;
public class HybridExecuteTest {
    WebDriver webdriver = null;
@Test(dataProvider="hybridData")
    public void testLogin(String testcaseName,String keyword,String objectName,String objectType,String value) throws Exception {
        // TODO Auto-generated method stub
      
    if(testcaseName!=null&&testcaseName.length()!=0){
    webdriver=new FirefoxDriver();
    }
ReadObject object = new ReadObject();
Properties allObjects = object.getObjectRepository();
UIOperation operation = new UIOperation(webdriver);
    //Call perform function to perform operation on UI
            operation.perform(allObjects, keyword, objectName,
                objectType, value);
    
    }
@DataProvider(name="hybridData")
    public Object[][] getDataFromDataprovider() throws IOException{
    Object[][] object = null;
    ReadGuru99ExcelFile file = new ReadGuru99ExcelFile();
//Read keyword sheet
Sheet guru99Sheet = file.readExcel(System.getProperty("user.dir")+"\\","TestCase.xlsx" , "KeywordFramework");
//Find number of rows in excel file
    int rowCount = guru99Sheet.getLastRowNum()-guru99Sheet.getFirstRowNum();
    object = new Object[rowCount][5];
    for (int i = 0; i < rowCount; i++) {
        //Loop over all the rows
        Row row = guru99Sheet.getRow(i+1);
        //Create a loop to print cell values in a row
        for (int j = 0; j < row.getLastCellNum(); j++) {
            //Print excel data in console
            object[i][j] = row.getCell(j).toString();
        }
    }
    System.out.println("");
     return object;    
    }
}

まとめ

  • Selenium WebDriver を使用して XNUMX 種類のテスト フレームワークを作成できます。
  • データ駆動型、キーワード駆動型、ハイブリッド フレームワークに分類できる Selenium 自動化フレームワーク。
  • TestNG のデータ プロバイダーを使用してデータドリブン フレームワークを実現できます。
  • キーワード駆動フレームワークでは、キーワードは Excel ファイルなどの外部ファイルに書き込まれ、Java コードがこのファイルを呼び出してテスト ケースを実行します。
  • ハイブリッド フレームワークは、キーワード駆動フレームワークとデータ駆動フレームワークを組み合わせたものです。

このチュートリアルのデモ用の Selenium プロジェクト ファイルをダウンロードします。