Cross Browser Testing folosind Selenium webdriver

โšก Rezumat inteligent

Cross Browser Testing folosind Selenium WebDriver verificฤƒ dacฤƒ o aplicaศ›ie web se comportฤƒ consecvent รฎn Chrome, Firefox, Safari ศ™i Edge. Acest tutorial demonstreazฤƒ cum sฤƒ combinaศ›i Selenium WebDriver cu TestNG pentru a lansa sesiuni paralele, a valida randarea ศ™i a scala acoperirea pe browserele moderne pentru desktopuri ศ™i dispozitive mobile.

  • ๐ŸŒ De ce conteaza: Utilizatorii reali deschid aceeaศ™i paginฤƒ รฎn browsere diferite, aศ™adar machetele, scripturile ศ™i stilurile trebuie sฤƒ fie valabile peste tot pentru a proteja conversiile ศ™i accesibilitatea.
  • ๐Ÿงช Selenium Configurarea driverului Web: Configuraศ›i ChromeDriver, GeckoDriver, EdgeDriver ศ™i SafariDriver, apoi alegeศ›i instanศ›a potrivitฤƒ printr-o singurฤƒ metodฤƒ parametrizatฤƒ.
  • ???? TestNG alergฤƒri paralele: Un fiศ™ier testing.xml cu parametrul parallel=โ€testsโ€ declanศ™eazฤƒ Chrome, Firefoxศ™i suite Edge รฎn acelaศ™i timp, reducรขnd ciclurile de feedback pentru pachetele mari de regresie.
  • โœ… Defecte comune observate: Scalarea fonturilor, schimbฤƒrile de layout CSS, JavaLacunele รฎn polyfill-urile din scripturi, compatibilitatea cu HTML5, orientarea imaginii ศ™i neconcordanศ›ele dintre sistemul de operare ศ™i browser apar rapid.
  • ๐Ÿ› ๏ธ Laboratoare cloud ศ™i inteligenศ›ฤƒ artificialฤƒ: Sauce Labs, BrowserStack ศ™i LambdaTest extind acoperirea la mii de perechi sistem de operare-browser, iar regresia vizualฤƒ bazatฤƒ pe inteligenศ›ฤƒ artificialฤƒ ศ™i localizatorii cu auto-reparare sporesc fiabilitatea.

Testarea cross-browser รฎn Selenium webdriver

De ce avem nevoie de testare รฎntre browsere?

Aplicaศ›iile web sunt foarte diferite de aplicaศ›iile desktop native. O aplicaศ›ie web poate fi deschisฤƒ รฎn orice browser de cฤƒtre utilizatorul final. De exemplu, unii oameni preferฤƒ sฤƒ deschidฤƒ https://twitter.com in Firefox, รฎn timp ce alศ›ii folosesc Chrome, Safari, Microsoft Edge.

รŽn diagrama de mai jos puteศ›i observa cฤƒ รฎn browserele mai vechi, caseta de conectare a Twitter nu afiศ™eazฤƒ corect colศ›urile rotunjite, รฎn timp ce Chrome modern afiศ™eazฤƒ colศ›urile aศ™a cum este conceput.

Testarea browserului รฎncruciศ™at

Aศ™adar, trebuie sฤƒ ne asigurฤƒm cฤƒ aplicaศ›ia web va funcศ›iona conform aศ™teptฤƒrilor รฎn toate browserele populare, astfel รฎncรขt mai mulศ›i oameni sฤƒ o poatฤƒ accesa ศ™i utiliza.

Acest obiectiv poate fi รฎndeplinit cu Cross Browser Testarea a produsului pe fiecare browser din domeniul de aplicare.

Motive pentru problemele cross-browser

  1. Dimensiunea fontului nepotrivitฤƒ รฎn diferite browsere.
  2. JavaImplementฤƒrile motorului de script diferฤƒ รฎn Chrome (V8), Firefox (Maimuศ›ฤƒ Pฤƒianjen), Safari (JavaScriptCore) ศ™i Edge.
  3. Diferenศ›e รฎntre validarea CSS ศ™i HTML, inclusiv gestionarea prefixelor furnizorului.
  4. Compatibilitate inconsistentฤƒ sau parศ›ialฤƒ cu funcศ›iile HTML5 ศ™i ECMAScript รฎn versiunile mai vechi de browser.
  5. Alinierea paginii, dimensionarea div-urilor ศ™i variaศ›iile de randare flexbox sau grilฤƒ.
  6. Diferenศ›e de orientare a imaginii ศ™i profil de culoare.
  7. Incompatibilitatea browserului cu sistemul de operare subiacent, inclusiv particularitฤƒศ›ile WebView pentru mobil Android ศ™i iOS.

Cum sฤƒ faceศ›i testarea รฎncruciศ™atฤƒ a browserului

Dacฤƒ folosim Selenium WebDriver, putem automatiza cazurile de testare pentru Chrome, Firefox, Microsoft Edgeศ™i browserele Safari.

Pentru a executa cazuri de testare cu diferite browsere pe aceeaศ™i maศ™inฤƒ รฎn acelaศ™i timp, putem integra TestNG cadru cu Selenium WebDriver. Pentru o acoperire mai largฤƒ a sistemului de operare ศ™i a versiunilor, aceeaศ™i suitฤƒ poate fi direcศ›ionatฤƒ cฤƒtre grile cloud precum Sauce Labs, BrowserStack sau LambdaTest printr-un endpoint WebDriver la distanศ›ฤƒ.

Fiศ™ierul testing.xml va arฤƒta astfel:

Testarea browserului รฎncruciศ™at

Acest testing.xml se va mapa cu Caz de testare care aratฤƒ astfel:

Testarea browserului รฎncruciศ™at

Deoarece fiศ™ierul testing.xml are mai multe etichete Test (โ€žChromeTestโ€, โ€žFirefoxTest', 'EdgeTest'), acest caz de testare se va executa o datฤƒ pentru fiecare browser.

Primul test โ€žChromeTestโ€ va transmite valoarea parametrului โ€žbrowserโ€ ca โ€žchromeโ€, deci ChromeDriver va fi executat. Acest caz de testare va rula pe browserul Chrome.

Al doilea testFirefoxTestul va trece valoarea parametrului โ€žbrowserโ€ ca โ€žFirefoxโ€ž, deci FirefoxDriverul va fi executat. Acest caz de testare va rula pe Firefox browser. Adฤƒugarea unui test Edge sau Safari urmeazฤƒ acelaศ™i model.

Guru99CrossBrowserScript.java

Completa Code:

package parallelTest;

import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.safari.SafariDriver;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class CrossBrowserScript {

	WebDriver driver;

	/**
	 * This function will execute before each Test tag in testng.xml
	 * @param browser
	 * @throws Exception
	 */
	@BeforeTest
	@Parameters("browser")
	public void setup(String browser) throws Exception{
		//Check if parameter passed from TestNG is 'firefox'
		if(browser.equalsIgnoreCase("firefox")){
		//create firefox instance
			System.setProperty("webdriver.gecko.driver", ".\\geckodriver.exe");
			driver = new FirefoxDriver();
		}
		//Check if parameter passed as 'chrome'
		else if(browser.equalsIgnoreCase("chrome")){
			//set path to chromedriver.exe
			System.setProperty("webdriver.chrome.driver",".\\chromedriver.exe");
			//create chrome instance
			driver = new ChromeDriver();
		}
		//Check if parameter passed as 'Edge'
		else if(browser.equalsIgnoreCase("Edge")){
			//set path to msedgedriver.exe
			System.setProperty("webdriver.edge.driver",".\\msedgedriver.exe");
			//create Edge instance
			driver = new EdgeDriver();
		}
		//Check if parameter passed as 'Safari'
		else if(browser.equalsIgnoreCase("Safari")){
			//SafariDriver ships with macOS, no driver path needed
			driver = new SafariDriver();
		}
		else{
			//If no browser passed throw exception
			throw new Exception("Browser is not correct");
		}
		driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
	}

	@Test
	public void testParameterWithXML() throws InterruptedException{
		driver.get("https://demo.guru99.com/V4/");
		//Find user name
		WebElement userName = driver.findElement(By.name("uid"));
		//Fill user name
		userName.sendKeys("guru99");
		//Find password
		WebElement password = driver.findElement(By.name("password"));
		//Fill password
		password.sendKeys("guru99");
	}
}

testing.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">

<suite name="TestSuite" thread-count="3" parallel="tests" >

<test name="ChromeTest">

<parameter name="browser" value="Chrome" />

<classes>

<class name="parallelTest.CrossBrowserScript">

</class>

</classes>

</test>

<test name="FirefoxTest">

<parameter name="browser" value="Firefox" />

<classes>

<class name="parallelTest.CrossBrowserScript">

</class>

</classes>

</test>

<test name="EdgeTest">

<parameter name="browser" value="Edge" />

<classes>

<class name="parallelTest.CrossBrowserScript">

</class>

</classes>

</test>

</suite>

NOTฤ‚: Pentru a rula testul, faceศ›i clic dreapta pe testing.xml, selectaศ›i Executare ca ศ™i faceศ›i clic pe TestNG Dupฤƒ.

 Testarea browserului รฎncruciศ™at

Scalare cu grile de browser รฎn cloud

Alergare Selenium WebDriver acoperฤƒ local douฤƒ sau trei browsere, dar utilizatorii reali acceseazฤƒ site-uri din sute de combinaศ›ii de sisteme de operare ศ™i browsere. Laboratoare cloud precum Laboratoarele de sos, BrowserStack ศ™i Test Lambda expuneศ›i un endpoint WebDriver la distanศ›ฤƒ. Indicaศ›i acelaศ™i lucru Selenium testele la nivelul grilei, transmit capabilitฤƒศ›ile dorite pentru browser, versiune, sistem de operare ศ™i rezoluศ›ie, iar suita se scaleazฤƒ pe orizontalฤƒ fฤƒrฤƒ a gestiona driverele locale.

Grilele moderne includ, de asemenea, funcศ›ii asistate de inteligenศ›ฤƒ artificialฤƒ, cum ar fi diferenศ›ierea vizualฤƒ de regresie, localizarea elementelor cu auto-reparare ศ™i scorarea instabilitฤƒศ›ii, care reduc cheltuielile de รฎntreศ›inere pentru suitele de testare cross-browser de lungฤƒ duratฤƒ.

Notฤƒ: Programul dat a fost construit ศ™i testat pe Selenium 4, Crom, Firefox ศ™i Microsoft EdgeDacฤƒ programele dau o eroare, actualizaศ›i fiศ™ierele binare ale driverelor pentru a se potrivi cu versiunea browserului instalat sau utilizaศ›i Selenium Manager care rezolvฤƒ automat driverele.

Descฤƒrcaศ›i Selenium Fiศ™iere de proiect pentru demonstraศ›ia din acest tutorial

รŽntrebฤƒri frecvente

Testarea cross-browser este o tehnicฤƒ de testare funcศ›ionalฤƒ ศ™i vizualฤƒ care verificฤƒ dacฤƒ o aplicaศ›ie web funcศ›ioneazฤƒ la fel pe Chrome, Firefox, Safari ศ™i Microsoft Edge pe desktop ศ™i mobil, inclusiv diferite sisteme de operare ศ™i dimensiuni ale ferestrelor de vizualizare.

Selenium WebDriver oferฤƒ o singurฤƒ API care gestioneazฤƒ Chrome, Firefox, Edge ศ™i Safari prin protocolul oficial W3C WebDriver. Acelaศ™i cod de testare ruleazฤƒ รฎmpotriva oricฤƒrui browser, ceea ce face ca Selenium WebDriver, standardul de facto pentru automatizarea browserului ศ™i testarea cross-browser.

TestNG foloseศ™te fiศ™ierul testing.xml cu parallel="tests" ศ™i thread-count pentru a lansa fiecare etichetฤƒ Test รฎn propriul fir de execuศ›ie. Combinat cu o configuraศ›ie @BeforeTest parametrizatฤƒ, acelaศ™i Selenium Suita WebDriver ruleazฤƒ pe Chrome, Firefoxศ™i Edge simultan, reducรขnd timpul total de execuศ›ie.

Sauce Labs, BrowserStack ศ™i LambdaTest oferฤƒ servicii gฤƒzduite Selenium Grile care expun mii de combinaศ›ii de sisteme de operare ศ™i browsere, inclusiv iOS Safari ศ™i Android Chrome. Indicaศ›i un RemoteWebDriver la punctul final al grilei ศ™i transmiteศ›i capacitฤƒศ›ile dorite pentru a rula acelaศ™i cod la scarฤƒ largฤƒ.

Motoarele de regresie vizualฤƒ bazate pe inteligenศ›ฤƒ artificialฤƒ, cum ar fi cele รฎncorporate รฎn Applitools, Percy ศ™i modulele vizuale ale BrowserStack ศ™i LambdaTest, comparฤƒ capturile de ecran semantic รฎn loc de pixel cu pixel. Acestea ignorฤƒ diferenศ›ele aศ™teptate de anti-aliasing sau de randare a fonturilor รฎntre Chrome, Firefox, Safari ศ™i Edge, detectรขnd รฎn acelaศ™i timp regresiile autentice ale layout-ului, ceea ce reduce semnificativ numฤƒrul fals pozitiv รฎn testele cross-browser.

Da. Framework-uri moderne precum Healenium, Testim, Mabl ศ™i funcศ›iile de inteligenศ›ฤƒ artificialฤƒ din Selenium IDE analizeazฤƒ DOM-ul ศ™i propune selectori XPath sau CSS stabili. Cรขnd un localizator se defecteazฤƒ din cauza unei modificฤƒri a interfeศ›ei utilizator, selectorii generaศ›i de inteligenศ›a artificialฤƒ se auto-reparฤƒ prin notarea elementelor din apropiere ศ™i alegerea celei mai apropiate potriviri, ceea ce menศ›ine suitele de testare cross-browser ecologice, cu mai puศ›inฤƒ รฎntreศ›inere manualฤƒ.

Defectele comune includ neconcordanศ›e de randare a fonturilor ศ™i CSS-ului, JavaInconsistenศ›e ale motorului de script, suport defectuos pentru funcศ›ii HTML5 sau ES, probleme de orientare a imaginilor, probleme de aliniere a paginilor, prefixe lipsฤƒ ale furnizorilor ศ™i erori specifice sistemului de operare pe iOS, Safari sau Android Chrome.

Rezumaศ›i aceastฤƒ postare cu: