Selenium Automation Framework: oparty na danych, oparty na słowach kluczowych & Hybrydowy

Spisie treści:

Anonim

Co to jest Selenium Framework?

Ramowa Selen jest struktura kodu, który sprawia, że utrzymanie kodu łatwy i skuteczny. Bez ram użytkownicy mogą umieszczać „kod” i „dane” w tym samym miejscu, które nie jest możliwe do ponownego wykorzystania ani odczytu. Struktury zapewniają korzystne wyniki, takie jak zwiększona możliwość ponownego wykorzystania kodu, większa przenośność, obniżony koszt utrzymania skryptów, lepsza czytelność kodu itp.

Istnieją głównie trzy rodzaje frameworków stworzonych przez Selenium WebDriver w celu zautomatyzowania manualnych przypadków testowych

  • Struktura testów oparta na danych
  • Framework testowy oparty na słowach kluczowych
  • Hybrydowe ramy testów

Struktura oparta na danych w Selenium

Data Driven Framework w Selenium to metoda oddzielania zestawów danych od przypadku testowego. Po oddzieleniu zestawów danych od przypadku testowego można je łatwo zmodyfikować pod kątem określonej funkcjonalności bez zmiany kodu. Służy do pobierania przypadków testowych i pakietów z plików zewnętrznych, takich jak Excel, .csv, .xml lub niektóre tabele bazy danych.

Aby czytać lub pisać w Excelu, Apache zapewnia bardzo znane POI biblioteczne. Ta biblioteka jest w stanie odczytywać i zapisywać pliki w formacie XLS i XLSX programu Excel.

Aby odczytać pliki XLS , implementację HSSF zapewnia biblioteka POI.

Aby odczytać XLSX, wyborem będzie implementacja biblioteki POI w XSSF . Przeanalizujmy szczegółowo te implementacje.

Dowiedzieliśmy się już o testowaniu opartym na danych w naszym poprzednim samouczku

Struktura oparta na słowach kluczowych w Selenium

Struktura oparta na słowach kluczowych w Selenium to metoda używana do przyspieszenia automatycznego testowania poprzez oddzielenie słów kluczowych dla wspólnego zestawu funkcji i instrukcji. Wszystkie operacje i instrukcje do wykonania są zapisywane w jakimś zewnętrznym pliku, takim jak arkusz Excela. Użytkownicy mogą łatwo kontrolować i określać funkcjonalności, które chcą przetestować.

Oto jak wygląda kompletny framework

Jak widać, jest to 5-stopniowa struktura. Przeanalizujmy to szczegółowo krok po kroku

Krok 1)

  • Skrypt sterownika Execute.java wywoła ReadGuru99ExcelFile.java
  • ReadGuru99ExcelFile.java ma skrypt POI do odczytu danych z Excela

Krok 2)

  • ReadGuru99ExcelFile.java odczyta dane z TestCase.xlsx
  • Oto jak wygląda arkusz-
  • Zgodnie ze słowami kluczowymi zapisanymi w pliku Excel, framework wykona operację na interfejsie użytkownika.
  • Na przykład musimy kliknąć przycisk „Zaloguj się”. Odpowiednio, nasz Excel będzie miał słowo kluczowe „Kliknij”. Teraz AUT może mieć setki przycisków na stronie, aby zidentyfikować przycisk logowania, w programie Excel wprowadzimy nazwę obiektu jako loginButton i typ obiektu jako nazwę (patrz podświetlony wiersz na powyższym obrazku). Typ obiektu może być Xpath, nazwą CSS lub dowolną inną wartością

Krok 3) ReadGuru99ExcelFile.java przekaże te dane do skryptu sterownika Execute.java

Krok 4)

  • Dla wszystkich naszych elementów sieciowych interfejsu użytkownika musimy utworzyć repozytorium obiektów, w którym umieścimy ich lokalizator elementów (taki jak Xpath, nazwa, ścieżka CSS, nazwa klasy itp.)
  • Execute.java (nasz skrypt sterownika) odczyta całe repozytorium obiektów i zapisze je w zmiennej
  • Aby odczytać to repozytorium obiektów, potrzebujemy klasy ReadObject, która ma do odczytu metodę getObjectRepository.

UWAGA: Możesz pomyśleć, dlaczego musimy utworzyć repozytorium obiektów. Odpowiedź pomaga w utrzymaniu kodu. Na przykład używamy przycisku o nazwie = btnlogin w 10 różnych przypadkach testowych. W przyszłości deweloper zdecyduje się zmienić nazwę z btnlogin na przesyłanie. Będziesz musiał wprowadzić zmiany we wszystkich 10 przypadkach testowych. W przypadku repozytorium obiektów zmiany dokonasz tylko raz w repozytorium.

Krok 5)

  • Sterownik przekaże dane z Excel & Object Repository do klasy UIOperation
  • Klasa UIOperation ma funkcje do wykonywania działań odpowiadających słowom kluczowym, takim jak CLICK, SETTEXT itp., O których mowa w programie Excel
  • Klasa UIOperation to klasa Java, która zawiera rzeczywistą implementację kodu do wykonywania operacji na elementach sieci Web

Cały projekt będzie wyglądał następująco:

Spójrzmy na przykład:

Scenariusz testowy

  • Wykonujemy 2 przypadki testowe
  • Przypadek testowy 1:
  • Idź do http://demo.guru99.com/V4/
  • Wprowadź identyfikator użytkownika
  • Wprowadź hasło
  • Kliknij Resetuj
  • Przypadek testowy 2:
  • Idź do http://demo.guru99.com/V4/
  • Wprowadź identyfikator użytkownika
  • Wprowadź hasło
  • Kliknij Login

object.properties

url = http: //demo.guru99.com/V4/

nazwa użytkownika = uid

hasło = hasło

tytuł = baron

loginButton = btnLogin

resetButton = btnReset

ReadGuru99ExcelFile.java

pakiet 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) rzuca IOException {// Utwórz obiekt klasy File, aby otworzyć plik xlsxPlik plik = nowy plik (ścieżka_pliku + "\\" + nazwa_pliku);// Utwórz obiekt klasy FileInputStream, aby odczytać plik ExcelaFileInputStream inputStream = nowy FileInputStream (plik);Skoroszyt guru99Workbook = null;// Znajdź rozszerzenie pliku, dzieląc nazwę pliku w podstawianiu i uzyskując tylko nazwę rozszerzeniaString fileExtensionName = nazwa_pliku.substring (nazwa_pliku.indexOf ("."));// Sprawdź warunek, jeśli plik jest plikiem xlsxif (fileExtensionName.equals (". xlsx")) {// Jeśli jest to plik xlsx, utwórz obiekt klasy XSSFWorkbookguru99Workbook = nowy XSSFWorkbook (inputStream);}// Sprawdź warunek, jeśli plik jest plikiem xlselse if (fileExtensionName.equals (". xls")) {// Jeśli jest to plik xls, utwórz obiekt klasy XSSFWorkbookguru99Workbook = nowy HSSFWorkbook (inputStream);}// Czytaj arkusz wewnątrz skoroszytu według jego nazwyArkusz guru99Sheet = guru99Workbook.getSheet (nazwa arkusza);return guru99Sheet;}}

ReadObject.java

obsługa pakietu;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.util.Properties;public class ReadObject {Właściwości p = nowe Właściwości ();Public Properties getObjectRepository () rzuca IOException {// Czytaj plik repozytorium obiektówInputStream stream = new FileInputStream (new File (System.getProperty ("user.dir") + "\\ src \\ objects \\ object.properties"));// załaduj wszystkie obiektyp.load (strumień);powrót p;}}

UIOperation.java

obsługa pakietu;import java.util.Properties;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;public class UIOperation {Sterownik WebDriver;public UIOperation (sterownik WebDriver) {this.driver = kierowca;}public void perform (Properties p, String operation, String objectName, String objectType, String value) throws Exception {System.out.println („”);switch (operation.toUpperCase ()) {sprawa "KLIKNIJ":// Wykonaj kliknięciedriver.findElement (this.getObject (p, nazwa_obiektu, typ_obiektu)). click ();przerwa;przypadek „SETTEXT”:// Ustaw tekst na kontrolcedriver.findElement (this.getObject (p, objectName, objectType)). sendKeys (wartość);przerwa;sprawa „GOTOURL”:// Pobierz adres URL aplikacjidriver.get (p.getProperty (wartość));przerwa;sprawa „GETTEXT”:// Pobierz tekst elementudriver.findElement (this.getObject (p, nazwa_obiektu, typ_obiektu)). getText ();przerwa;domyślna:przerwa;}}/ *** Znajdź element BY używając typu obiektu i wartości* @param p* @param objectName* @param objectType* @powrót* Wyjątek @throws* /private By getObject (Properties p, String objectName, String objectType) zgłasza wyjątek {// Znajdź według xpathif (objectType.equalsIgnoreCase ("XPATH")) {return By.xpath (p.getProperty (objectName));}// znajdź według klasyelse if (objectType.equalsIgnoreCase ("NAZWA KLASY")) {return By.className (p.getProperty (objectName));}// znajdź według nazwyelse if (objectType.equalsIgnoreCase ("NAME")) {return By.name (p.getProperty (objectName));}// Znajdź według csselse if (objectType.equalsIgnoreCase ("CSS")) {return By.cssSelector (p.getProperty (objectName));}// znajdź za pomocą linkuelse if (objectType.equalsIgnoreCase ("LINK")) {return By.linkText (p.getProperty (objectName));}// znajdź za pomocą częściowego linkuelse if (objectType.equalsIgnoreCase ("PARTIALLINK")) {return By.partialLinkText (p.getProperty (objectName));}jeszcze{zgłoś nowy wyjątek („Zły typ obiektu”);}}}

ExecuteTest.java

pakiet testCases;import java.util.Properties;operacja importu.ReadObject;operacja importu.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 {@Testpublic void testLogin () zgłasza wyjątek {// TODO Automatycznie wygenerowany kod pośredniczący metodyWebDriver webdriver = nowy FirefoxDriver ();ReadGuru99ExcelFile file = new ReadGuru99ExcelFile ();ReadObject object = new ReadObject ();Właściwości allObjects = object.getObjectRepository ();UIOperation operation = new UIOperation (webdriver);// Przeczytaj arkusz słów kluczowychArkusz guru99Sheet = file.readExcel (System.getProperty ("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");// Znajdź liczbę wierszy w pliku Excelint rowCount = guru99Sheet.getLastRowNum () - guru99Sheet.getFirstRowNum ();// Utwórz pętlę dla wszystkich wierszy pliku Excela, aby go przeczytaćfor (int i = 1; i " + row.getCell (0) .toString () + "Started");}}}}

Po wykonaniu dane wyjściowe będą wyglądać następująco -

Pobierz pliki projektu Selenium do wersji demonstracyjnej w tym samouczku

Hybrydowa struktura

Hybrid Framework in Selenium to koncepcja, w której wykorzystujemy zalety zarówno frameworka opartego na słowach kluczowych, jak i frameworka opartego na danych. Jest to łatwy w użyciu framework, który pozwala testerom ręcznym na tworzenie przypadków testowych po prostu patrząc na słowa kluczowe, dane testowe i repozytorium obiektów bez kodowania we frameworku.

Tutaj dla słów kluczowych użyjemy plików Excela do obsługi przypadków testowych, a dla danych testowych możemy użyć danych, dostawcy frameworka Testng.

Tutaj, w naszej strukturze hybrydowej, nie musimy niczego zmieniać w ramach opartej na słowach kluczowych, tutaj wystarczy zamienić plik ExecuteTest.java na plik HybridExecuteTest.java.

Ten plik HybridExecuteTest zawiera cały kod słów kluczowych opartych na koncepcji dostawcy danych.

Będzie wyglądać pełne graficzne przedstawienie struktury hybrydowej

HybridExecuteTest.java

pakiet testCases;import java.io.IOException;import java.util.Properties;operacja importu.ReadObject;operacja importu.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 Automatycznie wygenerowany kod pośredniczący metodyif (testcaseName! = null && testcaseName.length ()! = 0) {webdriver = nowy FirefoxDriver ();}ReadObject object = new ReadObject ();Właściwości allObjects = object.getObjectRepository ();UIOperation operation = new UIOperation (webdriver);// Wywołanie funkcji wykonania operacji na interfejsie użytkownikaoperation.perform (allObjects, keyword, objectName,objectType, wartość);}@DataProvider (nazwa = "hybridData")public Object [] [] getDataFromDataprovider () zgłasza IOException {Object [] [] object = null;ReadGuru99ExcelFile file = new ReadGuru99ExcelFile ();// Przeczytaj arkusz słów kluczowychArkusz guru99Sheet = file.readExcel (System.getProperty ("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");// Znajdź liczbę wierszy w pliku Excelint rowCount = guru99Sheet.getLastRowNum () - guru99Sheet.getFirstRowNum ();object = new Object [rowCount] [5];for (int i = 0; i 

Podsumowanie:

  • Możemy stworzyć trzy typy frameworka testowego przy użyciu Selenium WebDriver.
  • Są to oparte na danych, oparte na słowach kluczowych i hybrydowe środowisko testowe.
  • Możemy osiągnąć platformę opartą na danych przy użyciu dostawcy danych TestNG.
  • W strukturze opartej na słowach kluczowych słowa kluczowe są zapisywane w niektórych zewnętrznych plikach, takich jak plik programu Excel, a kod java wywoła ten plik i wykona przypadki testowe.
  • Struktura hybrydowa jest połączeniem struktury opartej na słowach kluczowych i opartej na danych.

Pobierz pliki projektu Selenium do wersji demonstracyjnej w tym samouczku