Come gestire la chiamata AJAX in Selenium Webdriver

Sommario:

Anonim

Cos'è l'Ajax?

AJAX sta per Asynchronous JavaScript & XML e consente alla pagina Web di recuperare piccole quantità di dati dal server senza ricaricare l'intera pagina.

Ajax è una tecnica utilizzata per creare pagine web veloci e dinamiche. Questa tecnica è asincrona e utilizza una combinazione di Javascript e XML.

Aggiorna la parte / le parti di una pagina web senza ricaricare l'intera pagina.

Alcune delle famose applicazioni che utilizzano la tecnica AJAX sono Gmail, Google Maps, Facebook, Youtube, ecc.

In questo tutorial imparerai-

  • Cos'è l'Ajax?
  • Come funziona Ajax?
  • Come gestire le chiamate Ajax utilizzando Selenium Webdriver
  • Sfide nella gestione della chiamata Ajax in Selenium Webdriver

Come funziona Ajax?

Ad esempio, quando si fa clic sul pulsante di invio, JavaScript farà una richiesta al server, interpreterà il risultato e aggiornerà la schermata corrente senza ricaricare la pagina web.

  • Una chiamata Ajax è una richiesta asincrona avviata dal browser che non si traduce direttamente in una transizione di pagina. Significa che, se lanci una richiesta Ajax, l'utente può ancora lavorare sull'applicazione mentre la richiesta è in attesa di una risposta.
  • AJAX invia richieste HTTP dal client al server e quindi elabora la risposta del server, senza ricaricare l'intera pagina. Quindi, quando effettui una chiamata AJAX, non sei abbastanza sicuro del tempo impiegato dal server per inviarti una risposta .

Dal punto di vista di un tester, se stai controllando il contenuto o l'elemento da visualizzare, devi aspettare di ottenere la risposta. Durante la chiamata AJAX i dati vengono memorizzati in formato XML e recuperati dal server.

Come gestire le chiamate Ajax utilizzando Selenium Webdriver

La sfida più grande nella gestione delle chiamate Ajax è conoscere il tempo di caricamento della pagina web. Poiché il caricamento della pagina web durerà solo per una frazione di secondi, è difficile per il tester testare tale applicazione tramite lo strumento di automazione. Per questo, Selenium Webdriver deve utilizzare il metodo wait su questa chiamata Ajax.

Quindi, eseguendo questo comando di attesa, il selenio sospenderà l'esecuzione del Test Case corrente e attenderà il valore previsto o nuovo. Quando viene visualizzato il nuovo valore o campo, i casi di test sospesi verranno eseguiti da Selenium Webdriver.

Di seguito sono riportati i metodi di attesa che Selenium Webdriver può utilizzare

  1. Thread.Sleep ()
  • Thread.Sleep () non è una scelta saggia in quanto sospende il thread corrente per il periodo di tempo specificato.
  • In AJAX, non puoi mai essere sicuro del tempo di attesa esatto. Quindi, il tuo test fallirà se l'elemento non verrà visualizzato entro il tempo di attesa. Inoltre, aumenta l'overhead perché la chiamata Thread.sleep (t) fa sì che il thread corrente venga spostato dalla coda in esecuzione alla coda in attesa.
  • Dopo che è stato raggiunto il tempo "t", il thread corrente si sposterà dalla coda di attesa a quella pronta, quindi impiegherà un po 'di tempo per essere selezionato dalla CPU ed essere in esecuzione.
  1. Attesa implicita ()
  • Questo metodo dice al webdriver di attendere se l'elemento non è disponibile immediatamente, ma questa attesa sarà attiva per tutto il tempo in cui il browser è aperto. Pertanto, qualsiasi ricerca degli elementi nella pagina potrebbe richiedere il tempo per cui è impostata l'attesa implicita.
  1. Attesa esplicita ()
  • L'attesa esplicita viene utilizzata per congelare l'esecuzione del test fino al momento in cui viene soddisfatta una determinata condizione o al termine massimo.
  1. WebdriverWait
  • Può essere utilizzato per qualsiasi condizione. Ciò può essere ottenuto con WebDriverWait in combinazione con ExpectedCondition
  • Il modo migliore per attendere dinamicamente un elemento è controllare la condizione ogni secondo e passare al comando successivo nello script non appena la condizione viene soddisfatta.

Ma il problema con tutte queste attese è che devi menzionare l'unità di timeout. E se l'elemento non fosse ancora presente nel tempo? Quindi c'è un'altra attesa chiamata Fluent wait.

  1. Aspetta fluente
  • Questa è un'implementazione dell'interfaccia di attesa con il suo timeout e l'intervallo di polling. Ogni istanza di FluentWait determina il tempo massimo di attesa per una condizione, nonché la frequenza con cui controllare la condizione.

Sfide nella gestione della chiamata Ajax in Selenium Webdriver

  • L'utilizzo del comando "pause" per la gestione della chiamata Ajax non è completamente affidabile. Un lungo tempo di pausa rende il test inaccettabilmente lento e aumenta il tempo di test. Invece, "waitforcondition" sarà più utile nel testare le applicazioni Ajax.
  • È difficile valutare il rischio associato a particolari applicazioni Ajax
  • La piena libertà agli sviluppatori di modificare l'applicazione Ajax rende il processo di test impegnativo
  • La creazione di richieste di test automatizzate può essere difficile per gli strumenti di test, poiché tali applicazioni AJAX spesso utilizzano tecniche di codifica o serializzazione diverse per inviare i dati POST.

Un esempio per la MANIPOLAZIONE Ajax

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;classe pubblica Ajaxdemo {URL stringa privata = "http://demo.guru99.com/test/ajax.html";Driver WebDriver;WebDriverWait wait;@Prima della lezionepublic void setUp () {System.setProperty ("webdriver.chrome.driver", ". \\ chromedriver.exe");// crea un'istanza di chromedriver = nuovo ChromeDriver ();driver.manage (). window (). maxim ();driver.navigate (). to (URL);}@Testpublic void test_AjaxExample () {By container = By.cssSelector (". Container");wait = new WebDriverWait (driver, 5);wait.until (ExpectedConditions.presenceOfElementLocated (container));// Recupera il testo prima di eseguire una chiamata ajaxWebElement noTextElement = driver.findElement (By.className ("radiobutton"));String textBefore = noTextElement.getText (). Trim ();// Fare clic sul pulsante di opzionedriver.findElement (By.id ("yes")). click ();// Fare clic sul pulsante di controllodriver.findElement (By.id ("buttoncheck")). click ();/ * Ricevi il testo dopo la chiamata ajax * /WebElement TextElement = driver.findElement (By.className ("radiobutton"));wait.until (ExpectedConditions.visibilityOf (TextElement));String textAfter = TextElement.getText (). Trim ();/ * Verifica entrambi i messaggi prima della chiamata ajax e dopo il testo della chiamata ajax. * /Assert.assertNotEquals (textBefore, textAfter);System.out.println ("Chiamata Ajax eseguita");String expectedText = "Il pulsante di opzione è selezionato e il suo valore è Sì";/ * Verifica il testo previsto con il testo aggiornato dopo la chiamata ajax * /Assert.assertEquals (textAfter, expectedText);driver.close ();}}

Sommario:

  • AJAX consente alla pagina Web di recuperare piccole quantità di dati dal server senza ricaricare l'intera pagina.
  • Per testare l'applicazione Ajax, dovrebbero essere applicati diversi metodi di attesa
    • ThreadSleep
    • Attesa implicita
    • Attesa esplicita
    • WebdriverWait
    • Aspetta fluente
  • La creazione di richieste di test automatizzate può essere difficile per gli strumenti di test, poiché tali applicazioni AJAX spesso utilizzano tecniche di codifica o serializzazione diverse per inviare i dati POST.