page object model selenium without using page factory
Το Page Object Model (POM) είναι ένα μοτίβο σχεδίασης για τη συντήρηση του χώρου αποθήκευσης αντικειμένων για στοιχεία Web. Αυτό το σεμινάριο εξηγεί πώς να εφαρμόσετε POM στο Σελήνιο Χωρίς Σελίδα Factory:
Το σενάριο αυτοματοποιημένο έργο πρέπει να έχει σχεδιαστεί με τέτοιο τρόπο ώστε να βελτιστοποιείται και να γίνεται πιο κατανοητό. Αυτό επιτυγχάνεται χρησιμοποιώντας POM που ακολουθεί ορισμένες οδηγίες για το σχεδιασμό ενός πλαισίου.
Θα μάθουμε περισσότερα για:
- Τι είναι το POM;
- Πλεονεκτήματα της χρήσης POM σε ένα έργο
- Πώς να δημιουργήσετε ένα βασικό POM χωρίς να χρησιμοποιήσετε τη σελίδα εργοστασιακής προσέγγισης;
=> Επισκεφθείτε εδώ για την αποκλειστική σειρά εκπαιδευτικών σεληνίου.
Τι θα μάθετε:
Μοντέλο αντικειμένου σελίδας χωρίς εργοστάσιο σελίδας
Το Page Object Model είναι ένα μοτίβο σχεδίασης που χρησιμοποιείται για τη συντήρηση του χώρου αποθήκευσης αντικειμένων για τα Στοιχεία Web. Εδώ, όλα τα Στοιχεία Ιστού και οι αντίστοιχες μέθοδοι διατηρούνται σε ξεχωριστή τάξη για κάθε ιστοσελίδα. Ως εκ τούτου, ακόμη και μία αλλαγή στο χαρακτηριστικό ενός WebElement θα αντικατοπτρίζει όλες τις δοκιμαστικές περιπτώσεις όπου και αν χρησιμοποιείται. Με αυτόν τον τρόπο, βελτιώνει την ευκολότερη συντήρηση του χώρου αποθήκευσης αντικειμένων.
Το μοντέλο αντικειμένων σελίδας είναι το καλύτερο όταν χρησιμοποιείται για εφαρμογές που έχουν πολλές σελίδες ή καταστάσεις.
Εδώ είναι τα εκπαιδευτικά βίντεο:
Μέρος Ι
Μέρος II
Πλεονεκτήματα του POM
Παρακάτω δίνονται μερικά πλεονεκτήματα του POM:
- Είναι πιο εύκολο να διατηρήσετε τον κωδικό. Τυχόν αλλαγές στο περιβάλλον χρήστη θα αντικατοπτρίζουν οπουδήποτε χρησιμοποιείται στην τάξη.
- Ισχυρός και κάνει αναγνώσιμο κώδικα (Οι μέθοδοι έχουν πιο ρεαλιστικά ονόματα).
- Κάνει τον κώδικα επαναχρησιμοποιήσιμο και μειώνει την επανάληψη κώδικα (Το αποθετήριο αντικειμένων είναι ανεξάρτητο από τις δοκιμαστικές περιπτώσεις).
- Ο κωδικός γίνεται λιγότερο και βελτιστοποιείται.
Βήματα για τη δημιουργία ενός POM χωρίς εργοστασιακό μοντέλο σελίδας
# 1) Δημιουργήστε μια κλάση Java για κάθε σελίδα της εφαρμογής.
#δύο) Σε κάθε τάξη, δηλώστε όλα τα Στοιχεία Ιστού ως μεταβλητή.
# 3) Εφαρμόστε τις αντίστοιχες μεθόδους που ενεργούν στις μεταβλητές.
Το σχέδιο σχεδίασης μπορεί να δομηθεί χρησιμοποιώντας 2 επίπεδα / πακέτα:
- Επίπεδο σελίδας θα κρατήσει τις σελίδες της εφαρμογής ως μεμονωμένη κλάση Java. Κάθε τάξη θα έχει WebElements δηλωμένο ως μεταβλητές και τις ενέργειες που εκτελούνται ως μέθοδοι.
- Δοκιμή επιπέδου θα κρατήσει τις δοκιμαστικές περιπτώσεις της εφαρμογής και του μέρους επαλήθευσής της.
Ας πάρουμε ένα παράδειγμα ενός απλού σεναρίου:
- Ανοίξτε τη διεύθυνση URL μιας εφαρμογής.
- Πληκτρολογήστε τη διεύθυνση email και τα δεδομένα κωδικού πρόσβασης.
- Κάντε κλικ στο κουμπί Είσοδος.
- Επαληθεύστε το επιτυχές μήνυμα σύνδεσης στη σελίδα αναζήτησης.
Επίπεδο σελίδας
Εδώ έχουμε 2 σελίδες,
- Αρχική σελίδα : Η σελίδα ανοίγει όταν εισαχθεί η διεύθυνση URL και εδώ εισάγουμε τα δεδομένα για σύνδεση.
- Σελίδα αναζήτησης : Σελίδα που εμφανίζεται μετά από μια επιτυχημένη σύνδεση.
Στο επίπεδο σελίδας, κάθε σελίδα στην εφαρμογή Ιστού δηλώνεται ως ξεχωριστή κλάση Java και αναφέρονται οι εντοπιστές και οι ενέργειές της.
Βήματα για τη δημιουργία POM με παραδείγματα σε πραγματικό χρόνο
# 1) Δημιουργήστε μια τάξη Java για κάθε σελίδα:
Σε αυτό παράδειγμα , θα έχουμε πρόσβαση σε 2 ιστοσελίδες, «Αρχική σελίδα» και «Αναζήτηση». Ως εκ τούτου, θα δημιουργήσουμε 2 τάξεις Java στο Page Layer (ή σε ένα πακέτο, com.automation.pages).
Package Name : com.automation.pages HomePage.java SearchPage.java
# 2) Δημιουργήστε WebElements ως μεταβλητές:
oracle pl sql ερωτήσεις συνέντευξης για 8 χρόνια εμπειρίας
Θα αλληλεπιδρούσαμε με:
- Πεδίο ηλεκτρονικού ταχυδρομείου, κωδικού πρόσβασης, κουμπιού σύνδεσης στην αρχική σελίδα.
- Ένα επιτυχημένο μήνυμα στο SearchPage.
Έτσι θα δημιουργήσουμε WebElements ως μεταβλητές χρησιμοποιώντας την κατηγορία «By».
Για παράδειγμα: Εάν το Email έχει xpath ως // div (περιέχει (@id, ‘EmailId’)), τότε η μεταβλητή δήλωση είναι
// Εντοπιστής για το πεδίο EmailId
Με EmailAddress = By.xpath (// div (περιέχει (@id, ‘EmailId’)))
# 3) Δημιουργήστε μεθόδους για ενέργειες που εκτελούνται στο WebElements:
Οι παρακάτω ενέργειες εκτελούνται στο WebElements:
- Πληκτρολογήστε ενέργεια στο πεδίο EmailAddress.
- Πληκτρολογήστε ενέργεια στο πεδίο Κωδικός πρόσβασης.
- Κάντε κλικ στην ενέργεια στο κουμπί Είσοδος.
Για παράδειγμα, Οι μέθοδοι που καθορίζονται από τον χρήστη δημιουργούνται για κάθε ενέργεια στο WebElement όπως,
public void typeEmailId(String Id){ driver.findElement(EmailAddress).sendKeys(Id) }
Εδώ, το αναγνωριστικό μεταδίδεται ως παράμετρος στη μέθοδο, καθώς η εισαγωγή θα σταλεί από το χρήστη από την κύρια δοκιμαστική περίπτωση.
Σημείωση :Πρέπει να δημιουργηθεί ένας κατασκευαστής για κάθε τάξη στο Page Layer για να πάρει την παρουσία προγράμματος οδήγησης από την Κύρια κλάση στο Test Layer.
Δεν ξεκινάμε το πρόγραμμα οδήγησης εδώ, αλλά η παρουσία του λαμβάνεται από την Κύρια τάξη όταν δημιουργείται το αντικείμενο της τάξης Page Layer.
Δημιουργούνται δύο τάξεις Java για κάθε σελίδα όπως φαίνεται παρακάτω:
HomePage.java
//package com.automation.pages; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; public class HomePage { WebDriver driver; // Locator for Email Address By EmailAddress = By.xpath('//div(contains(@id,'Emaild'))'); // Locator for Password field By Password= By.xpath('//div(contains(@id,'Password'))'); // Locator for SignIn Button By SignInButton= By.xpath('//div(contains(@id,'SignInButton'))'); // Method to type EmailId public void typeEmailId(String Id){ driver.findElement(EmailAddress).sendKeys(Id) } // Method to type Password public void typePassword(String PasswordValue){ driver.findElement(Password).sendKeys(PasswordValue) } // Method to click SignIn Button public void clickSignIn(){ driver.findElement(SignInButton).click() } // Constructor // Gets called when object of this page is created in MainClass.java public HomePage(WebDriver driver) { // 'this' keyword is used here to distinguish global and local variable 'driver' //gets driver as parameter from MainClass.java and assigns to the driver instance in this class this.driver=driver; }
SearchPage.Java
//package com.automation.pages; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; public class SearchPage{ WebDriver driver; // Locator for Success Message By SuccessMessage= By.xpath('//div(contains(@id,'Message'))'); // Method that return True or False depending on whether the message is displayed public Boolean MessageDisplayed(){ Boolean status = driver.findElement(SuccessMessage).isDisplayed(); return status; } // Constructor // This constructor is invoked when object of this page is created in MainClass.java public SearchPage(WebDriver driver) { // 'this' keyword is used here to distinguish global and local variable 'driver' //gets driver as parameter from MainClass.java and assigns to the driver instance in this class this.driver=driver;
Δοκιμή επιπέδου
Οι δοκιμαστικές περιπτώσεις εφαρμόζονται σε αυτήν την τάξη.
Δημιουργούμε ένα ξεχωριστό πακέτο, com.automation.test και, στη συνέχεια, δημιουργούμε ένα Java Class εδώ (MainClass.java).
Βήματα για τη δημιουργία δοκιμαστικών περιπτώσεων:
- Αρχικοποιήστε το πρόγραμμα οδήγησης και ανοίξτε την εφαρμογή.
- Δημιουργήστε ένα αντικείμενο της κλάσης PageLayer (για κάθε ιστοσελίδα) και μεταβιβάστε την παρουσία προγράμματος οδήγησης ως παράμετρο.
- Χρησιμοποιώντας το αντικείμενο που δημιουργήθηκε, πραγματοποιήστε μια κλήση προς τις μεθόδους της κατηγορίας PageLayer (για κάθε ιστοσελίδα) για την εκτέλεση ενεργειών / επαλήθευσης.
- Επαναλάβετε το βήμα 3 έως ότου εκτελεστούν όλες οι ενέργειες και μετά κλείστε το πρόγραμμα οδήγησης.
//package com.automation.test; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class MainClass { public static void main(String() args) { System.setProperty('webdriver.chrome.driver','./exefiles/chromedriver.exe'); WebDriver driver= new ChromeDriver(); driver.manage().window().maximize(); driver.get('URL mentioned here'); // Creating object of HomePage and driver instance is passed as parameter to constructor of Homepage.Java HomePage homePage= new HomePage(driver); // Type EmailAddress homePage.typeEmailId('abc@ymail.com'); // EmailId value is passed as paramter which in turn will be assigned to the method in HomePage.Java // Type Password Value homePage.typePassword('password123'); // Password value is passed as paramter which in turn will be assigned to the method in HomePage.Java // Click on SignIn Button homePage.clickSignIn(); // Creating an object of LoginPage and driver instance is passed as parameter to constructor of SearchPage.Java SearchPage searchPage= new SearchPage(driver); //Verify that Success Message is displayed Assert.assertTrue(searchPage.MessageDisplayed()); //Quit browser driver.quit(); } }
συμπέρασμα
Αυτό το σεμινάριο εξήγησε τα πλεονεκτήματα του μοντέλου αντικειμένου σελίδας και πώς να δημιουργήσετε ένα βασικό μοτίβο σχεδίασης POM χωρίς να χρησιμοποιήσετε το Page Factory στο Selenium.
Στο επερχόμενο σεμινάριο, θα συζητήσουμε μια ακόμη προσέγγιση του POM, δηλαδή, χρησιμοποιώντας την προσέγγιση Page Factory.
=> Δείτε όλα τα σεμινάρια σεληνίου εδώ.
Συνιστώμενη ανάγνωση
- Μοντέλο αντικειμένου σελίδας (POM) με εργοστάσιο σελίδας | Εκπαιδευτικό σελήνιο
- Spiral Model - Τι είναι το SDLC Spiral Model;
- Cucumber Selenium Tutorial: Αγγούρι Java Selenium WebDriver Integration
- Χρήση του Selenium Select Class για το χειρισμό των αναπτυσσόμενων στοιχείων σε μια ιστοσελίδα - Selenium Tutorial # 13
- Εισαγωγή στο Selenium WebDriver - Selenium Tutorial # 8
- Tutorial ChromeDriver Selenium: Δοκιμές Webdriver Selenium στο Chrome
- 30+ καλύτερα σεμινάρια σεληνίου: Μάθετε το σελήνιο με πραγματικά παραδείγματα
- Ευκαιρία εργασίας μερικής απασχόλησης για ειδικούς σεληνίου