Selenium Webdriver Java Exemplu de program

โšก Rezumat inteligent

Selenium webdriver Java Exemplul de program vฤƒ prezintฤƒ primul script de automatizare complet. LessAcoperฤƒ configurarea mediului, localizarea elementelor, trimiterea intrฤƒrii, navigarea, validarea, aศ™teptฤƒrile, gestionarea excepศ›iilor ศ™i cele mai bune practici pentru teste WebDriver fiabile.

  • โš™๏ธ Configurarea mediului: Instalare Java, Eclipse sau IntelliJ, configuraศ›i Selenium biblioteci ศ™i alegeศ›i fiศ™ierul binar al driverului potrivit pentru versiunea browserului dvs.
  • ๐Ÿงญ Localizatori de elemente: Foloseศ™te ID, name, class, XPath, selectorul CSS ศ™i linkText pentru a identifica elementele รฎn mod stabil รฎn diferite browsere ศ™i versiuni.
  • โŒจ๏ธ Acศ›iuni ศ™i intrฤƒri: WebDriver acceptฤƒ funcศ›ii precum click, sendKeys, submit, select dropdowns ศ™i evenimente de la tastaturฤƒ pentru o interacศ›iune completฤƒ รฎn stil utilizator.
  • โณ Aศ™teptฤƒri inteligente: รŽnlocuiศ›i Thread.sleep cu aศ™teptฤƒri implicite, explicite ศ™i fluente, determinate de ExpectedConditions, pentru a elimina testele instabile.
  • ???? Gestionarea excepศ›iilor: Prinde NoSuchElementException, TimeoutException ศ™i StaleElementReferenceException pentru a menศ›ine rezilienศ›a suitelor de automatizare.
  • ๐Ÿค– Generarea de teste AI: Asistenศ›ii inteligenศ›i artificiali genereazฤƒ scripturi WebDriver standard, sugereazฤƒ localizatori ศ™i corecteazฤƒ automat selectorii atunci cรขnd DOM-ul se modificฤƒ.

Selenium webdriver Java Program

Selenium Java Exemplu

Utilizarea Java clasa โ€žmyclassโ€ pe care am creat-o รฎn tutorialul anterior, sฤƒ รฎncercฤƒm sฤƒ creฤƒm un script WebDriver care ar:

Pasul 1: aduc Mercury Pagina de pornire a Tours
Pasul 2: verifica titlul acestuia
Pasul 3: tipฤƒriศ›i rezultatul comparaศ›iei
Pasul 4: รฎnchideศ›i-l รฎnainte de a รฎncheia รฎntregul program.

Selenium Exemplu de driver web Code

Mai jos este codul WebDriver real pentru logica prezentatฤƒ de scenariul de mai sus

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();
    }

}

Notฤƒ: รŽncepe Firefox 35, trebuie sฤƒ utilizaศ›i driverul gecko creat de Mozilla pentru a utiliza Web Driver. Selenium 3.0, gecko ศ™i firefox au probleme de compatibilitate ศ™i setarea lor corectฤƒ ar putea deveni o sarcinฤƒ dificilฤƒ. Dacฤƒ codul nu funcศ›ioneazฤƒ, faceศ›i downgrade la Firefox versiunea 47 sau mai jos. Alternativ, puteศ›i rula scripturile pe Chrome. Selenium funcศ›ioneazฤƒ imediat pentru Chrome. Trebuie doar sฤƒ schimbaศ›i 3 linii de cod pentru ca scriptul sฤƒ funcศ›ioneze cu Chrome sau Firefox

Explicarea codului

Importul pachetelor

Pentru a รฎncepe, trebuie sฤƒ importaศ›i urmฤƒtoarele douฤƒ pachete:

  1. org.openqa.selenium.*โ€“ conศ›ine clasa WebDriver necesarฤƒ pentru a instanศ›ia un nou browser รฎncฤƒrcat cu un anumit driver
  2. org.openqa.selenium.firefox.Firefoxลžofer โ€“ conศ›ine FirefoxClasa de ศ™oferi necesarฤƒ pentru a instanศ›ia a Firefox- driver specific pe browser instanศ›iat de clasa WebDriver

Dacฤƒ testul dvs. necesitฤƒ acศ›iuni mai complicate, cum ar fi accesarea unei alte clase, realizarea de capturi de ecran de browser sau manipularea fiศ™ierelor externe, cu siguranศ›ฤƒ va trebui sฤƒ importaศ›i mai multe pachete.

Instanศ›ierea obiectelor ศ™i variabilelor

รŽn mod normal, aศ™a este instanศ›iat un obiect driver.

WebDriver driver = new FirefoxDriver();

A FirefoxClasa de ศ™ofer fฤƒrฤƒ parametri รฎnseamnฤƒ cฤƒ implicit Firefox profilul va fi lansat de cฤƒtre nostru Java program. Implicit Firefox profilul este similar cu lansarea Firefox รฎn modul sigur (nu sunt รฎncฤƒrcate extensii).

Pentru comoditate, am salvat Baza URL ศ™i titlul aศ™teptat ca variabile.

Lansarea unei sesiuni de browser

WebDriver-uri obศ›ine() Metoda este utilizatฤƒ pentru a lansa o nouฤƒ sesiune de browser ศ™i o direcศ›ioneazฤƒ cฤƒtre URL pe care รฎl specificaศ›i ca parametru.

driver.get(baseUrl);

Obศ›ineศ›i titlul real al paginii

Clasa WebDriver are getTitle() metodฤƒ care este รฎntotdeauna folositฤƒ pentru a obศ›ine titlul paginii รฎncฤƒrcate curent.

actualTitle = driver.getTitle();

Comparaศ›i valorile aศ™teptate ศ™i reale

Aceastฤƒ porศ›iune a codului foloseศ™te pur ศ™i simplu un element de bazฤƒ Java structurฤƒ if-else pentru a compara titlul real cu cel aศ™teptat.

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

รŽncheierea unei sesiuni de browser

"รฎnchide()โ€ este folositฤƒ pentru a รฎnchide fereastra browserului.

driver.close();

รŽncheierea รฎntregului program

Dacฤƒ utilizaศ›i aceastฤƒ comandฤƒ fฤƒrฤƒ a รฎnchide mai รฎntรขi toate ferestrele browserului, รฎntregul dvs Java programul se va รฎncheia รฎn timp ce lasฤƒ fereastra browserului deschisฤƒ.

System.exit(0);

Executarea testului

Existฤƒ douฤƒ moduri de a executa codul รฎn Eclipse SDI.

  1. On Eclipsebara de meniu a lui, daศ›i clic Run > Run.
  2. Anunturi Ctrl + F11 pentru a rula รฎntregul cod.

Executarea testului

Dacฤƒ ai fฤƒcut totul corect, Eclipse ar scoate โ€žTest trecut!โ€

Executarea testului

Localizarea elementelor GUI

Localizarea elementelor รฎn WebDriver se face prin utilizarea โ€žfindElement(De.Locator())โ€ metoda. Partea โ€žlocatorโ€ a codului este aceeaศ™i cu oricare dintre locatorii discutaศ›i anterior รฎn Selenium IDE capitole din aceste tutoriale. De fapt, se recomandฤƒ sฤƒ localizaศ›i elementele GUI folosind IDE ศ™i, odatฤƒ identificate cu succes, sฤƒ exportaศ›i codul รฎn WebDriver.

Aici este o Selenium exemplu de cod care localizeazฤƒ un element dupฤƒ ID-ul sฤƒu. Facebook este folosit ca element de bazฤƒ 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);
}
}

Am folosit getTagName() metodฤƒ de a extracnumele etichetei elementului respectiv al cฤƒrui ID este โ€žemailโ€. Cรขnd este rulat, acest cod ar trebui sฤƒ poatฤƒ identifica corect numele etichetei โ€žinputโ€ ศ™i รฎl va afiศ™a pe Eclipsefereastra Consolei lui.

Localizarea elementelor GUI

Rezumat pentru localizarea elementelor

Variaศ›ie Descriere EลŸantion
Dupฤƒ.className gฤƒseศ™te elemente pe baza valorii atributului โ€žclasฤƒโ€. findElement(By.className(โ€žsomeClassNameโ€))
De.cssSelector gฤƒseศ™te elemente pe baza motorului CSS Selector al driverului findElement(By.cssSelector(โ€žinput#emailโ€))
Prin.id localizeazฤƒ elementele dupฤƒ valoarea atributului lor โ€židโ€. findElement(By.id(โ€žsomeIdโ€))
 
Prin.linkText gฤƒseศ™te un element de legฤƒturฤƒ dupฤƒ textul exact pe care รฎl afiศ™eazฤƒ findElement(By.linkText(โ€žรŽNREGISTRAREโ€))
 
Dupa nume localizeazฤƒ elemente dupฤƒ valoarea atributului โ€žnumeโ€. findElement(Dupฤƒ.nume(โ€žuneleNumeโ€))
 
De.partialLinkText localizeazฤƒ elementele care conศ›in textul link-ului dat findElement(By.partialLinkText(โ€žREGโ€))
 
By.tagName localizeazฤƒ elementele dupฤƒ numele etichetei lor findElement(By.tagName(โ€ždivโ€))
 
Prin.xpath localizeazฤƒ elemente prin 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]โ€))

Notฤƒ despre utilizarea findElement(By.cssSelector())

By.cssSelector() nu acceptฤƒ funcศ›ia โ€žconศ›ineโ€. Considera Selenium Codul IDE de mai jos -

Notฤƒ despre utilizarea findElement(By.cssSelector())

In Selenium IDE de mai sus, รฎntregul test a trecut. Cu toate acestea, รฎn Selenium Scriptul WebDriver de mai jos, acelaศ™i test a generat o eroare, deoarece WebDriver nu acceptฤƒ cuvรขntul cheie โ€žconศ›ineโ€ atunci cรขnd este utilizat รฎn metoda By.cssSelector().

Notฤƒ despre utilizarea findElement(By.cssSelector())

Comenzi comune

Instanศ›ierea elementelor web

รŽn loc sฤƒ folosim sintaxa lungฤƒ โ€ždriver.findElement(By.locator())โ€ de fiecare datฤƒ cรขnd veศ›i accesa un anumit element, putem instanศ›ia un obiect WebElement pentru acesta. Clasa WebElement este conศ›inutฤƒ รฎn pachetul โ€žorg.openqa.selenium.*โ€.

Instanศ›ierea elementelor web

Fฤƒcรขnd clic pe un element

Fฤƒcรขnd clic este poate cel mai comun mod de a interacศ›iona cu elementele web. The click() metoda este folositฤƒ pentru a simula clicul oricฤƒrui element. Urmฤƒtoarele Selenium Java exemplu aratฤƒ cum click() a fost folosit pentru a da clic pe Mercury Butonul โ€žConectareโ€ al Tururilor.

Fฤƒcรขnd clic pe un element

Urmฤƒtoarele lucruri trebuie remarcate atunci cรขnd utilizaศ›i metoda click().

  • Nu ia niciun parametru/argument.
  • Metoda aศ™teaptฤƒ automat รฎncฤƒrcarea unei noi pagini, dacฤƒ este cazul.
  • Elementul pe care se face clic trebuie sฤƒ fie vizibil (รฎnฤƒlศ›imea ศ™i lฤƒศ›imea nu trebuie sฤƒ fie egale cu zero).

Obศ›ineศ›i comenzi

Comenzile Get preia diverse informaศ›ii importante despre paginฤƒ/element. Iatฤƒ cรขteva comenzi importante โ€žobศ›ineโ€ cu care trebuie sฤƒ fii familiarizat.

Comenzi Folosire
obศ›ine()

Exemplu de utilizare:

  • Deschide automat o nouฤƒ fereastrฤƒ de browser ศ™i preia pagina pe care o specificaศ›i รฎn paranteze.
  • Este omologul lui Selenium Comanda โ€ždeschidereโ€ a IDE.
  • Parametrul trebuie sฤƒ fie a ลžir obiect.
getTitle()

Exemplu de utilizare:

  • Nu are nevoie de parametri
  • Preia titlul paginii curente
  • Spaศ›iile albe de รฎnceput ศ™i de final sunt tฤƒiate
  • Returneazฤƒ un ศ™ir nul dacฤƒ pagina nu are titlu
getPageSource()

Exemplu de utilizare:

  • Nu are nevoie de parametri
  • Returneazฤƒ codul sursฤƒ al paginii ca valoare String
getCurrentUrl()

Exemplu de utilizare:

  • Nu are nevoie de parametri
  • Preia ศ™irul de caractere care reprezintฤƒ curentul URL pe care browserul o priveศ™te
getText ()

Exemplu de utilizare:

  • Preia textul interior al elementului pe care รฎl specificaศ›i

Navigaศ›i comenzi

Aceste comenzi vฤƒ permit sฤƒ reรฎmprospฤƒtaศ›i, sฤƒ accesaศ›i ศ™i sฤƒ comutaศ›i รฎnainte ศ™i รฎnapoi รฎntre diferite pagini web.

navigheaza catre()

Exemplu de utilizare:

  • Deschide automat o nouฤƒ fereastrฤƒ de browser ศ™i preia pagina pe care o specificaศ›i รฎn paranteze.
  • Face exact acelaศ™i lucru ca ศ™i get() metodฤƒ.
navigate().refresh()

Exemplu de utilizare:

  • Nu are nevoie de parametri.
  • Reรฎmprospฤƒteazฤƒ pagina curentฤƒ.
navigate().back()

Exemplu de utilizare:

  • Nu are nevoie de parametri
  • Vฤƒ duce รฎnapoi cu o paginฤƒ din istoricul browserului.
navigate().forward()

Exemplu de utilizare:

  • Nu are nevoie de parametri
  • Vฤƒ duce รฎnainte cu o paginฤƒ din istoricul browserului.

รŽnchiderea ศ™i รฎnchiderea browserului Windows

รฎnchide()

Exemplu de utilizare:

  • Nu are nevoie de parametri
  • รŽnchide doar fereastra browserului pe care WebDriver o controleazฤƒ รฎn prezent.
pฤƒrฤƒsi()

Exemplu de utilizare:

  • Nu are nevoie de parametri
  • รŽnchide toate ferestrele pe care le-a deschis WebDriver.

รŽnchiderea ศ™i รฎnchiderea browserului Windows

Pentru a ilustra clar diferenศ›a dintre close() ศ™i quit(), รฎncercaศ›i sฤƒ executaศ›i codul de mai jos. Foloseศ™te o paginฤƒ web care deschide automat o fereastrฤƒ la รฎncฤƒrcarea paginii ศ™i deschide o altฤƒ fereastrฤƒ dupฤƒ ieศ™ire.

รŽnchiderea ศ™i รฎnchiderea browserului Windows

Observaศ›i cฤƒ numai fereastra browser-ului pฤƒrinte a fost รฎnchisฤƒ ศ™i nu cele douฤƒ ferestre pop-up.

รŽnchiderea ศ™i รฎnchiderea browserului Windows

Dar dacฤƒ utilizaศ›i quit(), toate ferestrele vor fi รฎnchise - nu doar cea pฤƒrinte. รŽncercaศ›i sฤƒ rulaศ›i codul de mai jos ศ™i veศ›i observa cฤƒ ศ™i cele douฤƒ ferestre pop-up de mai sus se vor รฎnchide automat.

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

Comutarea รฎntre cadre

Pentru a accesa elementele GUI รฎntr-un cadru, ar trebui mai รฎntรขi sฤƒ direcศ›ionฤƒm WebDriver sฤƒ se concentreze pe cadru sau pe fereastra pop-up รฎnainte de a putea accesa elementele din ele. Sฤƒ luฤƒm, de exemplu, pagina web https://demo.guru99.com/selenium/deprecated.html

Comutarea รฎntre cadre

Aceastฤƒ paginฤƒ are 3 cadre ale cฤƒror atribute โ€žnumeโ€ sunt indicate mai sus. Dorim sฤƒ accesฤƒm linkul โ€žDepreciatโ€ รฎnconjurat mai sus cu galben. Pentru a face acest lucru, trebuie mai รฎntรขi sฤƒ รฎi instruim pe WebDriver sฤƒ comute la cadrul โ€žclassFrameโ€ folosind โ€žswitchTo().frame()โ€ metodฤƒ. Vom folosi atributul nume al cadrului ca parametru pentru partea โ€ž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(); 
	    }
}

Dupฤƒ executarea acestui cod, veศ›i vedea cฤƒ cadrul โ€žclassFrameโ€ este dus la pagina โ€žDeprecated APIโ€, ceea ce รฎnseamnฤƒ cฤƒ codul nostru a reuศ™it sฤƒ acceseze linkul โ€žDeprecatedโ€.

Comutarea รฎntre pop-up Windows

WebDriver permite afiศ™area ferestrelor pop-up precum alertele, spre deosebire de รฎn Selenium IDE. Pentru a accesa elementele din alertฤƒ (cum ar fi mesajul pe care รฎl conศ›ine), trebuie sฤƒ folosim "switchTo().alert()" metodฤƒ. รŽn codul de mai jos, vom folosi aceastฤƒ metodฤƒ pentru a accesa caseta de alertฤƒ ศ™i apoi pentru a prelua mesajul acesteia folosind "getText()" metoda, apoi รฎnchideศ›i automat caseta de alertฤƒ folosind "switchTo().alert().accept()" metodฤƒ.

รŽn primul rรขnd, du-te la https://output.jsbin.com/usidix/1 ศ™i faceศ›i clic manual pe โ€žGo!โ€ butonul de acolo ศ™i vedeศ›i singur textul mesajului.

Comutarea รฎntre pop-up Windows

Sฤƒ vedem Selenium exemplu de cod pentru a face asta -

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();
       
    }
}

Pe Eclipse console, observaศ›i cฤƒ mesajul de alertฤƒ tipฤƒrit este:

Comutarea รฎntre pop-up Windows

Aศ™teaptฤƒ

Existฤƒ douฤƒ tipuri de aศ™teptฤƒri.

  1. Aศ™teptare implicitฤƒ โ€“ folosit pentru a seta timpul de aศ™teptare implicit pe tot parcursul programului
  2. Explicit wait โ€“ folosit pentru a seta timpul de aศ™teptare numai pentru o anumitฤƒ instanศ›ฤƒ

Aศ™teptaศ›i implicit

  • Este mai simplu de codat decรขt Explicit Waits.
  • Este de obicei declarat รฎn partea de instanศ›iere a codului.
  • Veศ›i avea nevoie de un singur pachet suplimentar pentru a importa.

Pentru a รฎncepe sฤƒ utilizaศ›i o aศ™teptare implicitฤƒ, ar trebui sฤƒ importaศ›i acest pachet รฎn codul dvs.

Aศ™teptaศ›i implicit

Apoi, รฎn partea de instanศ›iere a codului dvs., adฤƒugaศ›i aceasta.

Aศ™teptaศ›i implicit

Aศ™teptaศ›i explicit

Aศ™teptฤƒrile explicite sunt efectuate folosind clasele WebDriverWait ศ™i ExpectedCondition. Pentru urmatoarele Selenium Exemplu WebDriver, vom aศ™tepta pรขnฤƒ la 10 secunde pentru ca un element al cฤƒrui id este โ€žnume de utilizatorโ€ sฤƒ devinฤƒ vizibil รฎnainte de a trece la urmฤƒtoarea comandฤƒ. Iatฤƒ paศ™ii.

Pasul 1:

Importฤƒ aceste douฤƒ pachete:

Aศ™teptaศ›i explicit

Pasul 2:

Declaraศ›i o variabilฤƒ WebDriverWait. รŽn acest exemplu, vom folosi โ€žmyWaitVarโ€ ca nume al variabilei.

Aศ™teptaศ›i explicit

Pasul 3:

Utilizaศ›i myWaitVar cu ExpectedConditions รฎn porศ›iunile รฎn care aveศ›i nevoie de aศ™teptarea explicitฤƒ. รŽn acest caz, vom folosi aศ™teptarea explicitฤƒ pe โ€žnume de utilizatorโ€ (Mercury Turs HomePage) รฎnainte de a introduce textul โ€žtutorialโ€ pe el.

Aศ™teptaศ›i explicit

Condiลฃii

Urmฤƒtoarele metode sunt utilizate รฎn condiศ›ional ศ™i รฎn tehnica de calculping operaศ›iuni โ€”

  • este activat() este folosit atunci cรขnd doriศ›i sฤƒ verificaศ›i dacฤƒ un anumit element este activat sau nu รฎnainte de a executa o comandฤƒ.

Condiศ›iile sunt activate()

  • este afisat() este folosit atunci cรขnd doriศ›i sฤƒ verificaศ›i dacฤƒ un anumit element este afiศ™at sau nu รฎnainte de a executa o comandฤƒ.

Condiศ›iile sunt afiศ™ate()

  • este selectat() este folosit atunci cรขnd doriศ›i sฤƒ verificaศ›i dacฤƒ un anumit casetฤƒ de selectare, buton radio sau opศ›iune รฎntr-o casetฤƒ derulantฤƒ este selectat. Nu funcศ›ioneazฤƒ pe alte elemente.

Condiศ›iile sunt selectate()

Utilizarea ExpectedConditions

Clasa ExpectedConditions oferฤƒ un set mai larg de condiศ›ii pe care le puteศ›i utiliza รฎmpreunฤƒ cu metoda until() a lui WebDriverWait.

Mai jos sunt cรขteva dintre cele mai comune metode ExpectedConditions.

  • alertIsPresent() โ€“ aศ™teaptฤƒ pรขnฤƒ cรขnd este afiศ™atฤƒ o casetฤƒ de alertฤƒ.

Utilizarea ExpectedConditions alertIsPresent()

  • elementToBeClickable() โ€“ Aศ™teaptฤƒ pรขnฤƒ cรขnd un element este vizibil ศ™i, รฎn acelaศ™i timp, activat. Proba Selenium Code mai jos se va aศ™tepta pรขnฤƒ cรขnd elementul cu id="username" devine vizibil ศ™i activat รฎnainte de a atribui acel element ca variabilฤƒ WebElement numitฤƒ "txtUserName".

Utilizarea ExpectedConditions

  • frameToBeAvailableAndSwitchToIt() โ€“ Aศ™teaptฤƒ pรขnฤƒ cรขnd cadrul dat este deja disponibil ศ™i apoi trece automat la acesta.

Utilizarea ExpectedConditions elementToBeClickable()

Prinderea excepศ›iilor

Cรขnd utilizaศ›i isEnabled(), isDisplayed() ศ™i isSelected(), WebDriver presupune cฤƒ elementul existฤƒ deja pe paginฤƒ. รŽn caz contrar, va arunca a NoSuchElementException. Pentru a evita acest lucru, ar trebui sฤƒ folosim un bloc try-catch, astfel รฎncรขt programul sฤƒ nu fie รฎntrerupt.

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());
 }

Dacฤƒ utilizaศ›i aศ™teptฤƒri explicite, tipul de excepศ›ie pe care ar trebui sฤƒ-l identificaศ›i este โ€žTimeoutExceptionโ€.

Prinderea excepศ›iilor

รŽntrebฤƒri frecvente

Instalaศ›i JDK, un IDE precum Eclipse sau IntelliJ, cel/cea/cei/cele Selenium Java biblioteci ศ™i driverul de browser corespunzฤƒtor. Construiศ›i instrumente de automatizare precum Maven sau Gradle simplificaศ›i gestionarea dependenศ›elor.

Inteligenศ›a artificialฤƒ corecteazฤƒ automat localizatorii, genereazฤƒ cazuri de testare din poveศ™tile utilizatorilor ศ™i identificฤƒ testele instabile. Platforme precum TestimMabl ศ™i Applitools รฎncorporeazฤƒ inteligenศ›a artificialฤƒ pentru o creare, execuศ›ie ศ™i validare vizualฤƒ mai inteligente.

Da. Copilot, Cursor ศ™i GitHub JetBrains AI genereazฤƒ Java Selenium scripturi din paศ™i รฎn limbaj simplu, inclusiv aศ™teptฤƒri, aserศ›iuni ศ™i obiecte de paginฤƒ. Acestea reduc considerabil ศ™ablonul standard pentru scenarii de testare noi.

Funcศ›ia findElement returneazฤƒ primul WebElement corespondent sau genereazฤƒ o excepศ›ie NoSuchElementException. Funcศ›ia findElements returneazฤƒ o listฤƒ cu toate corespondenศ›a ศ™i returneazฤƒ o listฤƒ goalฤƒ dacฤƒ nu se gฤƒseศ™te nicio corespondenศ›ฤƒ, fฤƒrฤƒ a genera niciodatฤƒ excepศ›ia.

Thread.sleep se รฎntrerupe pentru o duratฤƒ fixฤƒ, indiferent de starea paginii, รฎncetinind rulฤƒrile rapide ศ™i eศ™uรขnd pe cele lente. Foloseศ™te WebDriverWait cu ExpectedConditions pentru a aศ™tepta doar cรขt este necesar.

Selenium acceptฤƒ ChromeDriver, GeckoDriver pentru Firefox, EdgeDriver, SafariDriver ศ™i IEDriverServer. Selenium Manager รฎn versiunea 4 descarcฤƒ automat driverul corect.

Configuraศ›i Opศ›iunile Chrome sau FirefoxObiect Options cu setAcceptInsecureCerts(true). Aceasta comandฤƒ browserului sฤƒ ignore certificatele nevalide, astfel รฎncรขt sesiunea WebDriver sฤƒ poatฤƒ continua.

WebDriverManager descarcฤƒ ศ™i configureazฤƒ automat fiศ™ierul binar corect al driverului de browser pentru versiunea de browser instalatฤƒ, eliminรขnd รฎntreศ›inerea manualฤƒ a driverului ศ™i reducรขnd timpul de configurare pentru noii contribuitori.

Rezumaศ›i aceastฤƒ postare cu: