Μοντέλο αντικειμένου σελίδας (POM) & Σελίδα Factory in Selenium Tutorial

Πίνακας περιεχομένων:

Anonim

Τι είναι το μοντέλο αντικειμένου σελίδας;

Το Page Object Model (POM) είναι ένα μοτίβο σχεδίασης, που χρησιμοποιείται ευρέως σε δοκιμαστικούς αυτοματισμούς που δημιουργεί Object Repository για στοιχεία UI ιστού. Το πλεονέκτημα του μοντέλου είναι ότι μειώνει την επανάληψη κώδικα και βελτιώνει τη συντήρηση δοκιμής.

Κάτω από αυτό το μοντέλο, για κάθε ιστοσελίδα στην εφαρμογή, θα πρέπει να υπάρχει αντίστοιχη κλάση σελίδας. Αυτή η τάξη σελίδων θα προσδιορίσει τα WebElements αυτής της ιστοσελίδας και περιέχει επίσης μεθόδους σελίδας που εκτελούν λειτουργίες σε αυτά τα WebElements. Το όνομα αυτών των μεθόδων πρέπει να δοθεί σύμφωνα με την εργασία που εκτελούν, δηλαδή, εάν ένας φορτωτής περιμένει να εμφανιστεί η πύλη πληρωμής, το όνομα της μεθόδου POM μπορεί να είναι waitForPaymentScreenDisplay ().

Σε αυτό το σεμινάριο, θα μάθετε-

  • Γιατί μοντέλο αντικειμένου σελίδας;
  • Πλεονεκτήματα του POM
  • Πώς να εφαρμόσετε το POM;
  • Τι είναι το Page Factory;
  • Guru99 TestCase με έννοια Εργοστάσιο σελίδας
  • Εργοστάσιο AjaxElementLocator

Γιατί μοντέλο αντικειμένου σελίδας;

Η εκκίνηση ενός αυτοματισμού διεπαφής χρήστη στο Selenium WebDriver ΔΕΝ είναι μια δύσκολη εργασία. Απλά πρέπει να βρείτε στοιχεία, να εκτελέσετε εργασίες σε αυτό.

Σκεφτείτε αυτό το απλό σενάριο για να συνδεθείτε σε έναν ιστότοπο

Όπως μπορείτε να παρατηρήσετε, το μόνο που κάνουμε είναι να βρούμε στοιχεία και να γεμίζουμε τιμές για αυτά τα στοιχεία.

Αυτό είναι ένα μικρό σενάριο. Η συντήρηση σεναρίων φαίνεται εύκολη. Αλλά με τη δοκιμαστική σουίτα θα αυξηθεί. Καθώς προσθέτετε όλο και περισσότερες γραμμές στον κώδικά σας, τα πράγματα γίνονται δύσκολα.

Το κύριο πρόβλημα με τη συντήρηση σεναρίων είναι ότι εάν 10 διαφορετικά σενάρια χρησιμοποιούν το ίδιο στοιχείο σελίδας, με οποιαδήποτε αλλαγή σε αυτό το στοιχείο, πρέπει να αλλάξετε και τα 10 σενάρια. Αυτό είναι χρονοβόρο και επιρρεπές σε σφάλματα.

Μια καλύτερη προσέγγιση στη συντήρηση σεναρίων είναι να δημιουργήσετε ένα ξεχωριστό αρχείο τάξης που θα βρει στοιχεία ιστού, θα τα γεμίζει ή θα τα επαληθεύει. Αυτή η τάξη μπορεί να επαναχρησιμοποιηθεί σε όλα τα σενάρια χρησιμοποιώντας αυτό το στοιχείο. Στο μέλλον, εάν υπάρχει αλλαγή στο στοιχείο ιστού, πρέπει να κάνουμε την αλλαγή σε ένα μόνο αρχείο κατηγορίας και όχι σε 10 διαφορετικά σενάρια.

Αυτή η προσέγγιση ονομάζεται Page Object Model in Selenium. Βοηθά να κάνει τον κώδικα πιο ευανάγνωστο, διατηρήσιμο και επαναχρησιμοποιήσιμο.

Πλεονεκτήματα του POM

  1. Το Μοτίβο Σχεδιασμού Αντικειμένου Σελίδας λέει ότι οι λειτουργίες και οι ροές στο περιβάλλον χρήστη πρέπει να διαχωρίζονται από την επαλήθευση. Αυτή η ιδέα καθιστά τον κώδικα καθαρότερο και κατανοητό.
  2. Το δεύτερο πλεονέκτημα είναι ότι το αποθετήριο αντικειμένων είναι ανεξάρτητο από τις δοκιμαστικές περιπτώσεις, έτσι μπορούμε να χρησιμοποιήσουμε το ίδιο αποθετήριο αντικειμένων για διαφορετικό σκοπό με διαφορετικά εργαλεία. Για παράδειγμα, μπορούμε να ενσωματώσουμε το μοντέλο αντικειμένου σελίδας στο Σελήνιο με το TestNG / JUnit για λειτουργικές δοκιμές και ταυτόχρονα με το JBehave / Αγγούρι για δοκιμή αποδοχής.
  3. Ο κώδικας γίνεται λιγότερο και βελτιστοποιείται λόγω των επαναχρησιμοποιήσιμων μεθόδων σελίδας στις τάξεις POM.
  4. Οι μέθοδοι λαμβάνουν πιο ρεαλιστικά ονόματα που μπορούν εύκολα να χαρτογραφηθούν με τη λειτουργία που πραγματοποιείται στο περιβάλλον χρήστη. δηλαδή αν κάνοντας κλικ στο κουμπί που προσγειώνεται στην αρχική σελίδα, το όνομα της μεθόδου θα είναι σαν «gotoHomePage ()».

Πώς να εφαρμόσετε το POM;

Απλή POM:

Είναι η βασική δομή του πλαισίου μοντέλου αντικειμένου σελίδας όπου όλα τα Στοιχεία Ιστού του AUT και η μέθοδος που λειτουργεί σε αυτά τα Στοιχεία Web διατηρούνται μέσα σε ένα αρχείο κλάσης. Μια εργασία όπως η επαλήθευση θα πρέπει να είναι ξεχωριστή ως μέρος των μεθόδων δοκιμής.

Πλήρες παράδειγμα

TestCase: Μεταβείτε στον ιστότοπο επίδειξης Guru99.

Βήμα 1) Μεταβείτε στον ιστότοπο επίδειξης Guru99
Βήμα 2) Στην αρχική σελίδα του κειμένου επιταγή «Guru99 Τράπεζα» είναι παρόν
Βήμα 3) Συνδεθείτε στην εφαρμογή
Βήμα 4) Βεβαιωθείτε ότι η αρχική σελίδα περιέχει κείμενο ως "Manger Id: demo"

Εδώ ασχολούμαστε με 2 σελίδες

  1. Σελίδα σύνδεσης
  2. Αρχική σελίδα (εμφανίζεται μόλις συνδεθείτε)

Κατά συνέπεια, δημιουργούμε 2 POM σε μαθήματα Selenium

Guru99 Σελίδα σύνδεσης POM

σελίδες πακέτωνεισαγωγή org.openqa.selenium.By;εισαγωγή org.openqa.selenium.WebDriver;δημόσια τάξη Guru99Login {Πρόγραμμα οδήγησης WebDriver;Από τον χρήστη99GuruName = By.name ("uid");Με κωδικό99Guru = By.name ("κωδικός πρόσβασης");Με τίτλοText = By.className ("barone");Με σύνδεση = By.name ("btnLogin");δημόσιο Guru99Login (πρόγραμμα οδήγησης WebDriver) {this.driver = πρόγραμμα οδήγησης;}// Ορίστε το όνομα χρήστη στο πλαίσιο κειμένουpublic void setUserName (String strUserName) {driver.findElement (user99GuruName) .sendKeys (strUserName);}// Ορισμός κωδικού πρόσβασης στο πλαίσιο κειμένου κωδικού πρόσβασηςpublic void setPassword (String strPassword) {driver.findElement (password99Guru) .sendKeys (strPassword);}// Κάντε κλικ στο κουμπί σύνδεσηςδημόσιο άκυρο clickLogin () {driver.findElement (login). κλικ ();}// Αποκτήστε τον τίτλο της σελίδας σύνδεσηςδημόσια συμβολοσειρά getLoginTitle () {επιστροφή driver.findElement (titleText) .getText ();}/ *** Αυτή η μέθοδος POM θα εκτεθεί σε δοκιμαστική περίπτωση για να συνδεθείτε στην εφαρμογή* @param strUserName* @param strPasword* @ΕΠΙΣΤΡΟΦΗ* /public void loginToGuru99 (String strUserName, String strPasword) {// Συμπληρώστε το όνομα χρήστηthis.setUserName (strUserName);// Συμπληρώστε τον κωδικό πρόσβασηςthis.setPassword (strPasword);// Κάντε κλικ στο κουμπί Είσοδοςthis.clickLogin ();}}

Αρχική σελίδα Guru99 POM στο Σελήνιο

σελίδες πακέτωνεισαγωγή org.openqa.selenium.By;εισαγωγή org.openqa.selenium.WebDriver;δημόσια τάξη Guru99HomePage {Πρόγραμμα οδήγησης WebDriver;Από homePageUserName = By.xpath ("// table // tr [@ class = 'heading3']");δημόσια Guru99HomePage (πρόγραμμα οδήγησης WebDriver) {this.driver = πρόγραμμα οδήγησης;}// Λάβετε το όνομα χρήστη από την αρχική σελίδαδημόσια συμβολοσειρά getHomePageDashboardUserName () {επιστροφή driver.findElement (homePageUserName) .getText ();}}

Guru99 Simple POM σε υπόθεση δοκιμής σεληνίου

δοκιμή συσκευασίαςεισαγωγή java.util.concurrent.TimeUnit;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.firefox.FirefoxDriver;εισαγωγή org.testng.Assert;εισαγωγή org.testng.annotations.BeforeTest;εισαγωγή org.testng.annotations.Test;εισαγωγή σελίδων.Guru99HomePage;εισαγωγή σελίδων.Guru99Login;δημόσια τάξη Test99GuruLogin {String driverPath = "C: \\ geckodriver.exe";Πρόγραμμα οδήγησης WebDriver;Guru99Login objLogin;Guru99HomePage objHomePage;@BeforeTestδημόσια κενή ρύθμιση () {System.setProperty ("webdriver.gecko.driver", driverPath);πρόγραμμα οδήγησης = νέο FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/V4/");}/ *** Αυτή η δοκιμαστική περίπτωση θα συνδεθεί στη διεύθυνση http://demo.guru99.com/V4/* Επαληθεύστε τον τίτλο της σελίδας σύνδεσης ως bank99 bank* Είσοδος στην εφαρμογή* Επαληθεύστε την αρχική σελίδα χρησιμοποιώντας το μήνυμα Dashboard* /@ Δοκιμή (προτεραιότητα = 0)public void test_Home_Page_Appear_Correct () {// Δημιουργήστε αντικείμενο σελίδας σύνδεσηςobjLogin = νέο Guru99Login (πρόγραμμα οδήγησης);// Επαληθεύστε τον τίτλο της σελίδας σύνδεσηςString loginPageTitle = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase (). Περιέχει ("guru99 bank"));// σύνδεση στην εφαρμογήobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// μεταβείτε στην επόμενη σελίδαobjHomePage = νέο Guru99HomePage (πρόγραμμα οδήγησης);// Επαληθεύστε την αρχική σελίδαAssert.assertTrue (objHomePage.getHomePageDashboardUserName (). ToLowerCase (). Περιέχει ("manger id: mgr123"));}

Τι είναι το Page Factory στο Σελήνιο;

Το Page Factory in Selenium είναι μια έννοια πλαισίου ενσωματωμένου μοντέλου αντικειμένου σελίδας για το Selenium WebDriver, αλλά είναι πολύ βελτιστοποιημένη. Χρησιμοποιείται για την αρχικοποίηση αντικειμένων σελίδας ή για την ίδρυση του ίδιου του αντικειμένου σελίδας. Χρησιμοποιείται επίσης για την προετοιμασία στοιχείων κλάσης σελίδας χωρίς τη χρήση του "FindElement / s".

Εδώ επίσης, ακολουθούμε την έννοια του διαχωρισμού του Page Object Repository και του Test Methods. Επιπλέον, με τη βοήθεια της τάξης PageFactory στο Σελήνιο, χρησιμοποιούμε σχολιασμούς @FindBy για να βρούμε το WebElement. Χρησιμοποιούμε τη μέθοδο initElements για την προετοιμασία στοιχείων ιστού

Το @FindBy μπορεί να δεχτεί tagName, partialLinkText, όνομα, linkText, id, css, className, xpath ως χαρακτηριστικά.

Ας δούμε το ίδιο παράδειγμα όπως παραπάνω χρησιμοποιώντας το Page Factory

Σελίδα σύνδεσης Guru99 με το Εργοστάσιο σελίδας

πακέτο PageFactory;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.WebElement;εισαγωγή org.openqa.selenium.support.FindBy;εισαγωγή org.openqa.selenium.support.PageFactory;δημόσια τάξη Guru99Login {/ *** Όλα τα WebElements αναγνωρίζονται από τον σχολιασμό @FindBy* /Πρόγραμμα οδήγησης WebDriver;@FindBy (όνομα = "uid")WebElement user99GuruName;@FindBy (όνομα = "κωδικός πρόσβασης")Κωδικός πρόσβασης WebElement99Guru;@FindBy (className = "barone")Τίτλος WebElementText;@FindBy (όνομα = "btnLogin")Σύνδεση WebElement;δημόσιο Guru99Login (πρόγραμμα οδήγησης WebDriver) {this.driver = πρόγραμμα οδήγησης;// Αυτή η μέθοδος initElements θα δημιουργήσει όλα τα WebElementsPageFactory.initElements (πρόγραμμα οδήγησης, αυτό);}// Ορίστε το όνομα χρήστη στο πλαίσιο κειμένουpublic void setUserName (String strUserName) {user99GuruName.sendKeys (strUserName);}// Ορισμός κωδικού πρόσβασης στο πλαίσιο κειμένου κωδικού πρόσβασηςpublic void setPassword (String strPassword) {κωδικός πρόσβασης99Guru.sendKeys (strPassword);}// Κάντε κλικ στο κουμπί σύνδεσηςδημόσιο άκυρο clickLogin () {login.click ();}// Αποκτήστε τον τίτλο της σελίδας σύνδεσηςδημόσια συμβολοσειρά getLoginTitle () {επιστροφή titleText.getText ();}/ *** Αυτή η μέθοδος POM θα εκτεθεί σε δοκιμαστική περίπτωση για να συνδεθείτε στην εφαρμογή* @param strUserName* @param strPasword* @ΕΠΙΣΤΡΟΦΗ* /public void loginToGuru99 (String strUserName, String strPasword) {// Συμπληρώστε το όνομα χρήστηthis.setUserName (strUserName);// Συμπληρώστε τον κωδικό πρόσβασηςthis.setPassword (strPasword);// Κάντε κλικ στο κουμπί Είσοδοςthis.clickLogin ();}}

Αρχική σελίδα Guru99 με εργοστάσιο σελίδας

πακέτο PageFactory;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.WebElement;εισαγωγή org.openqa.selenium.support.FindBy;εισαγωγή org.openqa.selenium.support.PageFactory;δημόσια τάξη Guru99HomePage {Πρόγραμμα οδήγησης WebDriver;@FindBy (xpath = "// table // tr [@ class = 'head3']")WebElement homePageUserName;δημόσια Guru99HomePage (πρόγραμμα οδήγησης WebDriver) {this.driver = πρόγραμμα οδήγησης;// Αυτή η μέθοδος initElements θα δημιουργήσει όλα τα WebElementsPageFactory.initElements (πρόγραμμα οδήγησης, αυτό);}// Λάβετε το όνομα χρήστη από την αρχική σελίδαδημόσια συμβολοσειρά getHomePageDashboardUserName () {επιστροφή homePageUserName.getText ();}}

Guru99 TestCase με έννοια Εργοστάσιο σελίδας

δοκιμή συσκευασίαςεισαγωγή java.util.concurrent.TimeUnit;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.firefox.FirefoxDriver;εισαγωγή org.testng.Assert;εισαγωγή org.testng.annotations.BeforeTest;εισαγωγή org.testng.annotations.Test;εισαγωγή PageFactory.Guru99HomePage;εισαγωγή του PageFactory.Guru99Login;δημόσια τάξη Test99GuruLoginWithPageFactory {String driverPath = "C: \\ geckodriver.exe";Πρόγραμμα οδήγησης WebDriver;Guru99Login objLogin;Guru99HomePage objHomePage;@BeforeTestδημόσια κενή ρύθμιση () {System.setProperty ("webdriver.gecko.driver", driverPath);πρόγραμμα οδήγησης = νέο FirefoxDriver ();driver.manage (). timeouts (). implicitlyWait (10, TimeUnit.SECONDS);driver.get ("http://demo.guru99.com/V4/");}/ *** Αυτή η δοκιμή μεταβείτε στη διεύθυνση http://demo.guru99.com/V4/* Επαληθεύστε τον τίτλο της σελίδας σύνδεσης ως bank99 bank* Είσοδος στην εφαρμογή* Επαληθεύστε την αρχική σελίδα χρησιμοποιώντας το μήνυμα Dashboard* /@ Δοκιμή (προτεραιότητα = 0)public void test_Home_Page_Appear_Correct () {// Δημιουργήστε αντικείμενο σελίδας σύνδεσηςobjLogin = νέο Guru99Login (πρόγραμμα οδήγησης);// Επαληθεύστε τον τίτλο της σελίδας σύνδεσηςString loginPageTitle = objLogin.getLoginTitle ();Assert.assertTrue (loginPageTitle.toLowerCase (). Περιέχει ("guru99 bank"));// σύνδεση στην εφαρμογήobjLogin.loginToGuru99 ("mgr123", "mgr! 23");// μεταβείτε στην επόμενη σελίδαobjHomePage = νέο Guru99HomePage (πρόγραμμα οδήγησης);// Επαληθεύστε την αρχική σελίδαAssert.assertTrue (objHomePage.getHomePageDashboardUserName (). ToLowerCase (). Περιέχει ("manger id: mgr123"));}}

Η πλήρης δομή έργου θα μοιάζει με το διάγραμμα:

Εργοστάσιο AjaxElementLocator

Το AjaxElementLocatorFactory είναι μια έννοια τεμπέλης φόρτωσης του PageFactory στο Σελήνιο. Χρησιμοποιείται για την εύρεση των στοιχείων ιστού μόνο όταν τα στοιχεία χρησιμοποιούνται σε οποιαδήποτε λειτουργία. Εκχωρεί χρονικό όριο για WebElements στην κλάση σελίδων αντικειμένων. Ένα από τα βασικά πλεονεκτήματα της χρήσης του προτύπου PageFactory στο Selenium είναι η AjaxElementLocatorFactory Class.

Εδώ, όταν εκτελείται μια λειτουργία σε ένα στοιχείο, η αναμονή για την ορατότητά της ξεκινά μόνο από εκείνη τη στιγμή. Εάν το στοιχείο δεν βρεθεί στο δεδομένο χρονικό διάστημα, η εκτέλεση δοκιμαστικής υπόθεσης θα ρίξει την εξαίρεση «NoSuchElementException».

Περίληψη

  1. Το Μοντέλο Αντικειμένου Σελίδας στο Selenium Websdriver είναι ένα σχέδιο σχεδίασης Αντικειμένου Αποθήκης.
  2. Το μοντέλο αντικειμένου σελίδας Selenium δημιουργεί τον κώδικα δοκιμής μας διατηρήσιμο, επαναχρησιμοποιήσιμο.
  3. Το Page Factory είναι ένας βελτιστοποιημένος τρόπος δημιουργίας αποθετηρίου αντικειμένων στην έννοια του πλαισίου αντικειμένου σελίδας.
  4. Το AjaxElementLocatorFactory είναι μια έννοια τεμπέλης φόρτωσης στο Page Factory - μοτίβο σχεδιασμού αντικειμένων σελίδας για την αναγνώριση WebElements μόνο όταν χρησιμοποιούνται σε οποιαδήποτε λειτουργία.

Πραγματοποιήστε λήψη του Selenium Project Files για την επίδειξη σε αυτό το σεμινάριο