Selenium Πλαίσιο: Δεδομένα, Λέξεις-κλειδιά & Υβριδικά

Τι είναι Selenium Δομή?

Η Selenium Πλαίσιο αυτοματισμού είναι μια δομή κώδικα που κάνει τη συντήρηση κώδικα εύκολη και αποτελεσματική. Χωρίς πλαίσια, οι χρήστες μπορούν να τοποθετήσουν τον «κώδικα» και τα «δεδομένα» στην ίδια τοποθεσία που δεν είναι ούτε επαναχρησιμοποιήσιμη ούτε readable. Τα πλαίσια παράγουν ευεργετικά αποτελέσματα όπως αυξημένη επαναχρησιμοποίηση κώδικα, υψηλότερη φορητότητα, μειωμένο κόστος συντήρησης σεναρίου, καλύτερη αναγνωσιμότητα κώδικα κ.λπ.

Τύποι Selenium Πλαίσιο

Είναι κυρίως τρεις τύπος πλαισίων δημιουργήθηκε από Selenium WebDriver για αυτοματοποίηση χειροκίνητων δοκιμών

  • Πλαίσιο βάσει δεδομένων
  • Πλαίσιο με βάση τη λέξη-κλειδί
  • Hybrid Driven Framework

Τύποι Selenium Πλαίσιο

Πλαίσιο βάσει δεδομένων σε Selenium

Πλαίσιο βάσει δεδομένων σε Selenium είναι μια μέθοδος διαχωρισμού συνόλων δεδομένων από την περίπτωση δοκιμής. Μόλις τα σύνολα δεδομένων διαχωριστούν από τη δοκιμαστική περίπτωση, μπορεί εύκολα να τροποποιηθεί για μια συγκεκριμένη λειτουργία χωρίς αλλαγή του κώδικα. Χρησιμοποιείται για τη λήψη δοκιμαστικών περιπτώσεων και σουιτών από εξωτερικά αρχεία όπως π.χ Excel, .csv, .xml ή ορισμένους πίνακες βάσης δεδομένων.

Πλαίσιο βάσει δεδομένων σε Selenium

Για να διαβάσετε ή να γράψετε ένα Excel, το Apache παρέχει ένα πολύ διάσημο POI βιβλιοθήκης. Αυτή η βιβλιοθήκη είναι αρκετά ικανή να διαβάζει και να γράφει και τα δύο XLS και XLSX μορφή αρχείου του Excel.

Να διαβασω XLS αρχεία, an HSSF Η υλοποίηση παρέχεται από τη βιβλιοθήκη POI.

Να διαβασω XLSX, XSSF εφαρμογή του POI βιβλιοθήκη θα είναι η επιλογή. Ας μελετήσουμε λεπτομερώς αυτές τις υλοποιήσεις.

Έχουμε ήδη μάθει για το Data Driven Testing στο δικό μας προηγούμενο σεμινάριο

Πλαίσιο με γνώμονα τη λέξη-κλειδί Selenium

Πλαίσιο με γνώμονα τη λέξη-κλειδί Selenium είναι μια μέθοδος που χρησιμοποιείται για την επιτάχυνση των αυτοματοποιημένων δοκιμών με διαχωρισμό λέξεων-κλειδιών για κοινό σύνολο λειτουργιών και οδηγιών. Ολα τα operaΟι εντολές και οι οδηγίες που πρέπει να εκτελεστούν γράφονται σε κάποιο εξωτερικό αρχείο όπως ένα φύλλο Excel. Οι χρήστες μπορούν εύκολα να ελέγξουν και να καθορίσουν τις λειτουργίες που θέλουν να δοκιμάσουν.

Εδώ είναι πώς φαίνεται το πλήρες πλαίσιο

Πλαίσιο με γνώμονα τη λέξη-κλειδί Selenium

Όπως μπορείτε να δείτε, είναι ένα πλαίσιο 5 βημάτων. Ας το μελετήσουμε βήμαwise λεπτομερώς

Βήμα 1)

  • Το σενάριο προγράμματος οδήγησης Execute.java θα καλέσει το ReadGuru99ExcelFile.java
  • Το ReadGuru99ExcelFile.java διαθέτει σενάριο POI για ανάγνωση δεδομένων από ένα Excel

Βήμα 2)

  • Το ReadGuru99ExcelFile.java θα διαβάσει δεδομένα από το TestCase.xlsx
  • Να πώς φαίνεται το φύλλο-

Πλαίσιο με γνώμονα τη λέξη-κλειδί Selenium

  • Σύμφωνα με τις λέξεις-κλειδιά που είναι γραμμένες στο αρχείο Excel, το πλαίσιο θα εκτελέσει το operaστη διεπαφή χρήστη.
  • Για παράδειγμα, πρέπει να κάνουμε κλικ σε ένα κουμπί «Είσοδος». Αντίστοιχα, το Excel μας θα έχει μια λέξη-κλειδί «Κλικ». Τώρα το AUT μπορεί να έχει εκατοντάδες κουμπιά σε μια σελίδα, για να προσδιορίσει ένα κουμπί Σύνδεση, στο Excel θα εισαγάγουμε Όνομα αντικειμένου ως Κουμπί σύνδεσης και τύπο αντικειμένου ως όνομα (δείτε την επισημασμένη σειρά στην παραπάνω εικόνα). Ο τύπος αντικειμένου μπορεί να είναι Xpath, όνομα CSS ή οποιαδήποτε άλλη τιμή

Βήμα 3) Το ReadGuru99ExcelFile.java θα μεταβιβάσει αυτά τα δεδομένα στο σενάριο του προγράμματος οδήγησης Execute.java

Βήμα 4)

  • Για όλα τα στοιχεία ιστού της διεπαφής χρήστη, πρέπει να δημιουργήσουμε ένα αποθετήριο αντικειμένων όπου θα τοποθετήσουμε τον εντοπισμό στοιχείων τους (όπως Xpath, όνομα, διαδρομή CSS, όνομα κλάσης κ.λπ.)

Πλαίσιο με γνώμονα τη λέξη-κλειδί Selenium

  • Το Execute.java (το σενάριο του προγράμματος οδήγησης μας) θα διαβάσει ολόκληρο το Αποθετήριο αντικειμένων και θα το αποθηκεύσει σε μια μεταβλητή
  • Για να διαβάσουμε αυτό το αποθετήριο αντικειμένων, χρειαζόμαστε μια κλάση ReadObject που έχει μια μέθοδο getObjectRepository για να το διαβάσει.
  • Πλαίσιο με γνώμονα τη λέξη-κλειδί Selenium

ΣΗΜΕΊΩΣΗ: Ίσως σκεφτείτε γιατί πρέπει να δημιουργήσουμε ένα αποθετήριο αντικειμένων. Η απάντηση βοηθά στη συντήρηση του κώδικα. Για παράδειγμα, χρησιμοποιούμε το κουμπί με όνομα = btnlogin σε 10 διαφορετικές περιπτώσεις δοκιμής. Στο μέλλον, ο προγραμματιστής αποφασίζει να αλλάξει το όνομα από btnlogin για υποβολή. Θα πρέπει να κάνετε μια αλλαγή και στις 10 περιπτώσεις δοκιμής. Στην περίπτωση ενός αποθετηρίου αντικειμένων, θα κάνετε την αλλαγή μόνο μία φορά στο αποθετήριο.

Βήμα 5)

  • Το πρόγραμμα οδήγησης θα μεταβιβάσει τα δεδομένα από το Excel & Object Repository στο UIOperaκατηγορίας
  • UIOperaΗ κλάση tion έχει λειτουργίες για την εκτέλεση ενεργειών που αντιστοιχούν σε λέξεις-κλειδιά όπως CLICK, SETTEXT κ.λπ… που αναφέρονται στο excel
  • UIOperaη κλάση είναι α Java κλάση που έχει την πραγματική υλοποίηση του κώδικα να εκτελέσει operaσε στοιχεία Ιστού

Πλαίσιο με γνώμονα τη λέξη-κλειδί Selenium

Το πλήρες έργο θα μοιάζει με-

Πλαίσιο με γνώμονα τη λέξη-κλειδί Selenium

Ας δούμε ένα παράδειγμα:

Σενάριο δοκιμής: Εκτελούμε 2 δοκιμαστικές περιπτώσεις

  • Δοκιμαστική περίπτωση 1:
  • Παω σε http://demo.guru99.com/V4/
  • Εισαγάγετε το User ID
  • Εισάγετε τον κωδικό πρόσβασης
  • Κάντε κλικ στο Επαναφορά
  • Δοκιμαστική περίπτωση 2:
  • Παω σε http://demo.guru99.com/V4/
  • Εισαγάγετε το User 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 Αρχεία έργου για την επίδειξη σε αυτό το σεμινάριο

Hybrid Driven Framework

Hybrid Driven Framework in Selenium είναι μια έννοια όπου χρησιμοποιούμε το πλεονέκτημα τόσο του πλαισίου που βασίζεται στις λέξεις-κλειδιά όσο και του πλαισίου που βασίζεται σε δεδομένα. Είναι ένα εύχρηστο πλαίσιο που επιτρέπει στους χειροκίνητους δοκιμαστές να δημιουργούν δοκιμαστικές περιπτώσεις κοιτάζοντας απλώς τις λέξεις-κλειδιά, τα δεδομένα δοκιμής και το χώρο αποθήκευσης αντικειμένων χωρίς κωδικοποίηση στο πλαίσιο.

Εδώ για λέξεις-κλειδιά, θα χρησιμοποιήσουμε αρχεία Excel για τη διατήρηση των δοκιμαστικών περιπτώσεων και για τα δεδομένα δοκιμής, μπορούμε να χρησιμοποιήσουμε δεδομένα, πάροχος Testng δομή.

Hybrid Driven Framework

Εδώ στο υβριδικό μας πλαίσιο, δεν χρειάζεται να αλλάξουμε τίποτα στο πλαίσιο που βασίζεται στη λέξη-κλειδί, εδώ πρέπει απλώς να αντικαταστήσουμε το αρχείο ExecuteTest.java με το αρχείο HybridExecuteTest.java.

Hybrid Driven Framework

Αυτό το αρχείο HybridExecuteTest έχει όλο τον κώδικα για τη λέξη-κλειδί που βασίζεται στην έννοια του παρόχου δεδομένων.

Η πλήρης εικονογραφική αναπαράσταση του υβριδικού πλαισίου θα μοιάζει

Hybrid Driven Framework

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.
  • A Selenium πλαίσιο αυτοματισμού που μπορεί να ταξινομηθεί σε Data Driven, Keyword Driven και Hybrid Frameworks.
  • Μπορούμε να επιτύχουμε πλαίσιο που βασίζεται σε δεδομένα χρησιμοποιώντας TestNGτου παρόχου δεδομένων.
  • Στο πλαίσιο βασισμένο σε λέξεις-κλειδιά, οι λέξεις-κλειδιά γράφονται σε ορισμένα εξωτερικά αρχεία, όπως το αρχείο excel και ο κώδικας java θα καλέσει αυτό το αρχείο και θα εκτελέσει δοκιμαστικές περιπτώσεις.
  • Το υβριδικό πλαίσιο είναι ένας συνδυασμός πλαισίου που βασίζεται σε λέξεις-κλειδιά και πλαίσιο δεδομένων.

Κατεβάστε το Selenium Αρχεία έργου για την επίδειξη σε αυτό το σεμινάριο