Primo script Selenium Webdriver: esempio di codice di esempio JAVA

Sommario:

Anonim

Utilizzando la classe Java "myclass" che abbiamo creato nel tutorial precedente, proviamo a creare uno script WebDriver che:

  1. recuperare la home page di Mercury Tours
  2. verificarne il titolo
  3. stampare il risultato del confronto
  4. chiuderlo prima di terminare l'intero programma.

Codice WebDriver

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

Nota: a partire da 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 in salita. Se il codice non funziona, esegui il downgrade a Firefox versione 47 o precedente. In alternativa, puoi eseguire i tuoi script su Chrome. Il selenio funziona fuori dagli schemi per Chrome. Devi solo modificare 3 righe di codice per far funzionare lo script con Chrome o Firefox

pacchetto newproject;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;// commenta la riga precedente e rimuovi il commento sotto la riga per utilizzare Chrome// import org.openqa.selenium.chrome.ChromeDriver;public class PG1 {public static void main (String [] args) {// dichiarazione e istanziazione di oggetti / variabiliSystem.setProperty ("webdriver.gecko.driver", "C: \\ geckodriver.exe");Driver WebDriver = nuovo FirefoxDriver ();// commenta le 2 righe precedenti e rimuovi il commento sotto le 2 righe per utilizzare Chrome//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe ");// Driver WebDriver = nuovo ChromeDriver ();String baseUrl = "http://demo.guru99.com/test/newtours/";String expectedTitle = "Benvenuto: Mercury Tours";String actualTitle = "";// avvia Fire fox e indirizzalo all'URL di basedriver.get (baseUrl);// ottiene il valore effettivo del titoloactualTitle = driver.getTitle ();/ ** confronta il titolo effettivo della pagina con quello previsto e stampa* il risultato come "Superato" o "Non riuscito"* /if (actualTitle.contentEquals (expectedTitle)) {System.out.println ("Test superato!");} altro {System.out.println ("Test non riuscito");}// chiudi Fire foxdriver.close ();}}

Spiegare il codice

Importazione di pacchetti

Per iniziare, è necessario importare i seguenti due pacchetti:

  1. org.openqa.selenium. * - contiene la classe WebDriver necessaria per istanziare un nuovo browser caricato con un driver specifico
  2. org.openqa.selenium.firefox.FirefoxDriver - contiene la classe FirefoxDriver necessaria per istanziare un driver specifico per Firefox nel 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.

Una classe FirefoxDriver senza parametri significa che il profilo Firefox predefinito verrà avviato dal nostro programma Java. Il profilo predefinito di Firefox è simile all'avvio di 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

Il metodo get () di WebDriver viene utilizzato per avviare una nuova sessione del browser e la indirizza all'URL specificato come parametro.

Ottieni il titolo effettivo della pagina

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

Confronta i valori attesi e effettivi

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

Terminare una sessione del browser

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

Terminare l'intero programma

Se utilizzi questo comando senza prima chiudere tutte le finestre del browser, l'intero programma Java terminerà lasciando aperta la finestra del browser.

Esecuzione del test

Esistono due modi per eseguire il codice in Eclipse IDE.

  1. Sulla barra dei menu di Eclipse, fare clic su Esegui> Esegui.
  2. Premi Ctrl + F11 per eseguire l'intero codice.

Se hai fatto tutto correttamente, Eclipse produrrà "Test superato!"

Individuazione degli elementi della GUI

L'individuazione degli elementi in WebDriver viene eseguita utilizzando il metodo " findElement (By. Locator ()) ". La parte "locator" del codice è la stessa di qualsiasi localizzatore discusso in precedenza nei capitoli Selenium IDE di questi tutorial. Infatti, si consiglia di individuare gli elementi della GUI utilizzando IDE e, una volta identificati con successo, esportare il codice su WebDriver.

Ecco un codice di esempio Selenium che individua un elemento in base al suo ID. Facebook viene utilizzato come URL di base.

pacchetto 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");Driver WebDriver = nuovo 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 utilizzato il metodo getTagName () per estrarre il nome del tag di quel particolare elemento il cui id è "email". Quando viene eseguito, questo codice dovrebbe essere in grado di identificare correttamente il nome del tag "input" e lo stamperà sulla finestra della console di Eclipse.

Riepilogo per la localizzazione degli elementi

Variazione Descrizione Campione
Di. nome della classe trova gli elementi in base al valore dell'attributo "class" findElement (By.className ("someClassName"))
Di. cssSelector trova gli elementi in base al motore CSS Selector sottostante del driver findElement (By.cssSelector ("input # email"))
Di. id individua gli elementi in base al valore del loro attributo "id" findElement (By.id ("someId"))
Di. linkText trova un elemento di collegamento in base al testo esatto visualizzato findElement (By.linkText ("REGISTRATION"))
Di. nome individua gli elementi in base al valore dell'attributo "nome" findElement (By.name ("someName"))
Di. partialLinkText individua gli elementi che contengono il testo del collegamento specificato findElement (By.partialLinkText ("REG"))
Di. tagName individua gli elementi in base al nome del tag findElement (By.tagName ("div"))
Di. 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'utilizzo di findElement (By.cssSelector ())

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

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

Comandi comuni

Creazione di istanze di elementi Web

Invece di usare la sintassi lunga "driver.findElement (By.locator ())" ogni volta che accederai a un particolare elemento, possiamo istanziare un oggetto WebElement per esso. La classe WebElement è contenuta nel pacchetto "org.openqa.selenium. *".

Fare clic su un elemento

Fare clic è forse il modo più comune di interagire con gli elementi web . Il metodo click () viene utilizzato per simulare il clic di qualsiasi elemento. Il seguente esempio Selenium Java mostra come è stato utilizzato click () per fare clic sul pulsante "Accedi" di Mercury Tours.

Quando si utilizza il metodo click () è necessario tenere presente le seguenti cose.

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

Ottieni comandi

Ottieni comandi recupera varie informazioni importanti sulla pagina / elemento. Ecco alcuni importanti comandi "get" che devi conoscere.

Comandi Utilizzo
get () Esempio di utilizzo:
  • Apre automaticamente una nuova finestra del browser e recupera la pagina specificata tra parentesi.
  • È la controparte del comando "open" di Selenium IDE.
  • Il parametro deve essere un oggetto String .
getTitle () Esempio di utilizzo:
  • Non necessita 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 necessita di parametri
  • Restituisce il codice sorgente della pagina come valore String
getCurrentUrl () Esempio di utilizzo:
  • Non necessita di parametri
  • Recupera la stringa che rappresenta l' URL corrente che il browser sta guardando
getText () Esempio di utilizzo:
  • Recupera il testo interno dell'elemento specificato

Naviga tra i comandi

Questi comandi consentono di aggiornare, accedere e passare da una pagina Web all'altra.

navigate (). to () Esempio di utilizzo:
  • Apre automaticamente una nuova finestra del browser e recupera la pagina specificata tra parentesi.
  • Fa esattamente la stessa cosa del metodo get ().
navigate (). refresh () Esempio di utilizzo:
  • Non necessita di parametri.
  • Si aggiorna la pagina corrente.
navigate (). back () Esempio di utilizzo:
  • Non necessita di parametri
  • Ti riporta indietro di una pagina nella cronologia del browser.
navigate (). forward () Esempio di utilizzo:
  • Non necessita di parametri
  • Ti porta avanti di una pagina nella cronologia del browser.

Chiusura e chiusura delle finestre del browser

close () Esempio di utilizzo:
  • Non necessita di parametri
  • Chiude solo la finestra del browser attualmente controllata da WebDriver .
quit () Esempio di utilizzo:
  • Non necessita di parametri
  • Chiude tutte le finestre che WebDriver ha aperto.

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 popup.

Ma se usi quit (), tutte le finestre verranno chiuse, non solo quella genitore. Prova a eseguire il codice qui sotto e noterai che anche i due popup sopra verranno chiusi automaticamente.

pacchetto 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");Driver WebDriver = nuovo FirefoxDriver ();driver.get ("http://www.popuptest.com/popuptest2.html");driver.quit (); // usando QUIT tutte le finestre si chiuderanno}}

Passaggio da un fotogramma all'altro

Per accedere agli elementi della GUI in un frame, dobbiamo prima indicare a WebDriver di concentrarsi sul frame o sulla finestra a comparsa prima di poter accedere agli elementi al loro interno. Prendiamo, ad esempio, la pagina web http://demo.guru99.com/selenium/deprecated.html

Questa pagina ha 3 frame i cui attributi "nome" sono indicati sopra. Vorremmo accedere al link "Deprecato" cerchiato sopra in giallo. Per fare ciò, dobbiamo prima istruire WebDriver a passare al frame "classFrame" utilizzando il metodo "switchTo (). Frame ()" . Useremo l'attributo name del frame come parametro per la parte "frame ()".

pacchetto 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");Driver WebDriver = nuovo FirefoxDriver ();driver.get ("http://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 link "deprecato".

Passaggio tra finestre popup

WebDriver consente la visualizzazione di finestre pop-up come avvisi, a differenza di Selenium IDE. Per accedere agli elementi all'interno dell'avviso ( come il messaggio che contiene), dobbiamo utilizzare il metodo "switchTo (). Alert ()" . Nel codice sottostante, useremo questo metodo per accedere alla casella di avviso e quindi recuperare il suo messaggio utilizzando il metodo "getText ()" , quindi chiudere automaticamente la casella di avviso utilizzando "switchTo (). Alert (). Accept () " metodo.

Per prima cosa, vai su http://jsbin.com/usidix/1 e fai clic manualmente su "Vai!" pulsante lì e vedere di persona il testo del messaggio.

Vediamo il codice di esempio Selenium per farlo-

pacchetto 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");Driver WebDriver = nuovo FirefoxDriver ();String alertMessage = "";driver.get ("http://jsbin.com/usidix/1");driver.findElement (By.cssSelector ("input [value = \" Go! \ "]")). fare clic ();alertMessage = driver.switchTo (). alert (). getText ();driver.switchTo (). alert (). accept ();System.out.println (alertMessage);driver.quit ();}}

Sulla console Eclipse, notare che il messaggio di avviso stampato è:

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 codificare rispetto alle attese esplicite.
  • Di solito è dichiarato nella parte di istanziazione del codice.
  • Avrai solo bisogno 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 codice, aggiungi questo.

Attesa esplicita

Le attese esplicite vengono eseguite utilizzando le classi WebDriverWait e ExpectedCondition . Per il seguente esempio di Selenium WebDriver, dovremo attendere fino a 10 secondi prima che un elemento il cui id è "username" 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, useremo "myWaitVar" come nome della variabile.

Passaggio 3

Utilizza myWaitVar con ExpectedConditions sulle parti in cui è necessaria l'attesa esplicita. In questo caso, useremo l'attesa esplicita sull'input "username" (Mercury Tours HomePage) prima di digitare il testo "tutorial" su di esso.

Condizioni

I seguenti metodi vengono utilizzati nelle operazioni condizionali e di ciclo:

  • isEnabled () viene utilizzato quando si desidera verificare se un determinato elemento è abilitato o meno prima di eseguire un comando.
  • isDisplayed () viene utilizzato quando si desidera verificare se un determinato elemento viene visualizzato o meno prima di eseguire un comando.
  • isSelected () viene utilizzato quando si desidera verificare se una determinata casella di controllo, pulsante di opzione o opzione in una casella a discesa è selezionata. Non funziona su altri elementi.

Utilizzo di ExpectedConditions

La classe ExpectedConditions offre un insieme più ampio di condizioni che è possibile utilizzare insieme al metodo until () di WebDriverWait.

Di seguito sono riportati alcuni dei metodi ExpectedConditions più comuni.

  • alertIsPresent () : attende che venga visualizzata una casella di avviso.
  • elementToBeClickable () - Attende fino a quando un elemento è visibile e, allo stesso tempo, abilitato. Il codice di selenio di esempio riportato di seguito attenderà finché l'elemento con diventi visibile e abilitato prima di assegnare quell'elemento come variabile WebElement denominata "txtUserName".
  • frameToBeAvailableAndSwitchToIt () - Attende fino a quando il frame specificato è già disponibile, quindi passa automaticamente ad esso.

Catturare le eccezioni

Quando si utilizza isEnabled (), isDisplayed () e isSelected (), WebDriver presume che l'elemento esista già sulla pagina. In caso contrario, genererà un'eccezione NoSuchElementException . Per evitare ciò, dovremmo utilizzare un blocco try-catch in modo che il programma non venga interrotto.

WebElement txtbox_username = driver.findElement (By.id ("username"));provare{if (txtbox_username.isEnabled ()) {txtbox_username.sendKeys ("tutorial");}}catch (NoSuchElementException nsee) {System.out.println (nsee.toString ());}

Se utilizzi attese esplicite, il tipo di eccezione da rilevare è "TimeoutException".

Sommario

  • Per iniziare a utilizzare l'API WebDriver, è necessario importare almeno questi due pacchetti.
  • org.openqa.selenium. *
  • org.openqa.selenium.firefox.FirefoxDriver
  • Il metodo get () è l'equivalente del comando "open" di Selenium IDE.
  • L'individuazione degli elementi in WebDriver viene eseguita utilizzando il metodo findElement () .
  • Le seguenti sono le opzioni disponibili per individuare gli elementi in WebDriver:
  • Di. nome della classe
  • Di. cssSelector
  • Di. id
  • Di. linkText
  • Di. nome
  • Di. partialLinkText
  • Di. tagName
  • Di. xpath
  • By.cssSelector () non supporta la funzionalità "contiene" .
  • È possibile creare un'istanza di un elemento utilizzando la classe WebElement .
  • Fare clic su un elemento viene eseguito utilizzando il metodo click () .
  • WebDriver fornisce questi utili comandi get :
  • ottenere()
  • getTitle ()
  • getPageSource ()
  • getCurrentUrl ()
  • getText ()
  • WebDriver fornisce questi utili comandi di navigazione
  • navigare (). avanti ()
  • navigare (). indietro ()
  • navigare verso()
  • navigate (). refresh ()
  • I metodi close () e quit () vengono utilizzati per chiudere le finestre del browser. Close () viene utilizzato per chiudere una singola finestra; mentre quit () viene utilizzato per chiudere tutte le finestre associate alla finestra padre controllata dall'oggetto WebDriver.
  • I metodi switchTo (). Frame () e switchTo (). Alert () vengono utilizzati per dirigere il focus di WebDriver su un frame o avviso, rispettivamente.
  • Le attese implicite vengono utilizzate per impostare il tempo di attesa durante il programma, mentre le attese esplicite vengono utilizzate solo su porzioni specifiche.
  • È possibile utilizzare i metodi isEnabled (), isDisplayed (), isSelected () e una combinazione dei metodi WebDriverWait e ExpectedConditions durante la verifica dello stato di un elemento. Tuttavia, non verificano se l'elemento non esiste.
  • Quando isEnabled (), isDisplayed () o isSelected () è stato chiamato mentre l'elemento non era esistente, WebDriver genererà un'eccezione NoSuchElementException .
  • Quando i metodi WebDriverWait e ExpectedConditions venivano chiamati mentre l'elemento non era esistente, WebDriver generava un'eccezione TimeoutException .

Nota:

driver.get (): è usato per andare a un particolare sito web, ma non mantiene la cronologia del browser e i cookie, quindi non possiamo usare i pulsanti avanti e indietro, se ci clicchiamo, la pagina non avrà la pianificazione

driver.navigate (): è usato per andare al particolare sito web, ma mantiene la cronologia del browser e i cookie, quindi possiamo usare i pulsanti avanti e indietro per navigare tra le pagine durante la codifica di Testcase