implicit explicit wait selenium webdriver
Impara l'attesa implicita ed esplicita in Selenium WebDriver:
Nel precedente tutorial abbiamo cercato di farti conoscere i vari Looping e operazioni condizionali di WebDriver . Questi metodi condizionali spesso si occupano di quasi tutti i tipi di opzioni di visibilità per gli elementi web.
Andando avanti in questo serie di formazione gratuita sul selenio , noi discuteremo diversi tipi di attesa forniti dal Selenium WebDriver . Discuteremo anche di v arie tipologie di opzioni di navigazione disponibile in WebDriver.
Le attese aiutano l'utente a risolvere i problemi durante il reindirizzamento a diverse pagine Web aggiornando l'intera pagina Web e ricaricando il nuovo elementi web. A volte ci possono essere anche chiamate Ajax. Pertanto, è possibile visualizzare un ritardo durante il caricamento delle pagine Web e il riflesso degli elementi Web.
Gli utenti si trovano spesso a navigare in varie pagine web avanti e indietro. Pertanto, i comandi / metodi navigate () forniti dal WebDriver aiutano l'utente a simulare gli scenari in tempo reale navigando tra le pagine web con riferimento alla cronologia del browser web.
WebDriver fornisce all'utente due tipi di attese per gestire il caricamento ricorrente della pagina s, caricamenti di elementi web, l'aspetto di finestre, pop-up e messaggi di errore e riflesso di elementi web sulla pagina web.
- Attesa implicita
- Attesa esplicita
Discutiamo ciascuno di essi in dettaglio considerando l'approccio pratico.
Cosa imparerai:
- Attesa implicita di WebDriver
- WebDriver Explicit Wait
- Condizione prevista
- Navigazione tramite WebDriver
- Conclusione
- Lettura consigliata
Attesa implicita di WebDriver
Le attese implicite vengono utilizzate per fornire un tempo di attesa predefinito (ad esempio 30 secondi) tra ogni passaggio / comando di test consecutivo nell'intero script di test. Pertanto, la fase di test successiva verrà eseguita solo quando sono trascorsi i 30 secondi dall'esecuzione della fase / comando di test precedente.
Note chiave
- L'attesa implicita è una singola riga di un codice e può essere dichiarata nel metodo di installazione dello script di test.
- Rispetto all'attesa esplicita, l'attesa implicita è trasparente e senza complicazioni. La sintassi e l'approccio sono più semplici dell'attesa esplicita.
Essendo facile e semplice da applicare, l'attesa implicita presenta anche alcuni inconvenienti. Dà origine al tempo di esecuzione dello script di test poiché ciascuno dei comandi dovrebbe essere interrotto per un periodo di tempo stabilito prima di riprendere l'esecuzione.
Pertanto, per risolvere questo problema, WebDriver introduce attese esplicite in cui è possibile applicare in modo esplicito le attese ogni volta che si verifica la situazione invece di attendere forzatamente durante l'esecuzione di ciascuno dei passaggi del test.
Dichiarazioni di importazione
importare java.util.concurrent.TimeUnit - Per essere in grado di accedere e applicare l'attesa implicita nei nostri script di test, siamo obbligati a importare questo pacchetto nel nostro script di test.
Sintassi
drv .manage (). timeouts (). implicitlyWait (10, TimeUnit. SECONDI );
Includere la riga di codice precedente nello script di test subito dopo l'istanza della variabile di istanza WebDriver. Quindi, questo è tutto ciò che è necessario per impostare un'attesa implicita nello script di test.
Procedura dettagliata del codice
L'attesa implicita impone di passare due valori come parametri. Il primo argomento indica il tempo nelle cifre numeriche che il sistema deve attendere. Il secondo argomento indica la scala di misurazione del tempo. Pertanto, nel codice precedente, abbiamo menzionato i '30' secondi come tempo di attesa predefinito e l'unità di tempo è stata impostata su 'secondi'.
WebDriver Explicit Wait
Le attese esplicite vengono utilizzate per interrompere l'esecuzione finché non viene soddisfatta una determinata condizione o è trascorso il tempo massimo. A differenza delle attese implicite, le attese esplicite vengono applicate solo a un'istanza particolare.
WebDriver introduce classi come WebDriverWait e ExpectedConditions per applicare attese esplicite negli script di test. Nell'ambito di questa discussione, useremo 'gmail.com' come esempio.
Scenario da automatizzare
- Avvia il browser web e apri 'gmail.com'
- Immettere un nome utente valido
- Immettere una password valida
- Fare clic sul pulsante di accesso
- Attendi che il pulsante Scrivi sia visibile dopo il caricamento della pagina
Codice WebDriver che utilizza l'attesa esplicita
Si prega di notare che per la creazione di script, avremmo utilizzato il progetto 'Learning_Selenium' creato nei precedenti tutorial.
Passo 1 : Crea una nuova classe java denominata 'Wait_Demonstration' nel progetto 'Learning_Selenium'.
Passo 2 : Copia e incolla il codice seguente nella classe 'Wait_Demonstration.java'.
Di seguito è riportato lo script di test che è equivalente allo scenario sopra menzionato.
import static org.junit.Assert.*; import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; public class Wait_Demonstration { // created reference variable for WebDriver WebDriver drv; @Before public void setup() throws InterruptedException { // initializing drv variable using FirefoxDriver drv=new FirefoxDriver(); // launching gmail.com on the browser drv.get('https://gmail.com'); // maximized the browser window drv.manage().window().maximize(); drv.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); } @Test public void test() throws InterruptedException { // saving the GUI element reference into a 'username' variable of WebElement type WebElement username = drv.findElement(By.id('Email')); // entering username username.sendKeys('shruti.shrivastava.in'); // entering password drv.findElement(By.id('Passwd')).sendKeys('password'); // clicking signin button drv.findElement(By.id('signIn')).click(); // explicit wait - to wait for the compose button to be click-able WebDriverWait wait = new WebDriverWait(drv,30); wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath('//div(contains(text(),'COMPOSE'))'))); // click on the compose button as soon as the 'compose' button is visible drv.findElement(By.xpath('//div(contains(text(),'COMPOSE'))')).click(); } @After public void teardown() { // closes all the browser windows opened by web driver drv.quit(); } }
Dichiarazioni di importazione
- importare org. openqa.selenium.support.ui.ExpectedConditions
- importare org. openqa.selenium.support.ui.WebDriverWait
- Importare i pacchetti sopra prima della creazione dello script. I pacchetti fanno riferimento alla classe Select, necessaria per gestire il menu a discesa.
Creazione di istanze di oggetti per la classe WebDriverWait
WebDriverWait wait = nuovo WebDriverWait ( drv , 30);
Creiamo una variabile di riferimento 'wait' per la classe WebDriverWait e la istanziamo utilizzando l'istanza WebDriver e il tempo di attesa massimo per l'esecuzione fino al licenziamento. Il tempo di attesa massimo indicato è misurato in 'secondi'.
La creazione di istanze di WebDriver è stata discussa nelle esercitazioni iniziali di WebDriver.
Condizione prevista
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath('//div(contains(text(),'COMPOSE'))'))); drv.findElement(By.xpath('//div(contains(text(),'COMPOSE'))')).click();
Il comando precedente attende che si verifichi una quantità di tempo stabilita o una condizione prevista, a seconda di quale si verifica o scade prima.
Pertanto, per poterlo fare, utilizziamo la variabile di riferimento 'wait' della classe WebDriverWait creata nel passaggio precedente con la classe ExpectedConditions e una condizione effettiva che ci si aspetta si verifichi. Pertanto, non appena si verifica la condizione prevista, il controllo del programma si sposta alla fase di esecuzione successiva invece di attendere forzatamente per tutti i 30 secondi.
Nel nostro esempio, aspettiamo che il pulsante 'componi' sia presente e caricato come parte del caricamento della home page e quindi procediamo con la chiamata del comando clic sul pulsante 'componi'.
Tipi di condizioni previste
La classe ExpectedConditions fornisce un grande aiuto per gestire scenari in cui dobbiamo accertare che si verifichi una condizione prima di eseguire l'effettiva fase di test.
La classe ExpectedConditions viene fornita con un'ampia gamma di condizioni previste a cui è possibile accedere con l'aiuto della variabile di riferimento WebDriverWait e del metodo until ().
Parliamone a lungo su alcuni di essi:
# 1) elementToBeClickable () - La condizione prevista attende che un elemento sia cliccabile, ovvero dovrebbe essere presente / visualizzato / visibile sullo schermo oltre che abilitato.
Codice di esempio
wait.until (ExpectedConditions.elementToBeClickable (By.xpath ( '// div (contiene (text (),’ COMPOSE ’))' )));
# 2) textToBePresentInElement () - La condizione prevista attende un elemento con un determinato schema di stringa.
Codice di esempio
wait.until (ExpectedConditions.textToBePresentInElement (By.xpath ( '// div (@ id =‘ forgotPass ''),' text to be found ' ));
gateway predefinito non trovato windows 10
# 3) alertIsPresent () - La condizione prevista attende la visualizzazione di una casella di avviso.
Codice di esempio
wait.until (ExpectedConditions.alertIsPresent ())! = null);
# 4) titleIs () - La condizione prevista attende una pagina con un titolo specifico.
Codice di esempio
wait.until (ExpectedConditions.titleIs ( 'Gmail' ));
# 5) frameToBeAvailableAndSwitchToIt () - La condizione prevista attende che un frame sia disponibile e quindi non appena il frame è disponibile, il controllo passa automaticamente ad esso.
Codice di esempio
wait.until (ExpectedConditions.frameToBeAvailableAndSwitchToIt (By.id (' newframe ')));
Esiste un'azione utente molto comune in cui l'utente fa clic sui pulsanti avanti e indietro del browser web avanti e indietro per navigare nelle diverse pagine web visitate nella sessione corrente nella cronologia del browser. Pertanto, per simulare tali azioni eseguite dagli utenti, WebDriver introduce i comandi Navigate.
Esaminiamo questi comandi in dettaglio:
# 1) naviga (). Indietro ()
Questo comando consente all'utente di navigare alla pagina web precedente.
Codice di esempio:
driver.navigate (). back ();
Il comando precedente non richiede parametri e riporta l'utente alla pagina web precedente nella cronologia del browser web.
# 2) naviga (). Avanti ()
Questo comando consente all'utente di passare alla pagina web successiva con riferimento alla cronologia del browser.
Codice di esempio:
driver.navigate (). forward ();
Il comando precedente non richiede parametri e porta l'utente alla pagina web successiva nella cronologia del browser web.
# 3) navigare (). Refresh ()
Questo comando consente all'utente di aggiornare la pagina web corrente ricaricando così tutti gli elementi web.
Codice di esempio:
driver.navigate (). refresh ();
Il comando precedente non richiede parametri e ricarica la pagina web.
# 4) passare da (). A ()
Questo comando consente all'utente di avviare una nuova finestra del browser Web e di accedere all'URL specificato.
Codice di esempio:
driver.navigate (). to ('http://google.com');
Il comando precedente richiede un URL Web come parametro e quindi apre l'URL specificato in un browser Web appena avviato.
Conclusione
In questo Attesa implicita ed esplicita nel tutorial Selenium WebDriver , abbiamo cercato di farti conoscere le attese di WebDriver. Abbiamo discusso ed esercitato sia l'attesa esplicita che quella implicita. Allo stesso tempo, abbiamo anche discusso i diversi comandi di navigazione.
Ecco i punti cruciali di questo articolo:
- WebDriver consente all'utente di scegliere tra le attese disponibili per gestire situazioni in cui il flusso di esecuzione può richiedere uno sleep per alcuni secondi per caricare gli elementi web o per soddisfare una specifica condizione. Sono disponibili due tipi di attese in WebDriver.
- Attesa implicita
- Attesa esplicita
- Attese implicite vengono utilizzati per fornire un tempo di attesa predefinito tra ogni passaggio / comando di test consecutivo nell'intero script di test. Pertanto, la fase di test successiva verrà eseguita solo quando è trascorso il periodo di tempo specificato dopo l'esecuzione della fase / comando di test precedente.
- Attese esplicite vengono utilizzati per interrompere l'esecuzione fino a quando non viene soddisfatta una determinata condizione o non è trascorso il tempo massimo. A differenza delle attese implicite, le attese esplicite vengono applicate solo a un'istanza particolare.
- WebDriver introduce classi come WebDriverWait e ExpectedConditions per applicare attese esplicite
- ExpectedConditions class fornisce un grande aiuto per affrontare gli scenari in cui dobbiamo accertarci che si verifichi una condizione prima di eseguire l'effettiva fase di test.
- La classe ExpectedConditions viene fornita con un'ampia gamma di condizioni previste a cui è possibile accedere con l'aiuto della variabile di riferimento WebDriverWait e del metodo until ().
- Metodi Navigate () I comandi / vengono utilizzati per simulare il comportamento dell'utente durante la navigazione tra le varie pagine Web avanti e indietro.
Prossimo tutorial n. 16 : Passando all'esercitazione successiva nell'elenco, renderemo gli utenti familiari con i vari tipi di avvisi che possono apparire durante l'accesso ai siti Web e i loro approcci di gestione in WebDriver. I tipi di avvisi su cui ci concentreremo sono principalmente: popup di avviso basati su finestre e popup di avviso basati sul web. Poiché sappiamo che la gestione dei pop-up basati su Windows va oltre le capacità di WebDriver, quindi utilizzeremmo anche alcune utilità di terze parti per gestire i pop-up delle finestre.
Nota per i lettori : Fino ad allora, i lettori possono automatizzare gli scenari con vari caricamenti di pagine ed elementi dinamici che compaiono sullo schermo utilizzando le varie condizioni previste e comandi di navigazione.
Lettura consigliata
- Esercitazione sul selenio di cetriolo: integrazione con WebDriver di selenio Java di cetriolo
- Introduzione a Selenium WebDriver - Selenium Tutorial # 8
- Implementazione del nostro primo script WebDriver - Selenium WebDriver Tutorial # 10
- Domande frequenti sul selenio
- Come gestire avvisi / popup in Selenium WebDriver - Selenium Tutorial # 16
- Guida per generare report di estensione in Selenium WebDriver
- Come eseguire Selenium WebDriver in diversi browser popolari
- WebDriver intera configurazione e installazione con Eclipse - Selenium Tutorial # 9