Test tra browser diversi utilizzando Selenium webdriver

โšก Riepilogo intelligente

Test tra browser diversi utilizzando Selenium WebDriver verifica che un'applicazione web si comporti in modo coerente su Chrome, Firefox, Safari e Edge. Questa esercitazione mostra come combinare Selenium WebDriver con TestNG per avviare sessioni parallele, convalidare il rendering e scalare la copertura su browser desktop e mobili moderni.

  • ๐ŸŒ Perchรฉ รจ importante: Gli utenti reali aprono la stessa pagina in browser diversi, quindi layout, script e stili devono essere coerenti ovunque per proteggere le conversioni e l'accessibilitร .
  • ๐Ÿงช Selenium Configurazione di WebDriver: Configura ChromeDriver, GeckoDriver, EdgeDriver e SafariDriver, quindi seleziona l'istanza corretta tramite un singolo metodo parametrizzato.
  • ???? TestNG Esecuzioni in parallelo: Un file testing.xml con parallel=โ€testsโ€ avvia Chrome, Firefoxe le suite Edge contemporaneamente, riducendo i cicli di feedback per i pacchetti di regressione di grandi dimensioni.
  • โœ… Difetti comuni riscontrati: Ridimensionamento dei caratteri, spostamenti del layout CSS, JavaEmergono rapidamente lacune nei polyfill degli script, problemi di supporto HTML5, orientamento delle immagini e incompatibilitร  tra sistema operativo e browser.
  • ๏ธ Laboratori cloud e intelligenza artificiale: Sauce Labs, BrowserStack e LambdaTest estendono la copertura a migliaia di coppie sistema operativo-browser, mentre la regressione visiva basata sull'intelligenza artificiale e i localizzatori auto-riparanti aumentano l'affidabilitร .

Test cross-browser in Selenium webdriver

Perchรฉ abbiamo bisogno del test su piรน browser?

Le applicazioni basate sul Web sono molto diverse dalle applicazioni desktop native. Un'applicazione Web puรฒ essere aperta in qualsiasi browser dall'utente finale. Ad esempio, alcune persone preferiscono aprire https://twitter.com in Firefox, mentre altri usano Chrome, Safari, o Microsoft Edge.

Nel diagramma sottostante si puรฒ osservare che nei browser meno recenti, la casella di accesso di Twitter non visualizza correttamente gli angoli arrotondati, mentre il Chrome moderno li visualizza come previsto.

Test tra browser

Dobbiamo quindi assicurarci che l'applicazione web funzioni come previsto in tutti i browser piรน diffusi, in modo che un maggior numero di persone possa accedervi e utilizzarla.

Questo obiettivo puรฒ essere raggiunto con Cross Browser Collaudo del prodotto su ogni browser incluso nell'ambito di applicazione.

Motivi dei problemi di compatibilitร  tra browser

  1. Mancata corrispondenza della dimensione del carattere nei diversi browser.
  2. JavaLe implementazioni del motore di script differiscono tra Chrome (V8), Firefox (SpiderMonkey), Safari (JavaScriptCore) e Edge.
  3. Differenze nella validazione di CSS e HTML, inclusa la gestione dei prefissi dei fornitori.
  4. Supporto incoerente o parziale delle funzionalitร  HTML5 ed ECMAScript nelle versioni meno recenti dei browser.
  5. Allineamento della pagina, dimensionamento dei div e varianti di rendering flexbox o a griglia.
  6. Differenze di orientamento dell'immagine e di profilo colore.
  7. Incompatibilitร  del browser con il sistema operativo sottostante, inclusi i problemi di WebView mobile su Android e iOS.

Come eseguire test su piรน browser

Se stiamo usando Selenium WebDriver, possiamo automatizzare i casi di test contro Chrome, Firefox, Microsoft Edgee i browser Safari.

Per eseguire casi di test con browser diversi sulla stessa macchina contemporaneamente, possiamo integrare il TestNG quadro con Selenium WebDriver. Per una copertura piรน ampia di sistemi operativi e versioni, la stessa suite puรฒ essere indirizzata a piattaforme cloud come Sauce Labs, BrowserStack o LambdaTest tramite un endpoint WebDriver remoto.

Il tuo file testing.xml avrร  questo aspetto:

Test tra browser

Questo testing.xml verrร  mappato con il file Test Case che ha questo aspetto:

Test tra browser

Poichรฉ il file testing.xml contiene piรน tag Test ('ChromeTest', 'FirefoxTest', 'EdgeTest'), questo caso di test verrร  eseguito una volta per ogni browser.

Il primo test, denominato 'ChromeTest', passerร  il valore 'chrome' al parametro 'browser', pertanto verrร  eseguito ChromeDriver. Questo caso di test verrร  eseguito sul browser Chrome.

Il secondo test 'FirefoxTest' trasmetterร  il valore del parametro 'browser' come 'Firefox', COSรŒ FirefoxIl driver verrร  eseguito. Questo caso di test verrร  eseguito su Firefox browser. L'aggiunta di un test con Edge o Safari segue lo stesso schema.

Guru99CrossBrowserScript.java

Completato 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");
	}
}

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

NOTA: Per eseguire il test, fare clic con il pulsante destro del mouse su test.xml, seleziona Esegui come e fai clic TestNG Suite.

 Test tra browser

Scalabilitร  con Cloud Browser Grids

corsa Selenium WebDriver supporta localmente due o tre browser, ma gli utenti reali accedono ai siti da centinaia di combinazioni di sistemi operativi e browser. I laboratori cloud come Laboratori di salsa, BrowserStacke LambdaTest esporre un endpoint WebDriver remoto. Puntare lo stesso Selenium I test sulla griglia superano i requisiti di funzionalitร  richiesti per browser, versione, sistema operativo e risoluzione, e la suite si adatta orizzontalmente senza necessitร  di gestire driver locali.

Le griglie moderne mettono inoltre in evidenza funzionalitร  supportate dall'IA, come il confronto visivo della regressione, i localizzatori di elementi auto-riparanti e la valutazione dell'instabilitร , che riducono i costi di manutenzione delle suite di test cross-browser a lungo termine.

Nota: Il programma fornito รจ stato costruito e testato su Selenium 4, Chrome, Firefoxe Microsoft EdgeSe i programmi restituiscono un errore, aggiornare i file binari del driver in modo che corrispondano alla versione del browser installata oppure utilizzare Selenium Gestore che risolve automaticamente i driver.

Scarica la Selenium File di progetto per la demo in questo tutorial

DOMANDE FREQUENTI

Il cross browser testing รจ una tecnica di test funzionale e visiva che verifica che un'applicazione web funzioni allo stesso modo su Chrome, Firefox, Safari e Microsoft Edge su desktop e dispositivi mobili, inclusi diversi sistemi operativi e dimensioni dello schermo.

Selenium WebDriver fornisce un'unica API che gestisce Chrome, Firefox, Edge e Safari tramite il protocollo ufficiale W3C WebDriver. Lo stesso codice di test viene eseguito su qualsiasi browser, il che rende Selenium WebDriver รจ lo standard di fatto per l'automazione dei browser e i test cross-browser.

TestNG utilizza il file testing.xml con parallel="tests" e thread-count per avviare ogni tag Test nel proprio thread. In combinazione con una configurazione @BeforeTest parametrizzata, lo stesso Selenium WebDriversuite funziona su Chrome, Firefoxe Edge contemporaneamente, riducendo il tempo di esecuzione complessivo.

Sauce Labs, BrowserStack e LambdaTest forniscono servizi ospitati Selenium Griglie che espongono migliaia di combinazioni di sistemi operativi e browser, tra cui iOS Safari e Android Chrome. Punta un RemoteWebDriver all'endpoint della griglia e passa le funzionalitร  desiderate per eseguire lo stesso codice su larga scala.

I motori di regressione visiva basati sull'IA, come quelli integrati in Applitools, Percy e nei moduli visivi di BrowserStack e LambdaTest, confrontano gli screenshot semanticamente invece che pixel per pixel. Ignorano le differenze previste di anti-aliasing o di rendering dei caratteri tra Chrome, Firefox, Safari ed Edge, pur continuando a rilevare regressioni di layout reali, riducendo drasticamente i falsi positivi nelle pipeline di test cross-browser.

Sรฌ. Framework moderni come Healenium, Testim, Mabl e le funzionalitร  di IA in Selenium L'IDE analizza il DOM e propone selettori XPath o CSS stabili. Quando un localizzatore smette di funzionare a causa di una modifica dell'interfaccia utente, i selettori generati dall'IA si autoriparano valutando gli elementi vicini e scegliendo la corrispondenza piรน vicina, mantenendo cosรฌ le suite di test cross-browser funzionanti con una manutenzione manuale ridotta al minimo.

I difetti comuni includono la mancata corrispondenza tra font e rendering CSS, JavaIncoerenze del motore di script, supporto delle funzionalitร  HTML5 o ES non funzionante, problemi di orientamento delle immagini, problemi di allineamento della pagina, prefissi del fornitore mancanti e errori specifici del sistema operativo su iOS Safari o Android Chrome.

Riassumi questo post con: