Selenium Khung: Dữ liệu, Từ khóa & Điều khiển Kết hợp

Là gì Selenium Khung?

Selenium Khung tự động hóa là một cấu trúc mã giúp việc bảo trì mã dễ dàng và hiệu quả. Nếu không có khung, người dùng có thể đặt “mã” và “dữ liệu” ở cùng một vị trí và không thể sử dụng lại cũng như không thể đọc được. Các khung tạo ra các kết quả có lợi như tăng khả năng sử dụng lại mã, tính di động cao hơn, giảm chi phí bảo trì tập lệnh, khả năng đọc mã tốt hơn, v.v.

các loại Selenium Khung

Chủ yếu có ba loại khung được tạo ra bởi Selenium WebDriver để tự động hóa các trường hợp kiểm thử thủ công

  • Khung điều khiển dữ liệu
  • Khuôn khổ theo hướng từ khóa
  • Khung điều khiển lai

các loại Selenium Khung

Khung điều khiển dữ liệu trong Selenium

Khung điều khiển dữ liệu trong Selenium là một phương pháp tách các tập dữ liệu khỏi trường hợp thử nghiệm. Khi các tập dữ liệu được tách khỏi trường hợp thử nghiệm, nó có thể dễ dàng sửa đổi cho một chức năng cụ thể mà không cần thay đổi mã. Nó được sử dụng để tìm nạp các trường hợp và bộ thử nghiệm từ các tệp bên ngoài như Excel, .csv, .xml hoặc một số bảng cơ sở dữ liệu.

Khung điều khiển dữ liệu trong Selenium

Để đọc hoặc viết Excel, Apache cung cấp thư viện POI rất nổi tiếng. Thư viện này có đủ khả năng để đọc và viết cả xls XLSX định dạng tập tin của Excel.

Đọc xls tập tin, một HSSF việc triển khai được cung cấp bởi thư viện POI.

Đọc XLSX, XSSF thực hiện POI thư viện sẽ là sự lựa chọn Hãy nghiên cứu những triển khai này một cách chi tiết.

Chúng ta đã tìm hiểu về Kiểm thử theo hướng dữ liệu trong hướng dẫn trước

Khung điều khiển từ khóa trong Selenium

Khung điều khiển từ khóa trong Selenium là một phương pháp được sử dụng để tăng tốc độ kiểm tra tự động bằng cách tách các từ khóa cho tập hợp chức năng và hướng dẫn chung. Tất cả các thao tác và hướng dẫn cần thực hiện đều được ghi vào một số tệp bên ngoài như bảng Excel. Người dùng có thể dễ dàng kiểm soát và chỉ định các chức năng họ muốn kiểm tra.

Đây là cách khung hoàn chỉnh trông như thế nào

Khung điều khiển từ khóa trong Selenium

Như bạn có thể thấy, đây là một khuôn khổ gồm 5 bước. Chúng ta hãy nghiên cứu nó từng bước một cách chi tiết

Bước 1)

  • Tập lệnh trình điều khiển Thực thi.java sẽ gọi ReadGuru99ExcelFile.java
  • ReadGuru99ExcelFile.java có tập lệnh POI để đọc dữ liệu từ Excel

Bước 2)

  • ReadGuru99ExcelFile.java sẽ đọc dữ liệu từ TestCase.xlsx
  • Đây là cách trang tính trông như thế nào-

Khung điều khiển từ khóa trong Selenium

  • Theo từ khóa viết trên file Excel, framework sẽ thực hiện thao tác trên UI.
  • Ví dụ: chúng ta cần nhấp vào nút 'Đăng nhập.' Tương ứng, Excel của chúng ta sẽ có từ khóa “Click”. Bây giờ AUT có thể có hàng trăm nút trên một trang, để xác định nút Đăng nhập, trong Excel, chúng ta sẽ nhập Tên đối tượng là loginButton & loại đối tượng làm tên (xem hàng được đánh dấu trong hình trên). Loại đối tượng có thể là Xpath, tên CSS hoặc bất kỳ giá trị nào khác

Bước 3) ReadGuru99ExcelFile.java sẽ chuyển dữ liệu này tới tập lệnh trình điều khiển Thực thi.java

Bước 4)

  • Đối với tất cả các thành phần web giao diện người dùng của chúng ta, chúng ta cần tạo một kho lưu trữ đối tượng nơi chúng ta sẽ đặt bộ định vị thành phần của chúng (như Xpath, tên, đường dẫn CSS, tên lớp, v.v.)

Khung điều khiển từ khóa trong Selenium

  • Thực thi.java (tập lệnh trình điều khiển của chúng tôi) sẽ đọc toàn bộ Kho lưu trữ đối tượng và lưu trữ nó trong một biến
  • Để đọc kho lưu trữ đối tượng này, chúng ta cần một lớp ReadObject có phương thức getObjectRepository để đọc nó.
  • Khung điều khiển từ khóa trong Selenium

LƯU Ý: Bạn có thể nghĩ tại sao chúng ta cần tạo một kho lưu trữ đối tượng. Câu trả lời giúp bảo trì mã. Ví dụ: chúng tôi đang sử dụng nút có tên = btnlogin trong 10 trường hợp thử nghiệm khác nhau. Trong tương lai, nhà phát triển quyết định đổi tên từ btnlogin thành submit. Bạn sẽ phải thực hiện thay đổi trong tất cả 10 trường hợp thử nghiệm. Trong trường hợp kho lưu trữ đối tượng, bạn sẽ thực hiện thay đổi chỉ một lần trong kho lưu trữ.

Bước 5)

  • Trình điều khiển sẽ chuyển dữ liệu từ Excel & Object Repository sang UIOperalớp học
  • UIOperaLớp tion có chức năng thực hiện các hành động tương ứng với các từ khóa như CLICK, SETTEXT, v.v… được đề cập trong excel
  • UIOperalớp học là một Java lớp có triển khai mã thực tế để thực hiện các thao tác trên các thành phần web

Khung điều khiển từ khóa trong Selenium

Dự án hoàn chỉnh sẽ trông giống như-

Khung điều khiển từ khóa trong Selenium

Hãy xem xét một ví dụ:

Kịch bản thử nghiệm: Chúng tôi đang thực hiện 2 trường hợp thử nghiệm

  • Trường hợp thử nghiệm 1:
  • Goto https://demo.guru99.com/V4/
  • Nhập ID người dùng
  • Nhập mật khẩu
  • Nhấp vào Đặt lại
  • Trường hợp thử nghiệm 2:
  • Goto https://demo.guru99.com/V4/
  • Nhập ID người dùng
  • Nhập mật khẩu
  • Bấm Đăng nhập

object.properties

url=https://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");
        }
    }
}

Thực thiTest.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");
            }
        }
    }
}

Sau khi thực hiện, đầu ra sẽ như thế nào –

Khung điều khiển từ khóa trong Selenium

Tải về Selenium Tệp dự án cho bản demo trong hướng dẫn này

Khung điều khiển lai

Khung điều khiển lai in Selenium là một khái niệm mà chúng tôi đang sử dụng lợi thế của cả khung điều khiển từ khóa cũng như khung điều khiển dữ liệu. Đây là một khung dễ sử dụng cho phép người kiểm tra thủ công tạo các trường hợp kiểm thử chỉ bằng cách xem từ khóa, dữ liệu kiểm tra và kho lưu trữ đối tượng mà không cần mã hóa trong khung.

Ở đây đối với từ khóa, chúng tôi sẽ sử dụng tệp Excel để duy trì các trường hợp thử nghiệm và đối với dữ liệu thử nghiệm, chúng tôi có thể sử dụng dữ liệu, nhà cung cấp Kiểm tra khuôn khổ.

Khung điều khiển lai

Ở đây trong khung kết hợp của chúng tôi, chúng tôi không cần thay đổi bất cứ điều gì trong khung điều khiển Từ khóa, ở đây chúng tôi chỉ cần thay thế tệp tin Thực thi.java bằng tệp HybridExecuteTest.java.

Khung điều khiển lai

Tệp HybridExecuteTest này có tất cả mã cho từ khóa được điều khiển bằng khái niệm nhà cung cấp dữ liệu.

Hình ảnh hoàn chỉnh của khung kết hợp sẽ trông giống như

Khung điều khiển lai

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;    
    }
}

Tổng kết

  • Chúng ta có thể tạo ba loại khung kiểm tra bằng cách sử dụng Selenium WebDriver.
  • A Selenium khung tự động hóa có thể được phân loại thành Khung theo hướng dữ liệu, Theo hướng từ khóa và Khung kết hợp.
  • Chúng ta có thể đạt được khung điều khiển dữ liệu bằng cách sử dụng TestNGnhà cung cấp dữ liệu của.
  • Trong khung điều khiển từ khóa, từ khóa được viết trong một số tệp bên ngoài như tệp excel và mã java sẽ gọi tệp này và thực hiện các trường hợp thử nghiệm.
  • Khung kết hợp là sự kết hợp giữa khung điều khiển từ khóa và khung điều khiển dữ liệu.

Tải về Selenium Tệp dự án cho bản demo trong hướng dẫn này