Selenium الإطار: البيانات والكلمات الرئيسية والهجينة

ما هي تفاصيل Selenium نطاق؟

تشير Selenium إطار الأتمتة إن بنية الكود تجعل صيانة الكود سهلة وفعالة. فبدون الأطر، قد يضع المستخدمون "الكود" و"البيانات" في نفس المكان الذي لا يمكن إعادة استخدامه أو قراءته. تنتج الأطر نتائج مفيدة مثل زيادة إمكانية إعادة استخدام الكود، وزيادة قابلية النقل، وتقليل تكلفة صيانة البرنامج النصي، وتحسين قابلية قراءة الكود، وما إلى ذلك.

انواع من Selenium الإطار

هناك ثلاثة بشكل رئيسي نوع الأطر التي أنشأتها Selenium WebDriver لأتمتة حالات الاختبار اليدوي

  • الإطار المبني على البيانات
  • إطار يحركه الكلمات الرئيسية
  • إطار مدفوع هجين

انواع من Selenium الإطار

الإطار المبني على البيانات في Selenium

الإطار المبني على البيانات في Selenium هي طريقة لفصل مجموعات البيانات عن حالة الاختبار. بمجرد فصل مجموعات البيانات عن حالة الاختبار، يمكن تعديلها بسهولة لوظيفة محددة دون تغيير التعليمات البرمجية. يتم استخدامه لجلب حالات الاختبار والأجنحة من ملفات خارجية مثل Excelأو .csv أو .xml أو بعض جداول قاعدة البيانات.

الإطار المبني على البيانات في Selenium

لقراءة أو كتابة ملف Excel، يوفر Apache مكتبة POI مشهورة جدًا. هذه المكتبة قادرة بما يكفي على القراءة والكتابة XLS XLSX تنسيق ملف اكسل.

ليقرأ XLS الملفات، ان HSSF يتم توفير التنفيذ من خلال مكتبة POI.

ليقرأ XLSX, XSSF بداية شئ POI مكتبة سيكون الاختيار. دعونا ندرس هذه التطبيقات بالتفصيل.

لقد تعلمنا بالفعل عن الاختبار المبني على البيانات في موقعنا البرنامج التعليمي السابق

إطار يحركه الكلمات الرئيسية في Selenium

إطار يحركه الكلمات الرئيسية في Selenium هي طريقة تستخدم لتسريع الاختبار الآلي من خلال فصل الكلمات الرئيسية لمجموعة مشتركة من الوظائف والتعليمات. تتم كتابة جميع العمليات والتعليمات التي سيتم إجراؤها في ملف خارجي مثل ورقة Excel. يمكن للمستخدمين التحكم بسهولة وتحديد الوظائف التي يريدون اختبارها.

هنا كيف يبدو الإطار الكامل

إطار يحركه الكلمات الرئيسية في Selenium

كما ترى، إنه إطار عمل مكون من خمس خطوات. دعنا ندرسه خطوة بخطوة بالتفصيل

الخطوة 1)

  • سيقوم البرنامج النصي لبرنامج التشغيل Execute.java باستدعاء ReadGuru99ExcelFile.java
  • يحتوي ReadGuru99ExcelFile.java على برنامج نصي POI لقراءة البيانات من برنامج Excel

الخطوة 2)

  • سيقوم ReadGuru99ExcelFile.java بقراءة البيانات من TestCase.xlsx
  • هنا كيف تبدو الورقة-

إطار يحركه الكلمات الرئيسية في Selenium

  • وفقًا للكلمات الأساسية المكتوبة في ملف Excel، سيقوم الإطار بإجراء العملية على واجهة المستخدم.
  • على سبيل المثال، نحن بحاجة إلى النقر على زر "تسجيل الدخول". في المقابل، سيكون لبرنامج Excel الخاص بنا كلمة رئيسية "انقر". الآن يمكن أن يحتوي AUT على مئات الأزرار على الصفحة، لتحديد زر تسجيل الدخول، في Excel، سندخل اسم الكائن كزر تسجيل الدخول ونوع الكائن كاسم (انظر الصف المميز في الصورة أعلاه). يمكن أن يكون نوع الكائن هو Xpath أو اسم CSS أو أي قيمة أخرى

الخطوة 3) سيقوم ReadGuru99ExcelFile.java بتمرير هذه البيانات إلى البرنامج النصي لبرنامج التشغيل Execute.java

الخطوة 4)

  • بالنسبة لجميع عناصر الويب الخاصة بواجهة المستخدم الخاصة بنا، نحتاج إلى إنشاء مستودع كائنات حيث سنضع محدد موقع العناصر الخاص بها (مثل Xpath، والاسم، ومسار CSS، واسم الفئة، وما إلى ذلك)

إطار يحركه الكلمات الرئيسية في Selenium

  • سوف يقوم Execute.java (برنامج التشغيل الخاص بنا) بقراءة مستودع الكائنات بالكامل وتخزينه في متغير
  • لقراءة مستودع الكائنات هذا، نحتاج إلى فئة ReadObject التي تحتوي على طريقة getObjectRepository لقراءتها.
  • إطار يحركه الكلمات الرئيسية في Selenium

NOTE: قد تتساءل لماذا نحتاج إلى إنشاء مستودع كائنات. الجواب يساعد في صيانة التعليمات البرمجية. على سبيل المثال، نحن نستخدم الزر الذي يحمل الاسم = btnlogin في 10 حالات اختبار مختلفة. في المستقبل، يقرر المطور تغيير الاسم من btnlogin إلى الإرسال. سيكون عليك إجراء تغيير في جميع حالات الاختبار العشرة. في حالة مستودع الكائنات، ستقوم بإجراء التغيير مرة واحدة فقط في المستودع.

الخطوة 5)

  • سيقوم برنامج التشغيل بتمرير البيانات من Excel & Object Repository إلى واجهة المستخدمOperaفئة نشوئها
  • UIOperaتحتوي الفئة على وظائف لتنفيذ الإجراءات المقابلة للكلمات الرئيسية مثل CLICK وSETTEXT وما إلى ذلك... المذكورة في ملف Excel
  • UIOperaفئة نشوئها هي Java الفئة التي تحتوي على التنفيذ الفعلي للكود لإجراء العمليات على عناصر الويب

إطار يحركه الكلمات الرئيسية في Selenium

سيبدو المشروع الكامل مثل-

إطار يحركه الكلمات الرئيسية في Selenium

دعونا ننظر في مثال:

سيناريو الاختبار: نحن نقوم بتنفيذ حالتين اختباريتين

  • حالة الاختبار 1:
  • غوتو http://demo.guru99.com/V4/
  • أدخل معرف المستخدم
  • أدخل كلمة المرور
  • انقر فوق إعادة تعيين
  • حالة الاختبار 2:
  • غوتو http://demo.guru99.com/V4/
  • أدخل معرف المستخدم
  • أدخل كلمة المرور
  • انقر فوق تسجيل الدخول

خصائص الموضوع

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

قراءة Guru99ExcelFile.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 هذا على كل التعليمات البرمجية للكلمات الرئيسية المدفوعة بمفهوم موفر البيانات.

سيبدو التمثيل التصويري الكامل للإطار الهجين

إطار مدفوع هجين

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 برنامج تشغيل الويب.
  • A Selenium إطار عمل الأتمتة الذي يمكن تصنيفه إلى أطر عمل تعتمد على البيانات، وأخرى تعتمد على الكلمات الرئيسية، وأطر عمل هجينة.
  • يمكننا تحقيق إطار عمل يعتمد على البيانات باستخدام TestNGمزود البيانات.
  • في إطار العمل المبني على الكلمات الرئيسية، تتم كتابة الكلمات الرئيسية في بعض الملفات الخارجية مثل ملف Excel وسيقوم كود Java باستدعاء هذا الملف وتنفيذ حالات الاختبار.
  • الإطار المختلط عبارة عن مزيج من إطار عمل يعتمد على الكلمات الرئيسية وإطار عمل يعتمد على البيانات.

تحميل Selenium ملفات المشروع للعرض التوضيحي في هذا البرنامج التعليمي