Τι είναι το Selenium Framework;
Το Selenium Framework είναι μια δομή κώδικα που καθιστά τη συντήρηση κώδικα εύκολη και αποτελεσματική. Χωρίς πλαίσια, οι χρήστες μπορούν να τοποθετήσουν τον "κωδικό" και "δεδομένα" στην ίδια θέση που δεν είναι επαναχρησιμοποιήσιμη ούτε αναγνώσιμη. Τα πλαίσια παράγουν ευεργετικά αποτελέσματα όπως αυξημένη επαναχρησιμοποίηση κώδικα, υψηλότερη φορητότητα, μειωμένο κόστος συντήρησης σεναρίων, καλύτερη αναγνωσιμότητα κώδικα κ.λπ.
Υπάρχουν κυρίως τρεις τύποι πλαισίων που δημιουργήθηκαν από το Selenium WebDriver για την αυτοματοποίηση των χειροκίνητων δοκιμαστικών περιπτώσεων
- Πλαίσιο δοκιμής βάσει δεδομένων
- Πλαίσιο δοκιμής βάσει λέξεων-κλειδιών
- Υβριδικό πλαίσιο δοκιμής
Πλαίσιο βάσει δεδομένων στο Σελήνιο
Το Data Driven Framework στο Selenium είναι μια μέθοδος διαχωρισμού συνόλων δεδομένων από τη δοκιμαστική θήκη. Μόλις τα σύνολα δεδομένων διαχωριστούν από τη δοκιμαστική θήκη, μπορεί εύκολα να τροποποιηθεί για μια συγκεκριμένη λειτουργικότητα χωρίς να αλλάξει τον κώδικα. Χρησιμοποιείται για τη λήψη δοκιμαστικών περιπτώσεων και σουιτών από εξωτερικά αρχεία όπως Excel, .csv, .xml ή ορισμένους πίνακες βάσεων δεδομένων.
Για να διαβάσετε ή να γράψετε ένα Excel, το Apache παρέχει μια πολύ διάσημη POI βιβλιοθήκης. Αυτή η βιβλιοθήκη είναι αρκετά ικανή να διαβάζει και να γράφει μορφή αρχείου XLS και XLSX του Excel.
Για να διαβάσετε αρχεία XLS , παρέχεται μια εφαρμογή HSSF από τη βιβλιοθήκη POI.
Για να διαβάσετε το XLSX, η εφαρμογή XSSF της βιβλιοθήκης POI θα είναι η επιλογή. Ας μελετήσουμε λεπτομερώς αυτές τις υλοποιήσεις.
Έχουμε ήδη μάθει για τον έλεγχο βάσει δεδομένων στο προηγούμενο σεμινάριό μας
Πλαίσιο βάσει λέξεων-κλειδιών στο Σελήνιο
Το Framework Driven Framework στο Selenium είναι μια μέθοδος που χρησιμοποιείται για την επιτάχυνση των αυτοματοποιημένων δοκιμών διαχωρίζοντας τις λέξεις-κλειδιά για ένα κοινό σύνολο λειτουργιών και οδηγιών. Όλες οι λειτουργίες και οι οδηγίες που πρέπει να εκτελεστούν είναι γραμμένες σε κάποιο εξωτερικό αρχείο όπως ένα φύλλο Excel. Οι χρήστες μπορούν εύκολα να ελέγχουν και να καθορίζουν τις λειτουργίες που θέλουν να δοκιμάσουν.
Δείτε πώς φαίνεται το πλήρες πλαίσιο
Όπως μπορείτε να δείτε, είναι ένα πλαίσιο 5 βημάτων. Ας το μελετήσουμε σταδιακά λεπτομερώς
Βήμα 1)
- Το σενάριο προγράμματος οδήγησης Execute.java θα καλέσει ReadGuru99ExcelFile.java
- Το ReadGuru99ExcelFile.java έχει σενάριο POI για να διαβάσει δεδομένα από ένα Excel
Βήμα 2)
- Το ReadGuru99ExcelFile.java θα διαβάσει δεδομένα από το TestCase.xlsx
- Δείτε πώς φαίνεται το φύλλο-
- Σύμφωνα με τις λέξεις-κλειδιά που είναι γραμμένες στο αρχείο Excel, το πλαίσιο θα εκτελέσει τη λειτουργία σε διεπαφή χρήστη.
- Για παράδειγμα, πρέπει να κάνουμε κλικ σε ένα κουμπί «Σύνδεση». Αντίστοιχα, το Excel μας θα έχει μια λέξη-κλειδί «Κλικ». Τώρα το AUT μπορεί να έχει εκατοντάδες κουμπιά σε μια σελίδα, για να αναγνωρίσει ένα κουμπί σύνδεσης, στο Excel θα εισάγουμε το Όνομα αντικειμένου ως loginButton & τον τύπο αντικειμένου ως όνομα (βλ. Επισημασμένη τη σειρά στην παραπάνω εικόνα). Ο τύπος αντικειμένου θα μπορούσε να είναι Xpath, όνομα CSS ή οποιαδήποτε άλλη τιμή
Βήμα 3) Το ReadGuru99ExcelFile.java θα μεταδώσει αυτά τα δεδομένα στο σενάριο προγράμματος οδήγησης Execute.java
Βήμα 4)
- Για όλα τα στοιχεία ιστού UI, πρέπει να δημιουργήσουμε ένα αποθετήριο αντικειμένων όπου θα τοποθετήσουμε τον εντοπιστή στοιχείων τους (όπως Xpath, όνομα, διαδρομή CSS, όνομα κλάσης κ.λπ.)
- Το Execute.java (το σενάριο προγράμματος οδήγησης) θα διαβάσει ολόκληρο το Object Repository και θα το αποθηκεύσει σε μια μεταβλητή
- Για να διαβάσετε αυτό το αποθετήριο αντικειμένων, χρειαζόμαστε μια κλάση ReadObject που έχει μια μέθοδο getObjectRepository για να την διαβάσει.
ΣΗΜΕΙΩΣΗ: Μπορεί να σκεφτείτε γιατί πρέπει να δημιουργήσουμε ένα αποθετήριο αντικειμένων. Η απάντηση βοηθά στη διατήρηση κώδικα. Για παράδειγμα, χρησιμοποιούμε το κουμπί με όνομα = btnlogin σε 10 διαφορετικές περιπτώσεις δοκιμής. Στο μέλλον, ο προγραμματιστής αποφασίζει να αλλάξει το όνομα από το btnlogin για υποβολή. Θα πρέπει να κάνετε μια αλλαγή και στις 10 περιπτώσεις δοκιμών. Στην περίπτωση ενός αποθετηρίου αντικειμένων, θα κάνετε την αλλαγή μόνο μία φορά στο αποθετήριο.
Βήμα 5)
- Το πρόγραμμα οδήγησης θα μεταβιβάσει τα δεδομένα από το Excel & Object Repository στην κατηγορία UIOperation
- Η κλάση UIOperation έχει λειτουργίες για την εκτέλεση ενεργειών που αντιστοιχούν σε λέξεις-κλειδιά όπως ΚΛΙΚ, SETTEXT κ.λπ… που αναφέρονται στο excel
- Η κλάση UIOperation είναι μια κλάση Java που έχει την πραγματική εφαρμογή του κώδικα για την εκτέλεση λειτουργιών σε στοιχεία ιστού
Το πλήρες έργο θα μοιάζει-
Ας δούμε ένα παράδειγμα:
Σενάριο δοκιμής
- Εκτελούμε 2 δοκιμαστικές περιπτώσεις
- Περίπτωση δοκιμής 1:
- Πήγαινε http://demo.guru99.com/V4/
- Εισαγάγετε το αναγνωριστικό χρήστη
- Εισάγετε τον κωδικό πρόσβασης
- Κάντε κλικ στο Επαναφορά
- Περίπτωση δοκιμής 2:
- Πήγαινε http://demo.guru99.com/V4/
- Εισαγάγετε το αναγνωριστικό χρήστη
- Εισάγετε τον κωδικό πρόσβασης
- Κάντε κλικ στο Σύνδεση
object.properties
url = http: //demo.guru99.com/V4/
όνομα χρήστη = uid
κωδικός πρόσβασης = κωδικός πρόσβασης
τίτλος = barone
loginButton = btnLogin
resetButton = btnReset
ΔιαβάστεGuru99ExcelFile.java
πακέτο excelExportAndFileIO;εισαγωγή java.io.File;εισαγωγή java.io.FileInputStream;εισαγωγή java.io.IOException;εισαγωγή org.apache.poi.hssf.usermodel.HSSFWorkbook;εισαγωγή org.apache.poi.ss.usermodel.Sheet;εισαγωγή org.apache.poi.ss.usermodel.Workbook;εισαγωγή org.apache.poi.xssf.usermodel.XSSFWorkbook;δημόσια τάξη ReadGuru99ExcelFile {public Sheet readExcel (String filePath, String fileName, String sheetName) ρίχνει το IOException {// Δημιουργήστε ένα αντικείμενο κλάσης αρχείων για να ανοίξετε το αρχείο xlsxΑρχείο αρχείου = νέο αρχείο (filePath + "\\" + fileName);// Δημιουργήστε ένα αντικείμενο κλάσης FileInputStream για να διαβάσετε το αρχείο excelFileInputStream inputStream = νέο FileInputStream (αρχείο);Βιβλίο εργασίας guru99Workbook = null;// Βρείτε την επέκταση αρχείου διαχωρίζοντας το όνομα του αρχείου στον υποσταθμό και παίρνοντας μόνο το όνομα της επέκτασηςString fileExtensionName = fileName.substring (fileName.indexOf ("."));// Ελέγξτε την κατάσταση εάν το αρχείο είναι αρχείο xlsxεάν (fileExtensionName.equals (". xlsx")) {// Εάν είναι αρχείο xlsx τότε δημιουργήστε αντικείμενο κλάσης XSSFWorkbookguru99Workbook = νέο XSSFWorkbook (inputStream);}// Ελέγξτε την κατάσταση εάν το αρχείο είναι αρχείο xlsαλλιώς εάν (fileExtensionName.equals (". xls")) {// Εάν είναι αρχείο xls, δημιουργήστε αντικείμενο κλάσης XSSFWorkbookguru99Workbook = νέο HSSFWorkbook (inputStream);}// Διαβάστε το φύλλο μέσα στο βιβλίο εργασίας με το όνομά τουSheet guru99Sheet = guru99Workbook.getSheet (φύλλο όνομα);επιστροφή γκουρού99 Φύλλο;}}
ΔιαβάστεObject.java
λειτουργία συσκευασίαςεισαγωγή java.io.File;εισαγωγή java.io.FileInputStream;εισαγωγή java.io.IOException;εισαγωγή java.io.InputStream;εισαγωγή java.util.Properties;δημόσια τάξη ReadObject {Ιδιότητες p = νέες ιδιότητες ();public Properties getObjectRepository () ρίχνει το IOException {// Διαβάστε το αρχείο αποθετηρίου αντικειμένωνInputStream stream = νέο FileInputStream (νέο αρχείο (System.getProperty ("user.dir") + "\\ src \\ object \\ object.properties"));// φορτώστε όλα τα αντικείμεναp.load (ροή);επιστροφή p;}}
UIOperation.java
λειτουργία συσκευασίαςεισαγωγή java.util.Properties;εισαγωγή org.openqa.selenium.By;εισαγωγή org.openqa.selenium.WebDriver;δημόσια τάξη UIOperation {Πρόγραμμα οδήγησης WebDriver;δημόσιο UIOperation (πρόγραμμα οδήγησης WebDriver) {this.driver = πρόγραμμα οδήγησης;}public void perform (Properties p, String operasi, String objectName, String objectType, String value) ρίχνει την εξαίρεση {System.out.println ("");διακόπτης (operation.toUpperCase ()) {περίπτωση "ΚΛΙΚ":// Εκτελέστε κλικdriver.findElement (this.getObject (p, objectName, objectType)). κάντε κλικ στο ();Διακοπή;υπόθεση "SETTEXT":// Ρυθμίστε το κείμενο στο στοιχείο ελέγχουdriver.findElement (this.getObject (p, objectName, objectType)). sendKeys (τιμή);Διακοπή;υπόθεση "GOTOURL":// Λάβετε τη διεύθυνση URL της αίτησηςdriver.get (p.getProperty (τιμή));Διακοπή;υπόθεση "GETTEXT":// Λήψη κειμένου ενός στοιχείουdriver.findElement (this.getObject (p, objectName, objectType)). getText ();Διακοπή;Προκαθορισμένο:Διακοπή;}}/ *** Βρείτε το στοιχείο ΜΕ χρησιμοποιώντας τον τύπο και την τιμή του αντικειμένου* @param σελ* @param objectName* @param objectType* @ΕΠΙΣΤΡΟΦΗ* @throws Εξαίρεση* /private By getObject (Properties p, String objectName, String objectType) ρίχνει εξαίρεση {// Εύρεση από xpathεάν (objectType.equalsIgnoreCase ("XPATH")) {επιστροφή By.xpath (p.getProperty (objectName));}// εύρεση ανά τάξηαλλιώς εάν (objectType.equalsIgnoreCase ("CLASSNAME")) {επιστροφή By.className (p.getProperty (αντικείμενοName));}// βρείτε με όνομααλλιώς εάν (objectType.equalsIgnoreCase ("NAME")) {επιστροφή By.name (p.getProperty (objectName));}// Εύρεση με cssαλλιώς εάν (objectType.equalsIgnoreCase ("CSS")) {επιστροφή By.cssSelector (p.getProperty (objectName));}// εύρεση μέσω συνδέσμουαλλιώς εάν (objectType.equalsIgnoreCase ("LINK")) {επιστροφή By.linkText (p.getProperty (αντικείμενοName));}// βρείτε με μερική σύνδεσηαλλιώς εάν (objectType.equalsIgnoreCase ("PARTIALLINK")) {επιστροφή By.partialLinkText (p.getProperty (αντικείμενοName));}αλλού{ρίξτε νέα εξαίρεση ("λάθος τύπος αντικειμένου");}}}
ExecuteTest.java
δοκιμές πακέτωνεισαγωγή java.util.Properties;λειτουργία εισαγωγής.ReadObject;λειτουργία εισαγωγής. Λειτουργία;εισαγωγή org.apache.poi.ss.usermodel.Row;εισαγωγή org.apache.poi.ss.usermodel.Sheet;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.firefox.FirefoxDriver;εισαγωγή org.testng.annotations.Test;εισαγωγή excelExportAndFileIO.ReadGuru99ExcelFile;δημόσια τάξη ExecuteTest {@Δοκιμήpublic void testLogin () ρίχνει την εξαίρεση {// TODO Αυτόματο δημιουργημένο στέλεχος μεθόδουWebDriver webdriver = νέο FirefoxDriver ();ReadGuru99ExcelFile αρχείο = νέο ReadGuru99ExcelFile ();ReadObject αντικείμενο = νέο ReadObject ();Ιδιότητες allObjects = object.getObjectRepository ();Λειτουργία UIOperation = νέο UIOperation (webdriver);// Διαβάστε το φύλλο λέξεων-κλειδιώνSheet guru99Sheet = file.readExcel (System.getProperty ("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");// Βρείτε αριθμό σειρών στο αρχείο excelint rowCount = guru99Sheet.getLastRowNum () - guru99Sheet.getFirstRowNum ();// Δημιουργήστε έναν βρόχο σε όλες τις σειρές του αρχείου excel για να το διαβάσετεγια (int i = 1; i" + row.getCell (0) .toString () + "Started");}}}}
Μετά την εκτέλεση, η έξοδος θα μοιάζει με -
Πραγματοποιήστε λήψη του Selenium Project Files για την επίδειξη σε αυτό το σεμινάριο
Υβριδικό πλαίσιο
Το υβριδικό πλαίσιο στο Σελήνιο είναι μια ιδέα όπου χρησιμοποιούμε το πλεονέκτημα τόσο του πλαισίου με βάση τις λέξεις-κλειδιά όσο και του πλαισίου βάσει δεδομένων. Είναι ένα εύχρηστο πλαίσιο που επιτρέπει στους μη αυτόματους δοκιμαστές να δημιουργούν δοκιμαστικές περιπτώσεις, κοιτάζοντας απλώς τις λέξεις-κλειδιά, τα δεδομένα δοκιμών και το χώρο αποθήκευσης αντικειμένων χωρίς να κωδικοποιούν το πλαίσιο.
Εδώ για λέξεις-κλειδιά, θα χρησιμοποιήσουμε αρχεία Excel για τη συντήρηση δοκιμαστικών περιπτώσεων, και για δεδομένα δοκιμής, μπορούμε να χρησιμοποιήσουμε δεδομένα, πάροχο Testng framework
Εδώ στο υβριδικό μας πλαίσιο, δεν χρειάζεται να αλλάξουμε τίποτα στο πλαίσιο που βασίζεται σε λέξεις-κλειδιά, εδώ απλά πρέπει να αντικαταστήσουμε το αρχείο ExecuteTest.java με το αρχείο HybridExecuteTest.java.
Αυτό το αρχείο HybridExecuteTest έχει όλο τον κώδικα για λέξεις-κλειδιά που βασίζονται στην έννοια του παρόχου δεδομένων.
Η πλήρης εικονική αναπαράσταση του υβριδικού πλαισίου θα μοιάζει
HybridExecuteTest.java
δοκιμές πακέτωνεισαγωγή java.io.IOException;εισαγωγή java.util.Properties;λειτουργία εισαγωγής.ReadObject;λειτουργία εισαγωγής. Λειτουργία;εισαγωγή org.apache.poi.ss.usermodel.Row;εισαγωγή org.apache.poi.ss.usermodel.Sheet;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.firefox.FirefoxDriver;εισαγωγή org.testng.annotations.DataProvider;εισαγωγή org.testng.annotations.Test;εισαγωγή excelExportAndFileIO.ReadGuru99ExcelFile;δημόσια τάξη HybridExecuteTest {WebDriver webdriver = null;@Test (dataProvider = "hybridData")public void testLogin (String testcaseName, String keyword, String objectName, String objectType, String value) ρίχνει την εξαίρεση {// TODO Αυτόματο δημιουργημένο στέλεχος μεθόδουif (testcaseName! = null && testcaseName.length ()! = 0) {webdriver = νέο FirefoxDriver ();}ReadObject αντικείμενο = νέο ReadObject ();Ιδιότητες allObjects = object.getObjectRepository ();Λειτουργία UIOperation = νέο UIOperation (webdriver);// Λειτουργία εκτέλεσης κλήσης για εκτέλεση λειτουργίας σε διεπαφή χρήστηoperation.perform (allObjects, λέξη-κλειδί, αντικείμενοName,objectType, τιμή);}@DataProvider (όνομα = "hybridData")δημόσιο αντικείμενο [] [] getDataFromDataprovider () ρίχνει το IOException {Αντικείμενο [] [] αντικείμενο = μηδέν;ReadGuru99ExcelFile αρχείο = νέο ReadGuru99ExcelFile ();// Διαβάστε το φύλλο λέξεων-κλειδιώνSheet guru99Sheet = file.readExcel (System.getProperty ("user.dir") + "\\", "TestCase.xlsx", "KeywordFramework");// Βρείτε αριθμό σειρών στο αρχείο excelint rowCount = guru99Sheet.getLastRowNum () - guru99Sheet.getFirstRowNum ();αντικείμενο = νέο αντικείμενο [rowCount] [5];για (int i = 0; iΠερίληψη:
- Μπορούμε να δημιουργήσουμε τρεις τύπους δοκιμαστικού πλαισίου χρησιμοποιώντας το Selenium WebDriver.
- Αυτά είναι το πλαίσιο δοκιμής βάσει δεδομένων, βάσει λέξεων-κλειδιών και υβριδικών δοκιμών.
- Μπορούμε να επιτύχουμε δεδομένα βάσει πλαισίου χρησιμοποιώντας τον πάροχο δεδομένων του TestNG.
- Στο πλαίσιο βάσει λέξεων-κλειδιών, οι λέξεις-κλειδιά γράφονται σε ορισμένα εξωτερικά αρχεία όπως το αρχείο excel και ο κώδικας java θα καλέσει αυτό το αρχείο και θα εκτελέσει δοκιμαστικές περιπτώσεις.
- Το υβριδικό πλαίσιο είναι ένας συνδυασμός πλαισίου βάσει λέξεων-κλειδιών και δεδομένων.
Πραγματοποιήστε λήψη του Selenium Project Files για την επίδειξη σε αυτό το σεμινάριο