Selenium Webdriver Java Esempio di programma

โšก Riepilogo intelligente

Selenium webdriver Java L'esempio di programma ti guida attraverso il tuo primo script di automazione completo. LessQuesto documento illustra la configurazione dell'ambiente, l'individuazione degli elementi, l'invio di input, la navigazione, la convalida, le attese, la gestione delle eccezioni e le migliori pratiche per test WebDriver affidabili.

  • โš™๏ธ Configurazione dell'ambiente: Installazione Java, Eclipse o IntelliJ, configura Selenium e selezionare il file binario del driver corretto per la versione del browser in uso.
  • ๐Ÿงญ Localizzatori degli elementi: Utilizza ID, nome, classe, XPath, selettore CSS e linkText per identificare gli elementi in modo stabile su diversi browser e versioni.
  • ๏ธ Azioni e input: WebDriver supporta gli eventi click, sendKeys, submit, select dropdowns e keyboard per un'interazione completa in stile utente.
  • โณ Attese intelligenti: Sostituisci Thread.sleep con attese implicite, esplicite e fluide gestite da ExpectedConditions per eliminare i test instabili.
  • ???? La gestione delle eccezioni: Gestisci le eccezioni NoSuchElementException, TimeoutException e StaleElementReferenceException per garantire la resilienza delle suite di automazione.
  • ๐Ÿค– Generazione di test tramite IA: Gli assistenti basati sull'IA generano script WebDriver standard, suggeriscono localizzatori e correggono automaticamente i selettori quando il DOM cambia.

Selenium webdriver Java Programma

Selenium Java Esempio

Usando il Java class โ€œmyclassโ€ che abbiamo creato nel tutorial precedente, proviamo a creare uno script WebDriver che:

Passo 1: andare a prendere Mercury Home page dei tour
Passo 2: verificarne il titolo
Passo 3: stampare il risultato del confronto
Passo 4: chiuderlo prima di terminare l'intero programma.

Selenium Esempio di WebDriver Code

Di seguito รจ riportato il codice WebDriver effettivo per la logica presentata dallo scenario precedente

package newproject;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
//comment the above line and uncomment below line to use Chrome
//import org.openqa.selenium.chrome.ChromeDriver;
public class PG1 {


    public static void main(String[] args) {
        // declaration and instantiation of objects/variables
    	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");
		WebDriver driver = new FirefoxDriver();
		//comment the above 2 lines and uncomment below 2 lines to use Chrome
		//System.setProperty("webdriver.chrome.">driver","G:\\chromedriver.exe");
		//WebDriver driver = new ChromeDriver();
    	
        String baseUrl = "https://demo.guru99.com/test/newtours/";
        String expectedTitle = "Welcome: Mercury Tours";
        String actualTitle = "";

        // launch Fire fox and direct it to the Base URL
        driver.get(baseUrl);

        // get the actual value of the title
        actualTitle = driver.getTitle();

        /*
         * compare the actual title of the page with the expected one and print
         * the result as "Passed" or "Failed"
         */
        if (actualTitle.contentEquals(expectedTitle)){
            System.out.println("Test Passed!");
        } else {
            System.out.println("Test Failed");
        }
       
        //close Fire fox
        driver.close();
    }

}

Nota: avvio Firefox 35, รจ necessario utilizzare il driver gecko creato da Mozilla per utilizzare Web Driver. Selenium 3.0, gecko e firefox hanno problemi di compatibilitร  e impostarli correttamente potrebbe diventare un compito arduo. Se il codice non funziona, esegui il downgrade a Firefox versione 47 o precedente. In alternativa, puoi eseguire i tuoi script su Chrome. Selenium funziona subito per Chrome. Devi solo cambiare 3 righe di codice per far funzionare il tuo script con Chrome o Firefox

Spiegazione del codice

Importazione di pacchetti

Per iniziare, รจ necessario importare i due pacchetti seguenti:

  1. org.openqa.selenio.*โ€“ contiene la classe WebDriver necessaria per istanziare un nuovo browser caricato con un driver specifico
  2. org.openqa.selenium.firefox.FirefoxGuidatore โ€“ contiene il FirefoxClasse driver necessaria per istanziare a Firefox-driver specifico sul browser istanziato dalla classe WebDriver

Se il tuo test richiede azioni piรน complicate come accedere a un'altra classe, acquisire schermate del browser o manipolare file esterni, sicuramente dovrai importare piรน pacchetti.

Istanziare oggetti e variabili

Normalmente, questo รจ il modo in cui viene istanziato un oggetto driver.

WebDriver driver = new FirefoxDriver();

A FirefoxLa classe driver senza parametri indica che il file default Firefox il profilo sarร  lanciato dal ns Java programma. Il valore predefinito Firefox il profilo รจ simile al lancio Firefox in modalitร  provvisoria (non vengono caricate estensioni).

Per comoditร , abbiamo salvato la Base URL e il titolo previsto come variabili.

Avvio di una sessione del browser

WebDriver ottenere () il metodo viene utilizzato per avviare una nuova sessione del browser e la indirizza al URL che specifichi come parametro.

driver.get(baseUrl);

Ottieni il titolo effettivo della pagina

La classe WebDriver ha l'estensione getTitle () metodo che viene sempre utilizzato per ottenere il titolo della pagina attualmente caricata.

actualTitle = driver.getTitle();

Confrontare i valori attesi e reali

Questa parte del codice utilizza semplicemente un basic Java struttura if-else per confrontare il titolo effettivo con quello previsto.

if (actualTitle.contentEquals(expectedTitle)){
            System.out.println("Test Passed!");
        } else {
            System.out.println("Test Failed");
        }

Terminare una sessione del browser

Il "vicino()"Il metodo viene utilizzato per chiudere la finestra del browser.

driver.close();

Interruzione dell'intero programma

Se si utilizza questo comando senza prima chiudere tutte le finestre del browser, l'intero Java il programma terminerร  lasciando aperta la finestra del browser.

System.exit(0);

Esecuzione del test

Esistono due modi per eseguire il codice Eclipse SDI.

  1. On Eclipsebarra dei menu, fare clic su Esegui > Esegui.
  2. Stampa Ctrl + F11 per eseguire l'intero codice.

Esecuzione del test

Se hai fatto tutto correttamente, Eclipse produrrebbe "Test superato!"

Esecuzione del test

Individuazione degli elementi della GUI

L'individuazione degli elementi in WebDriver avviene utilizzando il comando "findElement(Di.locator())" metodo. La parte "locatore" del codice รจ uguale a qualsiasi locatore precedentemente discusso nel file Selenium IDE capitoli di questi tutorial. Infatti, si consiglia di individuare gli elementi della GUI utilizzando l'IDE e, una volta identificati con successo, esportare il codice su WebDriver.

Ecco un Selenium Esempio di codice che individua un elemento tramite il suo ID. Facebook viene utilizzato come base. URL.

package newproject;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class PG2 {
    public static void main(String[] args) {
    	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");
    	WebDriver driver = new FirefoxDriver();
        String baseUrl = "http://www.facebook.com";
        String tagName = "";
        
        driver.get(baseUrl);
        tagName = driver.findElement(By.id("email")).getTagName();
        System.out.println(tagName);
        driver.close();
        System.exit(0);
}
}

Abbiamo usato il getNomeTag() metodo per estract il nome del tag di quell'elemento particolare il cui id รจ "email". Quando eseguito, questo codice dovrebbe essere in grado di identificare correttamente il nome del tag "input" e lo stamperร  su Eclipsefinestra della Console.

Individuazione degli elementi della GUI

Riepilogo per la localizzazione degli elementi

Variazione Descrizione Campione
Per.nomeclasse trova gli elementi in base al valore dell'attributo โ€œclassโ€. findElement(By.className("someClassName"))
By.cssSelector trova gli elementi in base al motore di selezione CSS sottostante del driver findElement(By.cssSelector(โ€œinput#emailโ€))
Per.id individua gli elementi in base al valore del loro attributo "id". findElement(By.id("someId"))
 
By.linkText trova un elemento di collegamento in base al testo esatto che visualizza findElement(By.linkText(โ€œREGISTRAZIONEโ€))
 
Per nome individua gli elementi in base al valore dell'attributo "nome". findElement(Per.nome("qualcheNome"))
 
Per.partialLinkText individua gli elementi che contengono il testo del collegamento specificato findElement(By.partialLinkText("REG"))
 
Per.nometag individua gli elementi in base al nome del tag findElement(By.tagName("div"))
 
Per.xpath individua gli elementi tramite XPath findElement(By.xpath(โ€œ//html/body/div/table/tbody/tr/td[2]/table/
tbody/tr[4]/td/table/tbody/tr/td[2]/table/tbody/tr[2]/td[3]/ form/table/tbody/tr[5]โ€))

Nota sull'uso di findElement(By.cssSelector())

By.cssSelector() non supporta la funzione "contiene". Considera il Selenium Codice IDE di seguito:

Nota sull'uso di findElement(By.cssSelector())

In Selenium IDE sopra, l'intero test รจ stato superato. Tuttavia nel Selenium WebDriver di seguito, lo stesso test ha generato un errore perchรฉ WebDriver non supporta la parola chiave "contiene" quando utilizzata nel metodo By.cssSelector().

Nota sull'uso di findElement(By.cssSelector())

Comandi comuni

Istanziazione di elementi Web

Invece di utilizzare la lunga sintassi โ€œdriver.findElement(By.locator())โ€ ogni volta che si accede a un particolare elemento, possiamo istanziare un oggetto WebElement per esso. La classe WebElement รจ contenuta nel pacchetto โ€œorg.openqa.selenium.*โ€.

Istanziazione di elementi Web

Facendo clic su un elemento

Fare clic รจ forse il modo piรน comune di interagire con gli elementi web. IL click() metodo viene utilizzato per simulare il clic di qualsiasi elemento. Il seguente Selenium Java l'esempio mostra come click() รจ stato utilizzato per fare clic su Mercury Pulsante "Accedi" di Tours.

Facendo clic su un elemento

Quando si utilizza il metodo click() รจ necessario tenere presente quanto segue.

  • Non richiede alcun parametro/argomento.
  • Il metodo attende automaticamente il caricamento di una nuova pagina, se applicabile.
  • L'elemento su cui cliccare deve essere visibile (altezza e larghezza non devono essere uguali a zero).

Ottieni comandi

I comandi Get recuperano varie informazioni importanti sulla pagina/elemento. Ecco alcuni importanti comandi "get" con cui devi avere familiaritร .

Comandi Impiego
ottenere ()

Esempio di utilizzo:

  • Apre automaticamente una nuova finestra del browser e recupera la pagina specificata tra parentesi.
  • รˆ la controparte di Selenium Il comando "apri" dell'IDE.
  • Il parametro deve essere a Corda oggetto.
getTitle ()

Esempio di utilizzo:

  • Non ha bisogno di parametri
  • Recupera il titolo della pagina corrente
  • Gli spazi bianchi iniziali e finali vengono tagliati
  • Restituisce una stringa nulla se la pagina non ha titolo
getPageSource()

Esempio di utilizzo:

  • Non ha bisogno di parametri
  • Restituisce il codice sorgente della pagina come valore String
getCurrentUrl()

Esempio di utilizzo:

  • Non ha bisogno di parametri
  • Recupera la stringa che rappresenta l'attuale URL che il browser sta guardando
getText ()

Esempio di utilizzo:

  • Recupera il testo interno dell'elemento specificato

Comandi di navigazione

Questi comandi ti consentono di aggiornare, accedere e passare avanti e indietro tra le diverse pagine web.

navigare verso()

Esempio di utilizzo:

  • Apre automaticamente una nuova finestra del browser e recupera la pagina specificata tra parentesi.
  • Fa esattamente la stessa cosa di get() metodo.
naviga().refresh()

Esempio di utilizzo:

  • Non ha bisogno di parametri.
  • Aggiorna la pagina corrente.
naviga().back()

Esempio di utilizzo:

  • Non ha bisogno di parametri
  • Ti riporta indietro di una pagina nella cronologia del browser.
naviga().avanti()

Esempio di utilizzo:

  • Non ha bisogno di parametri
  • Ti porta avanti di una pagina nella cronologia del browser.

Chiusura e chiusura del browser Windows

vicino()

Esempio di utilizzo:

  • Non ha bisogno di parametri
  • Chiude solo la finestra del browser attualmente controllata da WebDriver.
smettere()

Esempio di utilizzo:

  • Non ha bisogno di parametri
  • Chiude tutte le finestre aperte da WebDriver.

Chiusura e chiusura del browser Windows

Per illustrare chiaramente la differenza tra close() and quit(), prova a eseguire il codice seguente. Utilizza una pagina Web che apre automaticamente una finestra al caricamento della pagina e ne apre un'altra dopo l'uscita.

Chiusura e chiusura del browser Windows

Si noti che รจ stata chiusa solo la finestra del browser principale e non le due finestre pop-up.

Chiusura e chiusura del browser Windows

Ma se usi quit(), tutte le finestre saranno chiuse, non solo quella padre. Prova a eseguire il codice qui sotto e noterai che anche i due pop-up sopra saranno chiusi automaticamente.

package newproject;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class PG3 {
    public static void main(String[] args) {
    	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");
    	WebDriver driver = new FirefoxDriver();
        driver.get("http://www.popuptest.com/popuptest2.html");
        driver.quit();  // using QUIT all windows will close
    }
}

Passaggio da un fotogramma all'altro

Per accedere agli elementi della GUI in un frame, dovremmo prima indirizzare WebDriver a concentrarsi sul frame o sulla finestra pop-up prima di poter accedere agli elementi al loro interno. Prendiamo ad esempio la pagina web https://demo.guru99.com/selenium/deprecated.html

Passaggio da un fotogramma all'altro

Questa pagina ha 3 frame i cui attributi "nome" sono indicati sopra. Desideriamo accedere al collegamento "Deprecato" cerchiato sopra in giallo. Per fare ciรฒ, dobbiamo prima istruire WebDriver a passare al frame โ€œclassFrameโ€ utilizzando il file โ€œswitchTo().frame()โ€ metodo. Utilizzeremo l'attributo name del frame come parametro per la parte โ€œframe()โ€.

package newproject;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class PG4 {
	  public static void main(String[] args) {
		  	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");  
		  	WebDriver driver = new FirefoxDriver();
	        driver.get("https://demo.guru99.com/selenium/deprecated.html");
	        driver.switchTo().frame("classFrame");
	        driver.findElement(By.linkText("Deprecated")).click();
	        driver.close(); 
	    }
}

Dopo aver eseguito questo codice, vedrai che il frame "classFrame" viene portato alla pagina "API deprecata", il che significa che il nostro codice รจ riuscito ad accedere con successo al collegamento "Deprecated".

Passaggio da un popup all'altro Windows

WebDriver consente di visualizzare finestre pop-up come avvisi, a differenza di Selenium IDE. Per accedere agli elementi all'interno dell'avviso (come il messaggio in esso contenuto), dobbiamo utilizzare il file "switchTo().alert()" metodo. Nel codice sottostante, useremo questo metodo per accedere alla casella di avviso e quindi recuperare il suo messaggio utilizzando il "getText()" metodo, quindi chiudere automaticamente la finestra di avviso utilizzando il "switchTo().alert().accept()" metodo.

Per prima cosa, vai a https://output.jsbin.com/usidix/1 e fare clic manualmente sul pulsante "Vai!" pulsante lรฌ e vedere di persona il testo del messaggio.

Passaggio da un popup all'altro Windows

Vediamo il Selenium codice di esempio per fare questo-

package mypackage;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class myclass {

    public static void main(String[] args) {
    	System.setProperty("webdriver.gecko.">driver","C:\\geckodriver.exe");
        WebDriver driver = new FirefoxDriver();
        String alertMessage = "";

        driver.get("http://jsbin.com/usidix/1");
        driver.findElement(By.cssSelector("input[value=\"Go!\"]")).click();
        alertMessage = driver.switchTo().alert().getText();
        driver.switchTo().alert().accept();
       
        System.out.println(alertMessage);
        driver.quit();
       
    }
}

Sulla Eclipse console, nota che il messaggio di avviso stampato รจ:

Passaggio da un popup all'altro Windows

Aspetta

Esistono due tipi di attesa.

  1. Attesa implicita: utilizzata per impostare il tempo di attesa predefinito in tutto il programma
  2. Attesa esplicita: utilizzata per impostare il tempo di attesa solo per una particolare istanza

Attesa implicita

  • รˆ piรน semplice da codificare rispetto alle attese esplicite.
  • Di solito viene dichiarato nella parte di istanziazione del codice.
  • Avrai bisogno solo di un pacchetto aggiuntivo da importare.

Per iniziare a utilizzare un'attesa implicita, dovresti importare questo pacchetto nel tuo codice.

Attesa implicita

Quindi, nella parte di istanziazione del tuo codice, aggiungi questo.

Attesa implicita

Aspetta esplicita

Le attese esplicite vengono eseguite utilizzando le classi WebDriverWait e ExpectedConditionPer quanto segue Selenium Esempio WebDriver, attenderemo fino a 10 secondi affinchรฉ un elemento il cui ID รจ "nome utente" diventi visibile prima di procedere al comando successivo. Ecco i passaggi.

Passo 1:

Importa questi due pacchetti:

Aspetta esplicita

Passo 2:

Dichiarare una variabile WebDriverWait. In questo esempio utilizzeremo "myWaitVar" come nome della variabile.

Aspetta esplicita

Passo 3:

Utilizza myWaitVar con ExpectedConditions sulle parti in cui รจ necessario che si verifichi l'attesa esplicita. In questo caso, utilizzeremo l'attesa esplicita sul "nome utente" (Mercury Tours HomePage) prima di digitare il testo "tutorial" su di esso.

Aspetta esplicita

Condizioni

I seguenti metodi vengono utilizzati in modo condizionale e looping operazioni โ€”

  • รจ abilitato() viene utilizzato quando si vuole verificare se un determinato elemento รจ abilitato o meno prima di eseguire un comando.

Le condizioni sono abilitate()

  • รˆ visualizzato() viene utilizzato quando si vuole verificare se un determinato elemento viene visualizzato o meno prima di eseguire un comando.

Le condizioni vengono visualizzate()

  • รจ selezionato() viene utilizzato quando si desidera verificare se un certo file casella di controllo, pulsante di scelta o opzione in una casella a discesa รจ selezionato. Non funziona su altri elementi.

Le condizioni sono selezionate()

Utilizzo delle condizioni previste

La classe ExpectedConditions offre un insieme piรน ampio di condizioni che puoi utilizzare insieme al metodo Until() di WebDriverWait.

Di seguito sono riportati alcuni dei metodi ExpectedConditions piรน comuni.

  • alertIsPresent() โ€“ attende finchรฉ non viene visualizzata una casella di avviso.

Utilizzo delle condizioni previste alertIsPresent()

  • elementoToBeClickable() โ€“ Attende finchรฉ un elemento รจ visibile e, allo stesso tempo, abilitato. Il campione Selenium Code Il codice seguente attenderร  che l'elemento con id="username" diventi visibile e abilitato prima di assegnargli una variabile WebElement denominata "txtUserName".

Utilizzo delle condizioni previste

  • frameToBeAvailableAndSwitchToIt() โ€“ Attende finchรฉ il frame indicato non รจ giร  disponibile, quindi passa automaticamente ad esso.

Utilizzo delle condizioni previste elementToBeClickable()

Catturare le eccezioni

Quando si usa isEnabled(), isDisplayed() e isSelected(), WebDriver presuppone che l'elemento esista giร  nella pagina. In caso contrario, genererร  un NoSuchElementException. Per evitare ciรฒ, dovremmo usare un blocco try-catch in modo che il programma non venga interrotto.

WebElement txtbox_username = driver.findElement(By.id("username"));
try{
        if(txtbox_username.isEnabled()){
            txtbox_username.sendKeys("tutorial");
        }
    }

catch(NoSuchElementException nsee){
            System.out.println(nsee.toString());
 }

Se utilizzi attese esplicite, il tipo di eccezione che dovresti rilevare รจ "TimeoutException".

Catturare le eccezioni

DOMANDE FREQUENTI

Installa JDK, un IDE come Eclipse o IntelliJ, il Selenium Java librerie e il driver del browser corrispondente. Strumenti di automazione della build come Maven o Gradle semplificare la gestione delle dipendenze.

L'IA ripara automaticamente i localizzatori, genera casi di test dalle storie utente e identifica i test instabili. Piattaforme come TestimMabl e Applitools integrano l'intelligenza artificiale per una creazione, un'esecuzione e una convalida visiva piรน intelligenti.

Sรฌ. GitHub Copilot, Cursor e JetBrains Generazione dell'intelligenza artificiale Java Selenium Script derivati โ€‹โ€‹da passaggi in linguaggio naturale, inclusi attese, asserzioni e oggetti pagina. Riducono notevolmente il codice ripetitivo per i nuovi scenari di test.

findElement restituisce il primo WebElement corrispondente o genera un'eccezione NoSuchElementException. findElements restituisce un elenco di tutte le corrispondenze e un elenco vuoto se non ne viene trovato alcuno, senza mai generare l'eccezione.

Thread.sleep mette in pausa per una durata fissa, indipendentemente dallo stato della pagina, rallentando le esecuzioni veloci e causando l'interruzione di quelle lente. Utilizzare WebDriverWait con ExpectedConditions per attendere solo il tempo necessario.

Selenium supporta ChromeDriver, GeckoDriver per FirefoxEdgeDriver, SafariDriver e IEDriverServer. Selenium Nella versione 4, Manager scarica automaticamente il driver corretto.

Configura ChromeOptions o FirefoxOggetto Options con setAcceptInsecureCerts(true). Questo indica al browser di ignorare i certificati non validi in modo che la sessione WebDriver possa continuare.

WebDriverManager scarica e configura automaticamente il file binario del driver del browser corretto per la versione del browser installata, eliminando la necessitร  di manutenzione manuale dei driver e riducendo i tempi di configurazione per i nuovi collaboratori.

Riassumi questo post con: