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:

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

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

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'URL corrente 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() 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.

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

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

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

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; Mentre quit() viene utilizzato per chiudere tutte le finestre associate alla finestra padre controllata dall'oggetto WebDriver.
  • . switchTo().frame() e switchTo().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, mentre explicit 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.