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段階のフレームワークです。段階的に詳しく見ていきましょう。

ステップ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 およびオブジェクト リポジトリから UI にデータを渡しますOperaクラス
  • UIOperation クラスには、Excel に記載されている CLICK、SETTEXT などのキーワードに対応するアクションを実行する関数があります。
  • UIOperaションクラスは Java ウェブ要素に対する操作を実行するためのコードの実際の実装を持つクラス

キーワード駆動フレームワーク 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 このチュートリアルのデモ用のプロジェクト ファイル

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

ハイブリッド駆動フレームワーク in 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;    
    }
}

まとめ

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

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