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.

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:
- org.openqa.selenio.*โ contiene la classe WebDriver necessaria per istanziare un nuovo browser caricato con un driver specifico
- 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.
- On Eclipsebarra dei menu, fare clic su Esegui > Esegui.
- Stampa Ctrl + F11 per eseguire l'intero codice.
Se hai fatto tutto correttamente, Eclipse produrrebbe "Test superato!"
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.
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:
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().
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.*โ.
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.
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: |
|
| getTitle ()
Esempio di utilizzo: |
|
| getPageSource()
Esempio di utilizzo: |
|
| getCurrentUrl()
Esempio di utilizzo: |
|
| getText ()
Esempio di utilizzo: |
|
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: |
|
| naviga().refresh()
Esempio di utilizzo: |
|
| naviga().back()
Esempio di utilizzo: |
|
| naviga().avanti()
Esempio di utilizzo: |
|
Chiusura e chiusura del browser Windows
| vicino()
Esempio di utilizzo: |
|
| smettere()
Esempio di utilizzo: |
|
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.
Si noti che รจ stata chiusa solo la finestra del browser principale e non le due finestre pop-up.
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
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.
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 รจ:
Aspetta
Esistono due tipi di attesa.
- Attesa implicita: utilizzata per impostare il tempo di attesa predefinito in tutto il programma
- 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.
Quindi, nella parte di istanziazione del tuo codice, aggiungi questo.
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:
Passo 2:
Dichiarare una variabile WebDriverWait. In questo esempio utilizzeremo "myWaitVar" come nome della variabile.
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.
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.
- ร visualizzato() viene utilizzato quando si vuole verificare se un determinato elemento viene visualizzato o meno prima di eseguire un comando.
- รจ 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.
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.
- 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".
- frameToBeAvailableAndSwitchToIt() โ Attende finchรฉ il frame indicato non รจ giร disponibile, quindi passa automaticamente ad esso.
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".

.png)
.png)
.png)
.png)
.png)
.png)

.png)


.png)
.png)
.png)
.png)
.png)
.png)

.png)
.png)
.png)