Selenium Kehys: Data-, avainsana- ja hybridipohjainen

โšก ร„lykรคs yhteenveto

Selenium Kehys: Data-, avainsana- ja hybridipohjaiset lรคhestymistavat mรครคrittelevรคt, miten testaajat organisoivat automaatiokoodia, erottavat testidatan ja kรคyttรคvรคt logiikkaa uudelleen. Tรคssรค artikkelissa selitetรครคn kutakin kehystyyppiรค, sen arkkitehtuuria, etuja ja sitรค, miten ne toteutetaan vaiheittain kรคytรคnnรถn vinkein. Selenium WebDriver-koodiesimerkkejรค.

  • โœ… Ydinmรครคritelmรค: A Selenium Framework on strukturoitu koodiarkkitehtuuri, joka parantaa automatisoitujen testiskriptien uudelleenkรคytettรคvyyttรค, siirrettรคvyyttรค ja yllรคpitoa.
  • ๐Ÿ“Š Datalรคhtรถinen toteutus: Erota testidata logiikasta Excelin, CSV:n tai XML:n avulla ja lue syรถtteet Apache POI:n kautta (HSSF XLS:lle, XSSF XLSX:lle).
  • ๐Ÿ”‘ Avainsanalรคhtรถinen suunnittelu: Ohjaa kรคyttรถliittymรคtoimintoja avainsanataulukoiden ja objektivarastojen avulla, jotta manuaaliset testaajat voivat rakentaa tapauksia kirjoittamatta Java koodi.
  • โš™๏ธ Hybridioptimointi: Yhdistรครค TestNG datan tarjoajia, joilla on avainsanojen suoritus joustavuuden, skaalautuvuuden ja komentosarjojen yllรคpitokustannusten pienentรคmiseksi.
  • ๐Ÿงฉ Objektivaraston hyรถty: Keskitรค paikantimet ominaisuustiedostoon, jotta elementtien muutokset vaativat vain yhden sijainnin pรคivittรคmistรค kaikissa testitapauksissa.

Selenium Puitteet

Mikรค on Selenium Puitteet?

Selenium automaatiokehys on strukturoitu koodiarkkitehtuuri, joka tekee testien yllรคpidosta yksinkertaista, skaalautuvaa ja tehokasta. Ilman viitekehystรค testaajat usein sijoittavat koodin ja datan samaan paikkaan, jota ei voida kรคyttรครค uudelleen eikรค lukea. Viitekehyksen kรคyttรถรถnotto tarjoaa mitattavia etuja, kuten paremman koodin uudelleenkรคytettรคvyyden, paremman siirrettรคvyyden, pienemmรคt skriptien yllรคpitokustannukset, paremman luettavuuden ja selkeรคmmรคn eron testilogiikan ja syรถttรถdatan vรคlillรค.

Miksi kรคyttรครค a Selenium Automaatiokehys?

Hyvin suunniteltu Selenium viitekehys ratkaisee kolme testiautomaation jatkuvaa ongelmaa: koodin pรครคllekkรคisyyden, hauraat paikantimet ja hallitsemattoman testidatan. Selkeรคn rakenteen avulla tiimit voivat skaalata pakettejaan kourallisesta skripteihin sadoissa menettรคmรคttรค hallintaa.

  • Yllรคpidettรคvyys: Keskitetyt paikantimet ja apumetodit tarkoittavat, ettรค yksi muutos pรคivittรครค jokaisen testin, joka kรคyttรครค kyseistรค elementtiรค.
  • Uudelleenkรคytettรคvyys: Yleiset toiminnot, kuten kirjautuminen, navigointi tai lomakkeen tรคyttรคminen, kirjoitetaan kerran ja niitรค kutsutaan useissa testitapauksissa.
  • Skaalautuvuus: Uusien testitapausten lisรครคmisestรค tulee koodaustehtรคvรคn sijaan datan pรคivitys, mikรค antaa myรถs ei-kehittรคjien osallistua skenaarioiden luomiseen.
  • Raportointi ja yhteistyรถ: Standardoitu rakenne helpottaa integrointia raportointityรถkaluihin, CI/CD-prosessien ja versionhallintaan.

Tyyppisiรค Selenium Puitteet

Ensisijaisia โ€‹โ€‹on kolme kehysten tyypit rakennettu Selenium WebDriver manuaalisten testitapausten automatisointiin. Jokainen tyyli pyrkii erilaiseen tasapainoon kehittรคjรคn tyรถpanoksen, testaajien osallistumisen ja datan joustavuuden vรคlillรค.

  • Data Driven Framework
  • Avainsanoihin perustuva kehys
  • Hybridikรคyttรถinen kehys

Tyyppisiรค Selenium Puitteet

Seuraavissa osioissa selitetรครคn kutakin viitekehystรค yksityiskohtaisesti alkaen yksinkertaisimmasta datalรคhtรถisestรค lรคhestymistavasta ja edeten joustavimpaan hybridimalliin.

Data Driven Framework sisรครคn Selenium

Data Driven Framework sisรครคn Selenium on menetelmรค testidatajoukkojen erottamiseksi testitapausten logiikasta. Kun data on irrotettu, voit muokata tietyn toiminnallisuuden syรถtteitรค koskematta testikoodiin. Sitรค kรคytetรครคn yleisesti testitapausten ja -sarjojen hakemiseen ulkoisista lรคhteistรค, kuten kunnostautua, .csv-, .xml- tai tietokantataulukoita.

Data Driven Framework sisรครคn Selenium

Excel-tiedostojen lukemiseen tai kirjoittamiseen Apache tarjoaa tunnetun POI-kirjaston. Tรคmรค kirjasto pystyy kรคsittelemรครคn sekรค XLS ja XLSX formaatit. The HSSF toteutus lukee vanhoja XLS-tiedostoja, kun taas XSSF toteutus kรคsittelee nykyaikaisia โ€‹โ€‹XLSX-tiedostoja.

Olemme jo kรคsitelleet datalรคhtรถistรค testausta edellinen opetusohjelma.

Avainsanoihin perustuva kehys Selenium

Avainsanoihin perustuva kehys Selenium on menetelmรค, joka nopeuttaa automaatiota erottamalla avainsanat yleisille funktioille ja ohjeille. Kaikki operaatiot ja ohjeet kirjoitetaan ulkoiseen tiedostoon, tyypillisesti Excel-taulukkoon. Testaajat voivat mรครคrittรครค validoitavat toiminnot muokkaamatta niitรค. Java koodia, mikรค tekee tรคstรค tyylistรค ihanteellisen tiimeille, joissa liiketoiminta-analyytikot tai manuaalinen laadunvarmistus tuottavat testimรครคritelmiรค.

Nรคin kokonaiskehys nรคyttรครค:

Avainsanoihin perustuva kehys Selenium

Kuten nรคette, kyseessรค on viisivaiheinen viitekehys. Tutkitaanpa sitรค vaiheittain yksityiskohtaisesti.

Vaihe 1)

  • Ajuriskripti Execute.java kutsuu Read-funktiotaGuru99Excel-tiedosto.java.
  • LueGuru99ExcelFile.java sisรคltรครค POI-koodia, joka lukee tietoja Excelistรค.

Vaihe 2)

  • LueGuru99ExcelFile.java lukee tietoja TestCase.xlsx-tiedostosta.
  • Nรคin arkki nรคyttรครค:

Avainsanapohjaisen viitekehyksen Excel-taulukko Selenium

  • Excel-tiedostoon kirjoitettujen avainsanojen perusteella kehys suorittaa vastaavan toiminnon kรคyttรถliittymรคssรค.
  • Esimerkiksi โ€Kirjaudu sisรครคnโ€ -painikkeen napsauttamiseksi Excel-taulukko tallentaa avainsanan โ€Klikkaaโ€. Kirjautumispainikkeen tunnistamiseksi sivulla olevien monien joukosta Excel-rivi mรครคrittรครค objektin nimen loginButton-painikkeeksi ja objektin tyypin nimeksi (katso kuvassa korostettu rivi). Objektityyppi voi olla myรถs XPath, CSS, luokka tai mikรค tahansa muu paikannusstrategia.

Vaihe 3) LueGuru99ExcelFile.java vรคlittรครค jรคsennetyn datan takaisin ajurikomentosarjalle Execute.java.

Vaihe 4)

  • Kaikille kรคyttรถliittymรคn verkkoelementeille yllรคpidรคt objektisรคilรถรค, joka tallentaa elementtien paikantimet, kuten XPath-lausekkeet, nimen, CSS-lausekkeet tai luokan nimen.

Objektivarasto avainsanapohjaisessa viitekehyksessรค

  • Execute.java (ajuriskripti) lukee koko objektisรคilรถn ja tallentaa sen muuttujaan.
  • Apuluokka ReadObject paljastaa getObjectRepository-metodin, joka lataa repositorion ajonaikana.

ReadObject-apuluokka avainsanapohjaiselle viitekehykselle

HUOMAUTUS: Saatat ihmetellรค, miksi objektisรคilรถรค tarvitaan. Vastaus on yllรคpidettรคvyys. Jos 10 testitapauksessa kรคytetรครคn painiketta nimeltรค btnlogin ja kehittรคjรค nimeรครค sen uudelleen lรคhetettรคvรคksi, muuten muokkaisit 10 tiedostoa. Objektisรคilรถssรค muutat paikantimen yhdessรค paikassa.

Vaihe 5)

  • Ohjain vรคlittรครค tiedot Excelistรค ja objektisรคilรถstรค kรคyttรถliittymรครคn.Operation luokka.
  • UIOperation sisรคltรครค funktioita, jotka yhdistรคvรคt jokaisen avainsanan, kuten CLICK ja SETTEXT, konkreettiseen WebDriver-toimintoon.
  • UIOperation on Java luokka, joka sisรคltรครค varsinaisen toteutuksen verkkoelementtien kanssa vuorovaikutukseen.

UIOperation-luokka avainsanapohjaisessa viitekehyksessรค

Projektin kokonaisrakenne nรคyttรครค tรคltรค:

Avainsanapohjaisen viitekehyksen tรคydellinen projektirakenne

Katsotaanpa kรคytรคnnรถn esimerkkiรค:

Testi skenaario: Suoritamme kahta testitapausta.

objekti.ominaisuudet

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

LueGuru99Excel-tiedosto.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 File object to open the xlsx file
        File file = new File(filePath + "\\" + fileName);
        // Create a FileInputStream to read the Excel file
        FileInputStream inputStream = new FileInputStream(file);
        Workbook guru99Workbook = null;
        // Detect the file extension
        String fileExtensionName = fileName.substring(fileName.indexOf("."));
        if (fileExtensionName.equals(".xlsx")) {
            guru99Workbook = new XSSFWorkbook(inputStream);
        } else if (fileExtensionName.equals(".xls")) {
            guru99Workbook = new HSSFWorkbook(inputStream);
        }
        // Read the 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 the 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":
                driver.findElement(this.getObject(p, objectName, objectType)).click();
                break;
            case "SETTEXT":
                driver.findElement(this.getObject(p, objectName, objectType)).sendKeys(value);
                break;
            case "GOTOURL":
                driver.get(p.getProperty(value));
                break;
            case "GETTEXT":
                driver.findElement(this.getObject(p, objectName, objectType)).getText();
                break;
            default:
                break;
        }
    }

    private By getObject(Properties p, String objectName, String objectType) throws Exception {
        if (objectType.equalsIgnoreCase("XPATH")) {
            return By.xpath(p.getProperty(objectName));
        } else if (objectType.equalsIgnoreCase("CLASSNAME")) {
            return By.className(p.getProperty(objectName));
        } else if (objectType.equalsIgnoreCase("NAME")) {
            return By.name(p.getProperty(objectName));
        } else if (objectType.equalsIgnoreCase("CSS")) {
            return By.cssSelector(p.getProperty(objectName));
        } else if (objectType.equalsIgnoreCase("LINK")) {
            return By.linkText(p.getProperty(objectName));
        } 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 {
        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 the number of rows in the Excel file
        int rowCount = guru99Sheet.getLastRowNum() - guru99Sheet.getFirstRowNum();
        for (int i = 1; i < rowCount + 1; i++) {
            Row row = guru99Sheet.getRow(i);
            if (row.getCell(0).toString().length() == 0) {
                System.out.println(row.getCell(1).toString() + "----" + row.getCell(2).toString() + "----" +
                        row.getCell(3).toString() + "----" + row.getCell(4).toString());
                operation.perform(allObjects, row.getCell(1).toString(), row.getCell(2).toString(),
                        row.getCell(3).toString(), row.getCell(4).toString());
            } else {
                System.out.println("New Testcase->" + row.getCell(0).toString() + " Started");
            }
        }
    }
}

Suorituksen jรคlkeen tuloste nรคyttรครค tรคltรค:

Avainsanapohjaisen viitekehyksen suoritustulos

Lataa Selenium Projektitiedostot esittelyรค varten tรคssรค opetusohjelmassa

Hybridikรคyttรถinen kehys

Hybridikรคyttรถinen kehys in Selenium yhdistรครค sekรค avainsanapohjaisten ettรค datalรคhtรถisten kehysten vahvuudet. Se on helppokรคyttรถinen malli, jonka avulla manuaaliset testaajat voivat luoda testitapauksia yksinkertaisesti muokkaamalla avainsanoja, testidataa ja objektivarastoa ilman, ettรค heidรคn tarvitsee kirjoittaa mitรครคn kehyskoodia.

Tรคssรค Excel-tiedostot sรคilyttรคvรคt kunkin vaiheen avainsanat ja TestNG'S tietojen tarjoaja toimittaa testidatan. Tรคmรคn jaon avulla voit skaalata sekรค toimintosanaston ettรค syรถtevariaatiot erikseen.

Hybrid Driven Framework -arkkitehtuuri

Hybridi-kehyksessรคmme avainsanoihin perustuva rakenne ei muutu: korvaamme yksinkertaisesti ExecuteTest.java-tiedoston HybridExecuteTest.java-tiedostolla.

Hybrid Driven Framework -komponenttien vaihto

Tรคmรค HybridExecuteTest-tiedosto sisรคltรครค tรคyden avainsanoihin perustuvan logiikan yhdistettynรค TestNGn tiedontarjoajamekanismi.

Hybridikehyksen tรคydellinen kuvallinen esitys nรคyttรครค tรคltรค:

Hybrid Driven Frameworkin tรคydellinen esitys

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 {
        if (testcaseName != null && testcaseName.length() != 0) {
            webdriver = new FirefoxDriver();
        }
        ReadObject object = new ReadObject();
        Properties allObjects = object.getObjectRepository();
        UIOperation operation = new UIOperation(webdriver);
        operation.perform(allObjects, keyword, objectName, objectType, value);
    }

    @DataProvider(name = "hybridData")
    public Object[][] getDataFromDataprovider() throws IOException {
        Object[][] object = null;
        ReadGuru99ExcelFile file = new ReadGuru99ExcelFile();
        Sheet guru99Sheet = file.readExcel(System.getProperty("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");
        int rowCount = guru99Sheet.getLastRowNum() - guru99Sheet.getFirstRowNum();
        object = new Object[rowCount][5];
        for (int i = 0; i < rowCount; i++) {
            Row row = guru99Sheet.getRow(i + 1);
            for (int j = 0; j < row.getLastCellNum(); j++) {
                object[i][j] = row.getCell(j).toString();
            }
        }
        System.out.println("");
        return object;
    }
}

Lataa Selenium Projektitiedostot esittelyรค varten tรคssรค opetusohjelmassa

UKK

Valitse avainsanapohjainen testaus, kun manuaalisten testaajien on rakennettava tapauksia ilman koodausta. Valitse datapohjainen testaus, kun saman skriptin on suoritettava useita syรถttรถmuunnelmia vasten. Kรคytรค hybridimallia, kun tarvitset sekรค datajoustavuutta ettรค avainsanatason testien luontia samanaikaisesti.

Apache POI lukee ja kirjoittaa tietolรคhteenรค kรคytettyjรค Excel-tiedostoja. HSSF kรคsittelee vanhoja .xls-tiedostoja, kun taas XSSF kรคsittelee moderneja .xlsx-tiedostoja. Yhdessรค ne mahdollistavat testiskriptiesi dynaamisten syรถtteiden hakemisen laskentataulukoista ilman datan kovakoodausta.

Objektivarasto keskittรครค elementtien paikantimet, kuten XPath, CSS tai nimi. Jos kehittรคjรค nimeรครค kรคyttรถliittymรคkomponentin uudelleen, pรคivitรคt yhden merkinnรคn jokaisen testitapauksen sijaan, mikรค vรคhentรครค merkittรคvรคsti yllรคpitoaikaa ja rikkoutuneiden komentosarjojen riskiรค.

AI paranee Selenium kehyksiรค itsekorjautuvien paikantimien, รคlykkรครคn testipriorisoinnin ja visuaalisen validoinnin avulla. Tekoรคlymoottorit havaitsevat paikantimen ajautumisen, suosittelevat vakaita valitsimia ja analysoivat vikamalleja, mikรค pitรครค hybridipaketit luotettavina testattavan sovelluksen kehittyessรค.

Kyllรค. Nykyaikaiset tekoรคlyavustajat analysoivat testattavaa sovellusta ja ehdottavat avainsanakirjastoja, esimerkkisyรถtteitรค ja reunatapauksia. Testaajat tarkistavat ja tarkentavat ehdotuksia, mikรค nopeuttaa kehyksen asennusta samalla kunping ihmisen valvonta kriittisen validointilogiikan suhteen.

Tiivistรค tรคmรค viesti seuraavasti: