Πώς να χειριστείτε την κλήση AJAX στο Selenium Webdriver

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

Anonim

Τι είναι το Ajax;

Το AJAX σημαίνει ασύγχρονη JavaScript & XML και επιτρέπει στην ιστοσελίδα να ανακτήσει μικρές ποσότητες δεδομένων από το διακομιστή χωρίς να φορτώσει ξανά ολόκληρη τη σελίδα.

Το Ajax είναι μια τεχνική που χρησιμοποιείται για τη δημιουργία γρήγορων και δυναμικών ιστοσελίδων. Αυτή η τεχνική είναι ασύγχρονη και χρησιμοποιεί συνδυασμό Javascript και XML.

Θα ενημερώσει τα τμήματα μιας ιστοσελίδας χωρίς να φορτώσει ξανά ολόκληρη τη σελίδα.

Μερικές από τις διάσημες εφαρμογές που χρησιμοποιούν την τεχνική AJAX είναι Gmail, Χάρτες Google, Facebook, Youtube κ.λπ.

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

  • Τι είναι το Ajax;
  • Πώς λειτουργεί το Ajax;
  • Πώς να χειριστείτε την κλήση Ajax Χρησιμοποιώντας το Selenium Webdriver
  • Προκλήσεις στη διαχείριση της κλήσης Ajax στο Selenium Webdriver

Πώς λειτουργεί το Ajax;

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

  • Μια κλήση Ajax είναι ένα ασύγχρονο αίτημα που ξεκίνησε από το πρόγραμμα περιήγησης που δεν οδηγεί άμεσα σε μετάβαση σελίδας. Αυτό σημαίνει, εάν ενεργοποιήσετε ένα αίτημα Ajax, ο χρήστης μπορεί να συνεχίσει να εργάζεται στην εφαρμογή ενώ το αίτημα περιμένει μια απάντηση.
  • Το AJAX στέλνει αιτήματα HTTP από τον πελάτη στον διακομιστή και στη συνέχεια επεξεργάζεται την απόκριση του διακομιστή, χωρίς να φορτώνει ξανά ολόκληρη τη σελίδα. Έτσι, όταν πραγματοποιείτε μια κλήση AJAX, δεν είστε σίγουροι για το χρόνο που χρειάζεται ο διακομιστής για να σας στείλει μια απάντηση .

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

Πώς να χειριστείτε την κλήση Ajax Χρησιμοποιώντας το Selenium Webdriver

Η μεγαλύτερη πρόκληση στο χειρισμό της κλήσης Ajax είναι η γνώση του χρόνου φόρτωσης για την ιστοσελίδα. Δεδομένου ότι η φόρτωση της ιστοσελίδας θα διαρκέσει μόνο για κλάσμα δευτερολέπτων, είναι δύσκολο για τον υπεύθυνο δοκιμών να δοκιμάσει μια τέτοια εφαρμογή μέσω εργαλείου αυτοματισμού. Για αυτό, το Selenium Webdriver πρέπει να χρησιμοποιήσει τη μέθοδο αναμονής σε αυτήν την Ajax Call.

Έτσι, εκτελώντας αυτήν την εντολή αναμονής, το σελήνιο θα αναστείλει την εκτέλεση της τρέχουσας υπόθεσης δοκιμής και θα περιμένει την αναμενόμενη ή νέα τιμή. Όταν εμφανιστεί η νέα τιμή ή πεδίο, οι ανασταλμένες δοκιμαστικές περιπτώσεις θα εκτελεστούν από το Selenium Webdriver.

Ακολουθούν οι μέθοδοι αναμονής που μπορούν να χρησιμοποιήσουν το Selenium Webdriver

  1. Νήμα. Ύπνος ()
  • Thread.Sleep () δεν είναι μια σοφή επιλογή, καθώς αναστέλλει το τρέχον νήμα για το καθορισμένο χρονικό διάστημα.
  • Στο AJAX, δεν μπορείτε ποτέ να είστε σίγουροι για τον ακριβή χρόνο αναμονής. Έτσι, η δοκιμή σας θα αποτύχει εάν το στοιχείο δεν θα εμφανιστεί εντός του χρόνου αναμονής. Επιπλέον, αυξάνει τα γενικά έξοδα επειδή η κλήση του Thread.sleep (t) κάνει το τρέχον νήμα να μετακινηθεί από την ουρά λειτουργίας στην ουρά αναμονής.
  • Αφού φτάσει ο χρόνος, το τρέχον νήμα θα μετακινηθεί από την ουρά αναμονής στην έτοιμη ουρά και στη συνέχεια θα χρειαστεί λίγος χρόνος για να επιλεγεί από την CPU και να εκτελεστεί.
  1. Σιωπηρή αναμονή ()
  • Αυτή η μέθοδος λέει στο webdriver να περιμένει αν το στοιχείο δεν είναι άμεσα διαθέσιμο, αλλά αυτή η αναμονή θα είναι σε ισχύ για όλη την ώρα που το πρόγραμμα περιήγησης είναι ανοιχτό. Επομένως, οποιαδήποτε αναζήτηση για τα στοιχεία της σελίδας θα μπορούσε να πάρει το χρόνο που έχει οριστεί η σιωπηρή αναμονή.
  1. Άμεση αναμονή ()
  • Η ρητή αναμονή χρησιμοποιείται για να παγώσει την εκτέλεση της δοκιμής μέχρι τη στιγμή που πληρούται μια συγκεκριμένη συνθήκη ή λήγει ο μέγιστος χρόνος.
  1. Περιμένετε στο Webdriver
  • Μπορεί να χρησιμοποιηθεί για οποιεσδήποτε συνθήκες. Αυτό μπορεί να επιτευχθεί με το WebDriverWait σε συνδυασμό με το ExpectedCondition
  • Ο καλύτερος τρόπος για να περιμένετε ένα στοιχείο δυναμικά είναι ο έλεγχος της κατάστασης κάθε δευτερόλεπτο και η συνέχιση της επόμενης εντολής στο σενάριο μόλις ικανοποιηθεί η συνθήκη.

Αλλά το πρόβλημα με όλες αυτές τις αναμονές είναι, πρέπει να αναφέρετε τη μονάδα χρονικού ορίου. Τι γίνεται αν το στοιχείο εξακολουθεί να μην υπάρχει εντός του χρόνου; Υπάρχει λοιπόν μια ακόμη αναμονή που ονομάζεται Fluent waiting.

  1. Άπταιστα περιμένετε
  • Πρόκειται για μια εφαρμογή της διεπαφής Wait που έχει το χρονικό όριο και το διάστημα ψηφοφορίας. Κάθε παρουσία FluentWait καθορίζει το μέγιστο χρονικό διάστημα αναμονής για μια κατάσταση, καθώς και τη συχνότητα με την οποία ελέγχεται η κατάσταση.

Προκλήσεις στη διαχείριση της κλήσης Ajax στο Selenium Webdriver

  • Η χρήση της εντολής "παύση" για τον χειρισμό της κλήσης Ajax δεν είναι απολύτως αξιόπιστη. Ο μεγάλος χρόνος παύσης καθιστά τη δοκιμή απαράδεκτα αργή και αυξάνει τον χρόνο δοκιμής. Αντ 'αυτού, το "waitforcondition" θα είναι πιο χρήσιμο στη δοκιμή εφαρμογών Ajax
  • Είναι δύσκολο να εκτιμηθεί ο κίνδυνος που σχετίζεται με συγκεκριμένες εφαρμογές Ajax
  • Με δεδομένη την πλήρη ελευθερία στους προγραμματιστές να τροποποιούν την εφαρμογή Ajax καθιστά τη διαδικασία δοκιμής δύσκολη
  • Η δημιουργία αυτοματοποιημένου αιτήματος δοκιμής μπορεί να είναι δύσκολη για εργαλεία δοκιμής, καθώς η εφαρμογή AJAX χρησιμοποιεί συχνά διαφορετική τεχνική κωδικοποίησης ή σειριοποίησης για την υποβολή δεδομένων POST.

Ένα παράδειγμα για τον χειρισμό του Ajax

εισαγωγή org.openqa.selenium.By;εισαγωγή org.openqa.selenium.WebDriver;εισαγωγή org.openqa.selenium.WebElement;εισαγωγή org.openqa.selenium.chrome.ChromeDriver;εισαγωγή org.openqa.selenium.support.ui.ExpectedConditions;εισαγωγή org.openqa.selenium.support.ui.WebDriverWait;εισαγωγή org.testng.Assert;εισαγωγή org.testng.annotations.BeforeClass;εισαγωγή org.testng.annotations.Test;δημόσια τάξη Ajaxdemo {ιδιωτικό String URL = "http://demo.guru99.com/test/ajax.html";Πρόγραμμα οδήγησης WebDriver;Περιμένετε WebDriverWait?@Πριν το μάθημαδημόσιο άκυρο setUp () {System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");// δημιουργία παρουσίας chromeπρόγραμμα οδήγησης = νέο ChromeDriver ();driver.manage (). window (). μεγιστοποίηση ();driver.navigate (). to (URL);}@Δοκιμήpublic void test_AjaxExample () {Κατά κοντέινερ = By.cssSelector (". Container");wait = νέο WebDriverWait (πρόγραμμα οδήγησης, 5);wait.until (ExpectedConditions.presenceOfElementLocated (κοντέινερ));// Λάβετε το κείμενο πριν πραγματοποιήσετε μια κλήση ajaxWebElement noTextElement = driver.findElement (By.className ("radiobutton"));String textBefore = noTextElement.getText (). Trim ();// Κάντε κλικ στο κουμπί επιλογήςdriver.findElement (By.id ("ναι")). κάντε κλικ στο ();// Κάντε κλικ στο κουμπί ελέγχουdriver.findElement (By.id ("buttoncheck")). κάντε κλικ στο ();/ * Λάβετε το κείμενο μετά την κλήση ajax * /WebElement TextElement = driver.findElement (By.className ("radiobutton"));wait.until (ExpectedConditions.visibilityOf (TextElement));String textAfter = TextElement.getText (). Trim ();/ * Επαληθεύστε και τα δύο κείμενα πριν από την κλήση ajax και μετά το κείμενο κλήσης ajax. * /Assert.assertNotEquals (κείμενο Πριν, textAfter);System.out.println ("Ajax Call Performed");String waitingText = "Το κουμπί επιλογής είναι επιλεγμένο και η τιμή του είναι Ναι";/ * Επαληθεύστε το αναμενόμενο κείμενο με κείμενο ενημερωμένο μετά την κλήση ajax * /Assert.assertEquals (textAfter, waitingText);driver.close ();}}

Περίληψη:

  • Το AJAX επιτρέπει στην ιστοσελίδα να ανακτήσει μικρές ποσότητες δεδομένων από το διακομιστή χωρίς να φορτώσει ξανά ολόκληρη τη σελίδα.
  • Για να ελέγξετε την εφαρμογή Ajax, πρέπει να εφαρμόζονται διαφορετικές μέθοδοι αναμονής
    • Νήμα
    • Σιωπηρή αναμονή
    • Άμεση αναμονή
    • Περιμένετε στο Webdriver
    • Άπταιστα περιμένετε
  • Η δημιουργία αυτοματοποιημένου αιτήματος δοκιμής μπορεί να είναι δύσκολη για εργαλεία δοκιμής, καθώς η εφαρμογή AJAX χρησιμοποιεί συχνά διαφορετική τεχνική κωδικοποίησης ή σειριοποίησης για την υποβολή δεδομένων POST.