Aggiorna la pagina utilizzando Selenium Webdriver

⚡ Riepilogo intelligente

Aggiornamento di una pagina in Selenium WebDriver ricarica l'attuale URL in modo che ogni elemento venga renderizzato prima dell'esecuzione delle asserzioni e il framework offra cinque comandi distinti che ottengono lo stesso ricaricamento in modi diversi.

  • 🔘 Scelta predefinita: driver.navigate().refresh() è la funzione di ricaricamento integrata, non accetta argomenti e non restituisce alcun valore.
  • ☑️ Varianti ricorsive: Passando getCurrentUrl() a get() o navigate().to() si ricarica lo stesso indirizzo.
  • Percorso della tastiera: La funzione sendKeys accetta Keys.F5 o il valore Unicode \uE035, ma deve puntare a un elemento reale.
  • 🧪 Percorso dello script: JavascriptL'esecutore che esegue location.reload() funziona quando il comando WebDriver è bloccato.
  • Dopo il ricaricamento: Ogni riferimento a un elemento acquisito in precedenza diventa obsoleto e deve essere individuato nuovamente.
  • 📊 Configurazione moderna: Selenium Il gestore è arrivato con la versione 4.6, quindi il percorso del driver non deve più essere impostato manualmente.

Aggiorna la pagina utilizzando Selenium Comandi WebDriver

Durante l'automazione dei test di un'applicazione web, può sorgere la necessità di aggiornare la pagina più volte affinché tutti gli elementi web vengano caricati completamente. Al caricamento iniziale della pagina potrebbero essere caricati solo alcuni elementi web, mentre è necessario un secondo aggiornamento della pagina affinché vengano visualizzati tutti. Questo può essere fatto utilizzando il comando di aggiornamento fornito da Selenium WebDriver.

Come aggiornare la pagina in Selenium

L'operazione di aggiornamento del browser può essere eseguita utilizzando i seguenti metodi: Selenium. Discuteremo i modi indicati di seguito in dettaglio in tutto l'articolo.

  1. comando driver.navigate().refresh()
  2. Ottieni il metodo
  3. Comando Invia chiavi
  4. Metodo Navigazione
  5. driver.navigate().to() comando

1) driver.navigate().refresh() Comando

Questo è il metodo integrato per eseguire un'operazione di aggiornamento della pagina fornito da Selenium WebDriver. Questo comando è il più comunemente utilizzato nell'automazione dei test per eseguire un'operazione di aggiornamento della pagina. Il comando di aggiornamento può essere utilizzato in modo semplice, come descritto di seguito.

driver.get("https://demo.guru99.com/selenium/guru99home/");
driver.navigate().refresh();

L'interfaccia di navigazione viene utilizzata per eseguire diverse operazioni del browser, come la navigazione alla pagina precedente, alla pagina successiva, l'aggiornamento della pagina e la chiusura del browser. I metodi dell'interfaccia di navigazione sono accessibili tramite il comando driver.navigate(). Il metodo refresh dell'interfaccia di navigazione non accetta argomenti e non restituisce alcun valore.

Esempio:

Scenario di prova:

  1. Apri il browser Chrome con la pagina web https://demo.guru99.com/selenium/guru99home/
  2. Una volta caricata correttamente la pagina, aggiorna la pagina web utilizzando il metodo driver.navigate().refresh().
  3. Chiudi il browser utilizzando il metodo driver.close()

Code

package Guru99Demo;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class RefreshDemo {
public static void main(String args[]) throws InterruptedException
{
System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("https://demo.guru99.com/selenium/guru99home/");
driver.manage().window().maximize();
driver.navigate().refresh();
driver.close();
}
}

⚠️ Nota sulla versione: Selenium Manager spedito con Selenium 4.6 e scarica automaticamente il driver del browser corrispondente, quindi la riga System.setProperty sopra riportata non è più necessaria nelle versioni attuali. new ChromeDriver() è sufficiente. La linea originale viene mantenuta perché è ancora corretta per il Selenium 3 stili di configurazione rispetto ai quali è stato scritto l'esempio.

Code Produzione:

Al caricamento iniziale della pagina, la home page demo viene visualizzata come mostrato di seguito.

Guru99 pagina iniziale demo al caricamento iniziale prima dell'esecuzione del comando di aggiornamento

Dopo l'aggiornamento della pagina, il video visualizzato è cambiato, confermando che il ricaricamento è effettivamente avvenuto.

Guru99 pagina iniziale demo dopo driver.navigate().refresh() che mostra un video diverso

Esistono molti altri modi per aggiornare una pagina.

Il metodo di aggiornamento non è l'unico modo per ricaricare la pagina. Le quattro tecniche seguenti producono lo stesso risultato ed è utile conoscerle, perché a volte un'applicazione bloccata o un browser ostinato possono impedirne il corretto funzionamento.

2) Metodo Get

Il metodo `get` può essere utilizzato in modo ricorsivo per aggiornare una pagina. Per fare ciò, è necessario passare un altro metodo come argomento al metodo `get`.

Esempio:

driver.get("https://www.guru99.com");
driver.get(driver.getCurrentUrl());

3) Metodo di navigazione

Questo metodo utilizza lo stesso concetto di ricorsione menzionato in precedenza. Il metodo getCurrentUrl() viene passato come argomento al metodo driver.navigate().to().

Esempio:

driver.get("https://www.guru99.com");
driver.navigate().to(driver.getCurrentUrl());

4) Metodo di invio dei tasti tramite il tasto F5

Questo è il secondo metodo più comunemente utilizzato per aggiornare una pagina SeleniumIl metodo sendKeys accetta il tasto di aggiornamento (F5) come argomento. Poiché sendKeys funziona solo sugli elementi web e non sul browser, è necessario prima identificare un elemento web valido sulla pagina web e quindi utilizzare il metodo sendKeys. Questo può essere fatto come mostrato di seguito.

Esempio:

driver.get("https://www.guru99.com");
driver.findElement(By.id("username")).sendKeys(Keys.F5);

Poiché la pressione del tasto viene inviata a un elemento anziché al browser, questo percorso dipende dall'elemento che detiene il focus. Se l'elemento locator corrisponde a un campo che non può ricevere il focus, il tasto viene ignorato e la pagina non si ricarica mai.

5) Metodo di invio tasti tramite ASCII Code

Questo metodo utilizza lo stesso concetto di cui sopra, ma invece di passare il tasto F5 come argomento, inviamo il punto di codice del tasto di aggiornamento come argomento. Ciò può essere realizzato come mostrato di seguito.

driver.get("https://www.guru99.com");
driver.findElement(By.id("username")).sendKeys("\uE035");

Il valore \uE035 è il punto di codice Unicode di WebDriver che il protocollo mappa a F5, quindi questo frammento e il precedente sono equivalenti.

Come aggiornare una pagina utilizzando JavaScriptExecutor

Ogni browser espone una funzione di ricaricamento agli script della pagina e Selenium può chiamarlo tramite il JavascriptInterfaccia dell'esecutore. Questa è la soluzione di ripiego usuale quando il comando di aggiornamento di WebDriver viene intercettato dall'applicazione o da un'estensione del browser.

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("location.reload();");

Due varianti meritano di essere ricordate:

  1. location.reload() Esegue un normale ricaricamento e può servire la pagina dalla cache.
  2. history.go(0) è un equivalente più vecchio che alcune suite legacy utilizzano ancora.

Il percorso dell'esecutore viene eseguito all'interno della pagina, quindi non attende autonomamente il nuovo documento. Seguitelo con un'attesa esplicita esattamente come fareste dopo driver.navigate().refresh() e ricordate che un ricaricamento guidato da script non cancellerà una finestra di dialogo a livello del browser. Se l'applicazione in fase di test carica il suo contenuto in modo asincrono, si applica la stessa attenzione di quando gestione delle chiamate AJAX in Selenium webdriver.

Come evitare StaleElementReferenceException dopo un aggiornamento

Un aggiornamento distrugge il DOM corrente e ne crea uno nuovo. Ogni WebElement catturato prima del ricaricamento ora punta a un nodo che non esiste più, quindi la successiva chiamata su di esso genera un'eccezione StaleElementReferenceException. Questo è l'errore più comune che si verifica dopo un aggiornamento di pagina.

Tre abitudini eliminano quasi tutti questi fallimenti:

  1. Individuare dopo, mai prima. Memorizza il localizzatore By anziché WebElement e richiama findElement una volta terminato il ricaricamento.
  2. Attendi un segnale reale. Attendere esplicitamente la visibilità di un elemento che esiste solo dopo il ricaricamento è molto più affidabile di un'attesa fissa.
  3. Aggiorna la pagina, poi rileggila. Non utilizzare mai un valore di testo o un attributo acquisito prima del ricaricamento in un'asserzione effettuata successivamente.

Lo schema seguente si applica a tutti e tre:

WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
driver.navigate().refresh();
WebElement search = wait.until(
        ExpectedConditions.visibilityOfElementLocated(By.id("username")));
search.sendKeys("guru99");

WebDriverWait prende una durata in Selenium 4, che rappresenta una modifica rispetto al costruttore in secondi interi utilizzato in Selenium 3. Tecniche più ampie per questi guasti sono trattate nella nostra guida a gestione delle eccezioni in Selenium.

Confronto di Selenium Metodi di aggiornamento della pagina

Tutti e sei i comandi ricaricano la pagina, ma differiscono per ciò da cui dipendono e per il modo in cui falliscono.

Metodo Dipende da Ricarica tramite Quando è la scelta giusta
driver.navigate().refresh() Niente di più Il comando di ricaricamento del browser Quasi sempre — l'impostazione predefinita
driver.get(driver.getCurrentUrl()) Una corrente leggibile URL Una nuova navigazione Quando vuoi anche eliminare la voce della cronologia
driver.navigate().to(driver.getCurrentUrl()) Una corrente leggibile URL Una nuova navigazione Come sopra, scritto tramite l'interfaccia di navigazione
inviaTasti(Tasti.F5) Un elemento focalizzabile Una pressione di un tasto Quando stai testando deliberatamente il percorso della tastiera
sendKeys(“\uE035”) Un elemento focalizzabile Una pressione di un tasto Identico a F5, scritto come punto di codice
JavascriptEsecutore location.reload() Scripting abilitato Uno script di pagina Quando il comando WebDriver è bloccato

Inizia con il comando di aggiornamento e passa a un'altra riga solo quando fallisce per un motivo che comprendi. Lo stesso ordine di preferenza si applica quando ingrandire o ridimensionare la finestra del browser: preferisce la chiamata nativa di WebDriver e considera il percorso script come soluzione di ripiego.

DOMANDE FREQUENTI

Può succedere. Se la pagina corrente è stata generata da una richiesta POST, il browser potrebbe chiedere di reinviare i dati e il ricaricamento si blocca dietro quella finestra di dialogo. Navigando verso la URL Ancora una volta con get() si evita completamente il prompt.

I nomi dei binding sono diversi ma il comando è lo stesso: driver.refresh() in Python, driver.Navigate().Refresh() in C# e driver.navigate().refresh() in JavaTutti e tre emettono la stessa istruzione WebDriver.

No. Un ricaricamento mantiene i cookie, la memoria di sessione e la memoria locale della stessa origine, motivo per cui aggiornare la pagina non è un metodo efficace per ripristinare lo stato. Elimina i cookie esplicitamente o avvia una nuova sessione del browser.

I motori di auto-riparazione risolvono nuovamente un localizzatore da diversi attributi quando il DOM ricaricato non corrisponde più, e i modelli di analisi degli errori raggruppano i problemi di temporizzazione del ricaricamento in modo che il team risolva un'attesa anziché cinquanta test.

Sì, e la chiamata di aggiornamento su una singola riga è un suggerimento che funziona sempre correttamente. L'attesa che deve seguirla è dove i suggerimenti possono sbagliare, quindi verifica qualsiasi timeout generato confrontandolo con il tempo di caricamento effettivo dell'applicazione.

Non esiste un comando dedicato. I team lo simulano inviando contemporaneamente Ctrl e F5 tramite la classe Actions, oppure disabilitando la cache tramite le opzioni del browser, che è la soluzione più affidabile.

Non con il comando di aggiornamento, che ricarica sempre il documento in primo piano. Passa al frame e ricaricalo con uno script, oppure reimposta il suo attributo sorgente, quindi torna al contenuto predefinito.

Non affidarti a supposizioni con un ritardo fisso. Utilizza un'attesa esplicita da dieci a trenta secondi su una condizione che risulti vera solo dopo il ricaricamento, in modo che il test riprenda non appena la pagina è pronta.

Riassumi questo post con: