Budowanie opartej na danych, opartej na słowach kluczowych i hybrydowej platformy selenowej



Ten blog wyjaśnia, czym jest framework Selenium, jego zalety i jak zaimplementować frameworki oparte na danych, oparte na słowach kluczowych i hybrydowe w selenie.

Poprzednia w tej serii przedstawiliśmy podstawowe pojęcia związane z testowaniem selenu.Jednak na tym blogu powiem Ci, jak używać frameworka Selenium do optymalizacji struktury kodu, co przybliży Cię do stania się .

Co to jest framework Selenium?

Framework Selenium to struktura kodu, która upraszcza konserwację kodu i poprawia jego czytelność. Framework polega na rozbiciu całego kodu na mniejsze fragmenty kodu, które testują określoną funkcjonalność.





Kod ma taką strukturę, że „zbiór danych” jest oddzielony od rzeczywistego „przypadku testowego”, który będzie testował funkcjonalność aplikacji internetowej. Może również mieć taką strukturę, w której przypadki testowe, które mają zostać wykonane, są wywoływane (wywoływane) z zewnętrznej aplikacji (np. CSV).

Istnieje wiele frameworków, ale 3 powszechnie używane frameworki Selenium to:



Te frameworki zostaną omówione z demonstracją na tym blogu. Ale zanim przejdę dalej, pozwól mi powiedzieć, dlaczego ramy Selenium muszą być na miejscu i jakie korzyści uzyskasz z ich używania.

Dlaczego potrzebujemy frameworka Selenium?

Bez wdrożonej struktury będzie jeden przypadek testowy, który będzie obejmował całą funkcjonalność testową. Przerażające jest to, że ten pojedynczy przypadek testowy może rozwinąć się do miliona linii kodu. Jest więc całkiem oczywiste, że tak duży przypadek testowy będzie trudny do odczytania. Nawet jeśli zechcesz później zmodyfikować jakąkolwiek funkcjonalność, będziesz miał trudny czas na modyfikację kodu.

Ponieważ wdrożenie frameworka spowoduje powstanie mniejszych, ale wielu fragmentów kodu, są różne korzyści.



Korzyści z ram Selenium

  • Zwiększone ponowne wykorzystanie kodu
  • Poprawiona czytelność kodu
  • Większa przenośność
  • Skrócony skryptkonserwacja

Teraz, gdy znasz już podstawy frameworków, pozwól mi szczegółowo wyjaśnić każdy z nich.

Struktura oparta na danych

Struktura oparta na danych w Selenium to technika oddzielania „zestawu danych” od rzeczywistego „przypadku testowego” (kodu). Ta struktura całkowicie zależy od wejściowych danych testowych. Dane testowe są pobierane ze źródeł zewnętrznych, takich jak plik Excel, plik .CSV lub dowolna baza danych.

Framework oparty na danych - Selenium Framework - edureka

Ponieważ przypadek testowy jest oddzielony od zestawu danych, możemy łatwo zmodyfikować przypadek testowy określonej funkcjonalności bez dokonywania hurtowych zmian w kodzie. Na przykład, jeśli chcesz zmodyfikować kod dla funkcji logowania, możesz zmodyfikować tylko to, zamiast modyfikować również dowolną inną zależną część w tym samym kodzie.

Poza tym możesz łatwo kontrolować, ile danych należy przetestować. Możesz łatwo zwiększyć liczbę parametrów testowych, dodając więcej pól nazwy użytkownika i hasła do pliku Excela (lub innych źródeł).

java co to jest skaner

Na przykład, jeśli muszę sprawdzić logowanie do strony internetowej, mogę zachować zestaw danych logowania do nazwy użytkownika i hasła w pliku Excel i przekazać je do kodu w celu wykonania automatyzacji w przeglądarce w oddzielnym pliku klasy Java.

Korzystanie z Apache POI z Selenium WebDriver

WebDriver nie obsługuje bezpośrednio odczytu plików programu Excel. Dlatego używamy Apache POI do czytania / pisania do dowolnego dokumentu biurowego Microsoft. Możesz pobrać Apache POI (zestaw plików JAR) z tutaj . Pobierz plik zip lub plik tar zgodnie z wymaganiami i umieść je wraz z zestawem plików JAR Selenium.

Zadbana będzie koordynacja między głównym kodem a zbiorem danych Dostawcy danych TestNG, która jest biblioteką wchodzącą w skład plików Apache POI JAR. Dla celów demonstracyjnych utworzyłem plik Excela o nazwie „LoginCredentials”, w którym nazwy użytkowników i hasła są przechowywane w różnych kolumnach.

Spójrz na poniższy kod, aby zrozumieć przypadek testowy. Jest to prosty kod do testowania funkcjonalności logowania w aplikacji do rezerwacji lotów.

pakiet DataDriven import org.openqa.selenium.By import org.openqa.selenium.chrome.ChromeDriver import org.testng.Assert import org.testng.annotations.AfterMethod import org.testng.annotations.DataProvider import org.testng.annotations.Test public class DDTExcel {sterownik ChromeDriver @Test (dataProvider = 'testdata') public void DemoProject (nazwa użytkownika w postaci ciągu, hasło w ciągu znaków) rzuca InterruptedException {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedriver.exe') driver = new ChromeDriver () driver.get ('http://newtours.demoaut.com/') driver.findElement (By.name ('userName')). sendKeys (username) driver.findElement (By.name ('password') )). sendKeys (hasło) driver.findElement (By.name ('login')). ​​click () Thread.sleep (5000) Assert.assertTrue (driver.getTitle (). match ('Find a Flight: Mercury Tours: '),' Nieprawidłowe dane logowania ') System.out.println (' Logowanie powiodło się ')} @AfterMethod void ProgramTermination () {driver.quit ()} @DataProvider (name =' testdata ') public Object [] [] TestDa taFeed () {ReadExcelFile config = new ReadExcelFile ('C: UsersVardhanworkspaceSeleniumLoginCredentials.xlsx') int rows = config.getRowCount (0) Object [] [] credentials = new Object [rows] [2] for (int i = 0i

Jeśli zauważyłeś z góry, mamy metodę o nazwie „TestDataFeed ()”. W tej metodzie utworzyłem instancję obiektu innej klasy o nazwie „ReadExcelFile”. Podczas tworzenia wystąpienia tego obiektu podałem ścieżkę do mojego pliku Excela zawierającego dane. Ponadto zdefiniowałem pętlę for, aby pobrać tekst ze skoroszytu programu Excel.

Jednak w celu odczytania danych z danego numeru arkusza, numeru kolumny i numeru wiersza wywołania są kierowane do klasy „ReadExcelFile”. Kod mojego „ReadExcelFile” znajduje się poniżej.

pakiet DataDriven import java.io.File import java.io.FileInputStream import org.apache.poi.xssf.usermodel.XSSFSheet import org.apache.poi.xssf.usermodel.XSSFWorkbook public class ReadExcelFile {XSSFWorkbook wb XSSFSheet public (arkusz public ReadExcelFile excelPath) {try {File src = new File (excelPath) FileInputStream fis = new FileInputStream (src) wb = new XSSFWorkbook (fis)} catch (Exception e) {System.out.println (e.getMessage ())}} public String getData (int sheetnumber, int row, int column) {sheet = wb.getSheetAt (sheetnumber) String data = sheet.getRow (row) .getCell (column) .getStringCellValue () return data} public int getRowCount (int sheetIndex) { int row = wb.getSheetAt (sheetIndex) .getLastRowNum () row = row + 1 return row}}

Najpierw zwróć uwagę na biblioteki, które zaimportowałem. Sprowadziłem Apache POI XSSF biblioteki, które są używane do odczytu / zapisu danych do plików programu Excel. Tutaj stworzyłem konstruktora (obiekt tej samej metody) do przekazywania wartości: numer arkusza, numer wiersza i numer kolumny. Aby lepiej zrozumieć te ramy, proszę o zapoznanie się z poniższym filmem, w którym wyjaśniłem to w uporządkowany sposób.

Struktura oparta na danych w Selenium WebDriver | Samouczek dotyczący selenu

Przejdźmy teraz do frameworka, czyli frameworku opartego na słowach kluczowych.

Struktura oparta na słowach kluczowych

Framework oparty na słowach kluczowych to technika, w której wszystkie operacje i instrukcje do wykonania są zapisywane oddzielnie od rzeczywistego przypadku testowego. Podobieństwo do struktury opartej na danych polega na tym, że operacje do wykonania są ponownie przechowywane w zewnętrznym pliku, takim jak arkusz Excel.

sql server tutorial dla początkujących z przykładami

Operacje, o których mówię, to nic innego jak metody, które muszą być wykonane jako część przypadku testowego. Zaletą struktury opartej na słowach kluczowych jest to, że możesz łatwo kontrolować funkcje, które chcesz przetestować. Możesz określić metody testujące funkcjonalność aplikacji w pliku Excel. Dlatego testowane będą tylko te nazwy metod, które są określone w programie Excel.

Na przykład, aby zalogować się do aplikacji internetowej, możemy napisać wiele metod w głównym przypadku testowym, w którym każdy przypadek testowy przetestuje określoną funkcjonalność. Do utworzenia instancji sterownika przeglądarki może być jedna metoda, do znalezienia pól nazwy użytkownika i hasła, mogą istnieć metody, do nawigacji na stronę internetową może być inna metoda itp.

Spójrz na poniższy kod, aby zrozumieć, jak wygląda struktura. Wiersze zakomentowane w poniższym kodzie służą jako wyjaśnienie, jeśli nie rozumiesz.

pakiet KeywordDriven import org.openqa.selenium.chrome.ChromeDriver import org.testng.Assert import org.testng.annotations.Test import java.util.concurrent.TimeUnit import org.openqa.selenium.By import org.openqa.selenium.WebDriver public class Actions {public static WebDriver driver public static void openBrowser () {System.setProperty ('webdriver.chrome.driver', 'C: UsersVardhanDownloadschromedriver.exe') driver = new ChromeDriver ()} public static void navigate () {driver .manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS) driver.get ('http://newtours.demoaut.com')} public static void input_Username () {driver.findElement (By.name (' nazwa_użytkownika ')). sendKeys (' mercury ')} public static void input_Password () {driver.findElement (By.name (' password ')). sendKeys (' mercury ')} public static void click_Login () {driver.findElement (By.name ('login')). ​​Click ()} @Test public static void verify_login () {String pageTitle = driver.getTitle () Assert.assertEquals (pageTitle, 'Find a Flight: Mercury Tours : ')} public static void closeBrowser () {driver.quit ()}}

Jak widać, różne funkcjonalności, które należy przetestować, są obecne w oddzielnych metodach czekających na wywołanie. Teraz te metody będą wywoływane z innej klasy, na podstawie nazwy metody w pliku programu Excel. I podobnie, aby przeczytać plik Excela i odesłać wyniki, napisałem inną klasę. Oba są pokazane poniżej.

Oto plik klasy wywołujący metody.

konfigurowanie Hadoopa na Ubuntu
pakiet KeywordDriven klasa publiczna DriverScript {public static void main (String [] args) rzuca wyjątek {// Deklarowanie ścieżki pliku Excela z nazwą pliku Excela String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // Tutaj przekazujemy ścieżkę Excela i SheetName jako argumenty do połączenia z plikiem Excel ReadExcelData.setExcelFile (sPath, 'Sheet1') // Na razie w wierszach i kolumnach programu Excel są używane wartości zakodowane na stałe // Wartości zakodowane na stałe są używane w wierszach i kolumny na razie // W późniejszych rozdziałach zamienimy te zakodowane na stałe wartości na zmienne // To jest pętla do odczytu wartości z kolumny 3 (słowo kluczowe akcji) wiersz po wierszu dla (int iRow = 1iRow<=7iRow++) { String sActions = ReadExcelData.getCellData(iRow, 1) //Comparing the value of Excel cell with all the keywords in the 'Actions' class if(sActions.equals('openBrowser')) { //This will execute if the excel cell value is 'openBrowser' //Action Keyword is called here to perform action Actions.openBrowser() } else if(sActions.equals('navigate')) { Actions.navigate() } else if(sActions.equals('input_Username')) { Actions.input_Username() } else if(sActions.equals('input_Password')) { Actions.input_Password() } else if(sActions.equals('click_Login')) { Actions.click_Login() } else if(sActions.equals('verify_Login')) { Actions.verify_login() } else if(sActions.equals('closeBrowser')) { Actions.closeBrowser() } } } } 

A plik klasy, który odczytuje wartości Excela, jest taki.

pakiet KeywordDriven import java.io.FileInputStream import org.apache.poi.xssf.usermodel.XSSFSheet import org.apache.poi.xssf.usermodel.XSSFWorkbook import org.apache.poi.xssf.usermodel.XSSFCell klasa publiczna ReadExcelData {private static XSSFSheet ExcelWSheet private static XSSFWorkbook ExcelWBook private static XSSFCell Cell // Ta metoda polega na ustawieniu ścieżki pliku i otwarciu pliku Excela // Przekaż ścieżkę Excela i nazwę arkusza jako argumenty do tej metody public static void setExcelFile (String Path, String SheetName) rzuca Wyjątek {FileInputStream ExcelFile = new FileInputStream (Path) ExcelWBook = new XSSFWorkbook (ExcelFile) ExcelWSheet = ExcelWBook.getSheet (SheetName)} // Ta metoda polega na odczytaniu danych testowych z komórki Excela // W tym przekazujemy parametry / argumenty jako numer wiersza i numer kolumny public static String getCellData (int RowNum, int ColNum) rzuca Exception {Cell = ExcelWSheet.getRow (RowNum) .getCell (ColNum) String CellData = Cell.getStringCellValue () return CellData}}

Teraz przejdźmy do ostatniej części tego bloga o frameworku Selenium, gdzie pokażę ci, jak zbudować framework hybrydowy.

Ramy hybrydowe

Framework hybrydowy to technika, dzięki której możemy najlepiej wykorzystać zarówno frameworki Selenium oparte na danych, jak i oparte na słowach kluczowych. Korzystając z przykładów przedstawionych powyżej na tym blogu, możemy zbudować strukturę hybrydową, przechowując metody do wykonania w pliku programu Excel (podejście oparte na słowach kluczowych) i przekazując te nazwy metod do Klasa odbicia języka Java (podejście oparte na danych) zamiast tworzyć plik Jeśli inaczej pętla w klasie „DriverScript”.

Przyjrzyj się zmodyfikowanej klasie „DriverScript” w poniższym fragmencie kodu.Tutaj zamiast używać wielu pętli If / Else, do odczytywania nazw metod z pliku Excela używane jest podejście oparte na danych.

pakiet HybridFramework import java.lang.reflect.Method klasa publiczna DriverScriptJava {// To jest obiekt klasy, zadeklarowany jako „public static” // Aby można go było używać poza zakresem metody main [] public static Actions actionKeywords public static String sActions // To jest obiekt klasy odbicia, zadeklarowany jako „public static” // Aby można go było używać poza zakresem metody main [] metoda public static Method metoda [] public static void main (String [] args) zgłasza Wyjątek {// Deklaracja ścieżki do pliku Excela z nazwą pliku Excela String sPath = 'C: UsersVardhanworkspaceSelenium Frameworks DemodataEngine.xlsx' // Tutaj przekazujemy ścieżkę Excela i SheetName, aby połączyć się z plikiem Excela // Ta metoda został utworzony wcześniej ReadExcelData.setExcelFile (sPath, 'Sheet1') // Na razie w wierszach i kolumnach programu Excel są używane wartości zakodowane na stałe // Później wykorzystamy te zakodowane wartości znacznie wydajniej // To jest pętla do czytania wartości w wierszu kolumny (słowo kluczowe działania) by row // Oznacza to, że ta pętla wykona wszystkie kroki wymienione dla przypadku testowego w arkuszu Test Steps for (int iRow = 1iRow<=7iRow++) { sActions = ReadExcelData.getCellData(iRow, 1) //A new separate method is created with the name 'execute_Actions' //You will find this method below of the this test //So this statement is doing nothing but calling that piece of code to execute execute_Actions() } } //This method contains the code to perform some action //As it is completely different set of logic, which revolves around the action only, it makes sense to keep it separate from the main driver script //This is to execute test step (Action) private static void execute_Actions() throws Exception { //Here we are instantiating a new object of class 'Actions' actionKeywords = new Actions() //This will load all the methods of the class 'Actions' in it. //It will be like array of method, use the break point here and do the watch method = actionKeywords.getClass().getMethods() //This is a loop which will run for the number of actions in the Action Keyword class //method variable contain all the method and method.length returns the total number of methods for(int i = 0i

Aby lepiej zrozumieć koncepcję ram opartych na danych, opartych na słowach kluczowych i hybrydowych, proszę o obejrzenie poniższego wideo.

Selenium Framework przy użyciu języka Java | Samouczek dotyczący selenu | Szkolenie Selenium Online

Mam nadzieję, że ten blog był dla Ciebie przydatny i dał Ci jasne zrozumienie, czym jest framework Selenium, jaki jest korzystny i jak zbudować strukturę kodu za pomocą tych 3 frameworków Selenium. Śledź więcej blogów z tej serii.

Jeśli chcesz nauczyć się Selenium i zbudować karierę w domenie testowej, sprawdź nasze interaktywne, online na żywo tutaj, który zapewnia wsparcie 24 * 7, które poprowadzi Cię przez cały okres nauki. Pojęcia związane z „Selenium Framework” są szczegółowo omówione w kursie Edureki.

Masz do nas pytanie? Wspomnij o tym w sekcji komentarzy, a my skontaktujemy się z Tobą.