Selenium Webdriver Java Esempio di 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 Codice di esempio del WebDriver
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 l'URL di base e il titolo previsto come variabili.
Avvio di una sessione del browser
WebDriver ottenere () viene utilizzato per avviare una nuova sessione del browser e la indirizza all'URL specificato 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 codice di esempio che individua un elemento in base al suo ID. Facebook viene utilizzato come URL di base.
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 estrarre 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()
e 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 nelle operazioni condizionali e di looping:
- è 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 Il codice seguente attenderà finché l'elemento con id="nomeutente" non diventi visibile e abilitato prima di assegnare tale elemento come 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".
Sintesi
- Per iniziare a utilizzare l'API WebDriver, è necessario importare almeno questi due pacchetti.
- org.openqa.selenio.*
- org.openqa.selenium.firefox.FirefoxGuidatore
- .
get()
metodo è l'equivalente di Selenium Il comando "apri" dell'IDE. - L'individuazione degli elementi in WebDriver viene eseguita utilizzando il file
findElement()
metodo. - Di seguito sono riportate le opzioni disponibili per individuare gli elementi in WebDriver:
- Per.nomeclasse
- By.cssSelector
- Per.id
- By.linkText
- Per nome
- Per.partialLinkText
- Per.nometag
- Per.xpath
- Il By.cssSelector() non sostenere la “contiene” caratteristica.
- Puoi creare un'istanza di un elemento utilizzando la classe WebElement.
- Fare clic su un elemento viene effettuato utilizzando il comando
click()
metodo. - WebDriver fornisce questi utili comandi get:
- ottenere ()
- getTitle ()
- getPageSource()
- getCurrentUrl()
- getText ()
- WebDriver fornisce questi utili comandi di navigazione
- naviga().avanti()
- naviga().back()
- navigare verso()
- naviga().refresh()
- I metodi close() e quit() vengono utilizzati per chiudere le finestre del browser.
Close()
viene utilizzato per chiudere una singola finestra; Mentrequit()
viene utilizzato per chiudere tutte le finestre associate alla finestra padre controllata dall'oggetto WebDriver. - .
switchTo().frame()
eswitchTo().alert()
vengono utilizzati per dirigere l'attenzione di WebDriver rispettivamente su un frame o un avviso. Implicit waits
servono per impostare il tempo di attesa durante tutto il programma, mentreexplicit waits
vengono utilizzati solo su porzioni specifiche.- È possibile utilizzare isEnabled(), isDisplayed(),isSelected() e una combinazione di WebDriverAttendi e Condizioni previste metodi per verificare lo stato di un elemento. Tuttavia, non verificano se l'elemento non esiste.
- Quando isEnabled(), isDisplayed() o isSelected() è stato chiamato mentre l'elemento non esisteva, WebDriver genererà un NoSuchElementException.
- Quando i metodi WebDriverWait e ExpectedConditions venivano chiamati mentre l'elemento non esisteva, WebDriver lanciava un
TimeoutException
.
Nota:
driver.get()
: Questo metodo è utilizzato per navigare verso un sito web specifico. Tuttavia, non mantiene la cronologia del browser o i cookie. Di conseguenza, i pulsanti avanti e indietro non funzioneranno e cliccandoci non verrà programmata la navigazione della pagina.
driver.navigate()
: Questo metodo è utilizzato anche per navigare verso un sito web specifico, ma mantiene la cronologia del browser e i cookie. Ciò consente di utilizzare i pulsanti avanti e indietro per la navigazione tra le pagine durante la codifica di un caso di test.