Πώς να χειριστείτε τις κλήσεις AJAX Selenium Πρόγραμμα οδήγησης Web

Τι είναι ο Άγιαξ;

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

Το Ajax είναι μια τεχνική που χρησιμοποιείται για τη δημιουργία γρήγορων και δυναμικών ιστοσελίδων. Αυτή η τεχνική είναι ασύγχρονη και χρησιμοποιεί συνδυασμό των Javascript και XML. Θα ενημερώσει τα μέρη μιας ιστοσελίδας χωρίς να φορτώσει ξανά ολόκληρη τη σελίδα. Μερικές από τις διάσημες εφαρμογές που χρησιμοποιούν την τεχνική AJAX είναι το Gmail, οι Χάρτες Google, το Facebook, το Youtube κ.λπ.

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

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

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

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

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

Πώς να χειριστείτε τις κλήσεις του Ajax Selenium Πρόγραμμα οδήγησης Web

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

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

Ακολουθούν οι μέθοδοι αναμονής που Selenium Το πρόγραμμα οδήγησης Web μπορεί να χρησιμοποιήσει

Thread.Sleep()

  • Το Thread.Sleep () δεν είναι μια σοφή επιλογή, καθώς αναστέλλει το τρέχον νήμα για το καθορισμένο χρονικό διάστημα.
  • Στο AJAX, δεν μπορείτε ποτέ να είστε σίγουροι για τον ακριβή χρόνο αναμονής. Επομένως, η δοκιμή σας θα αποτύχει εάν το στοιχείο δεν εμφανιστεί εντός του χρόνου αναμονής. Επιπλέον, αυξάνει την επιβάρυνση επειδή η κλήση Thread.sleep(t) κάνει το τρέχον νήμα να μετακινηθεί από την τρέχουσα ουρά στην ουρά αναμονής.
  • Αφού φτάσει ο χρόνος 't', το τρέχον νήμα θα μετακινηθεί από την ουρά αναμονής στην ουρά ετοιμότητας και, στη συνέχεια, χρειάζεται λίγος χρόνος για να επιλεγεί από την CPU και να εκτελεστεί.

Σιωπηρή αναμονή ()

  • Αυτή η μέθοδος λέει στο webdriver να περιμένει εάν το στοιχείο δεν είναι άμεσα διαθέσιμο, αλλά αυτή η αναμονή θα ισχύει για όλο το διάστημα που είναι ανοιχτό το πρόγραμμα περιήγησης. Επομένως, οποιαδήποτε αναζήτηση για τα στοιχεία στη σελίδα μπορεί να πάρει το χρόνο που έχει οριστεί η σιωπηρή αναμονή.

Ρητή αναμονή ()

  • Ρητή αναμονή χρησιμοποιείται για να παγώσει την εκτέλεση της δοκιμής μέχρι τη στιγμή που πληρούται μια συγκεκριμένη συνθήκη ή μέχρι να παρέλθει το μέγιστο χρονικό διάστημα.

WebdriverΠεριμένετε

  • Μπορεί να χρησιμοποιηθεί για οποιεσδήποτε συνθήκες. Αυτό μπορεί να επιτευχθεί με το WebDriverWait σε συνδυασμό με το ExpectedCondition
  • Ο καλύτερος τρόπος να περιμένετε ένα στοιχείο δυναμικά είναι να ελέγχετε για τη συνθήκη κάθε δευτερόλεπτο και να συνεχίζετε στην επόμενη εντολή στο σενάριο αμέσως μόλις εκπληρωθεί η συνθήκη.

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

Γρήγορη αναμονή

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

Προκλήσεις στον χειρισμό Ajax Call in Selenium Πρόγραμμα οδήγησης Web

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

Παράδειγμα κώδικα για τη χρήση του Ajax HANDLING Selenium Πρόγραμμα οδήγησης Web

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class Ajaxdemo {
	
	private String URL = "https://demo.guru99.com/test/ajax.html";
	
	WebDriver driver;
	WebDriverWait wait;
	
	@BeforeClass
	public void setUp() {
		System.setProperty("webdriver.chrome.driver",".\\chromedriver.exe");
		//create chrome instance
		driver = new ChromeDriver();
		driver.manage().window().maximize();
		driver.navigate().to(URL);
	}
	
	@Test
	public void test_AjaxExample() {

		By container = By.cssSelector(".container");
		wait = new WebDriverWait(driver, 5);
		wait.until(ExpectedConditions.presenceOfElementLocated(container));
		
		//Get the text before performing an ajax call
		WebElement noTextElement = driver.findElement(By.className("radiobutton"));
		String textBefore = noTextElement.getText().trim();
		
		//Click on the radio button
		driver.findElement(By.id("yes")).click();
	
		//Click on Check Button
		driver.findElement(By.id("buttoncheck")).click();
		
		/*Get the text after ajax call*/
		WebElement TextElement = driver.findElement(By.className("radiobutton"));
		wait.until(ExpectedConditions.visibilityOf(TextElement));
		String textAfter = TextElement.getText().trim();
		
		/*Verify both texts before ajax call and after ajax call text.*/
		Assert.assertNotEquals(textBefore, textAfter);
		System.out.println("Ajax Call Performed");
		
		String expectedText = "Radio button is checked and it's value is Yes";
		
		/*Verify expected text with text updated after ajax call*/
		Assert.assertEquals(textAfter, expectedText);
		driver.close();
	}
	
}

Σύνοψη

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