Cross-Browser-Tests mit Selenium WebTreiber

โšก Intelligente Zusammenfassung

Cross-Browser-Tests mit Selenium WebDriver รผberprรผft, ob sich eine Webanwendung unter Chrome konsistent verhรคlt. FirefoxSafari und Edge. Dieses Tutorial zeigt, wie man sie kombiniert. Selenium WebDriver mit TestNG um parallele Sitzungen zu starten, das Rendering zu validieren und die Abdeckung รผber moderne Desktop- und mobile Browser hinweg zu skalieren.

  • ๐ŸŒ Warum es darauf ankommt: Echte Nutzer รถffnen dieselbe Seite in verschiedenen Browsern, daher mรผssen Layouts, Skripte und Stile รผberall funktionieren, um Konversionen und Barrierefreiheit zu gewรคhrleisten.
  • ๐Ÿงช Selenium WebDriver-Einrichtung: Konfigurieren Sie ChromeDriver, GeckoDriver, EdgeDriver und SafariDriver und wรคhlen Sie dann die richtige Instanz รผber eine einzige parametrisierte Methode aus.
  • ๐Ÿ“ฑ TestNG Parallele Lรคufe: Eine testing.xml-Datei mit parallel="tests" lรถst Chrome aus. Firefoxund gleichzeitig Edge-Suites, wodurch die Feedbackzyklen fรผr groรŸe Regressionspakete verkรผrzt werden.
  • โœ… Hรคufig festgestellte Mรคngel: Schriftskalierung, CSS-Layoutverschiebungen, JavaLรผcken in Script-Polyfills, HTML5-Unterstรผtzung, Bildausrichtung und Inkompatibilitรคten zwischen Betriebssystem und Browser treten schnell zutage.
  • ๏ธ Cloud-Labore und KI: Sauce Labs, BrowserStack und LambdaTest erweitern die Abdeckung auf Tausende von Betriebssystem-Browser-Paaren, und KI-gesteuerte visuelle Regression und selbstheilende Lokalisierungsverfahren erhรถhen die Zuverlรคssigkeit.

Cross-Browser-Testing in Selenium WebTreiber

Warum brauchen wir Cross-Browser-Tests?

Webbasierte Anwendungen unterscheiden sich stark von nativen Desktop-Anwendungen. Eine Webanwendung kann vom Endbenutzer in jedem beliebigen Browser geรถffnet werden. Manche Benutzer bevorzugen es beispielsweise, die Anwendung direkt im Browser zu รถffnen. https://twitter.com in Firefox, wรคhrend andere verwenden Chrome, Safariden Microsoft Edge.

Im folgenden Diagramm ist zu erkennen, dass in รคlteren Browsern die Anmeldebox von Twitter die abgerundeten Ecken nicht korrekt darstellt, wรคhrend der moderne Chrome die Ecken wie vorgesehen darstellt.

Browserรผbergreifendes Testen

Wir mรผssen also sicherstellen, dass die Webanwendung in allen gรคngigen Browsern wie erwartet funktioniert, damit mehr Menschen darauf zugreifen und sie nutzen kรถnnen.

Dieses Ziel kann mit Cross-Browser erreicht werden. Tests des Produkts auf jedem Browser, der in den Geltungsbereich fรคllt.

Grรผnde fรผr browserรผbergreifende Probleme

  1. In verschiedenen Browsern stimmt die SchriftgrรถรŸe nicht รผberein.
  2. JavaDie Implementierungen der Skript-Engine unterscheiden sich in Chrome (V8). Firefox (SpiderMonkey), Safari (JavaScriptCore) und Edge.
  3. Unterschiede bei der Validierung von CSS und HTML, einschlieรŸlich der Behandlung von Herstellerprรคfixen.
  4. Inkonsistente oder unvollstรคndige Unterstรผtzung von HTML5- und ECMAScript-Funktionen in รคlteren Browserversionen.
  5. Seitenausrichtung, Div-GrรถรŸe und Flexbox- oder Grid-Rendering-Varianten.
  6. Unterschiede in Bildausrichtung und Farbprofil.
  7. Browserinkompatibilitรคt mit dem zugrunde liegenden Betriebssystem, einschlieรŸlich der Eigenheiten von mobilen WebView-Funktionen Android und iOS.

So fรผhren Sie browserรผbergreifende Tests durch

Wenn wir verwenden Selenium Mit WebDriver kรถnnen wir Testfรคlle gegen Chrome automatisieren. Firefox, Microsoft Edgeund Safari-Browser.

Um Testfรคlle mit verschiedenen Browsern gleichzeitig auf demselben Rechner auszufรผhren, kรถnnen wir die TestNG Rahmen mit Selenium WebDriver. Fรผr eine breitere Abdeckung von Betriebssystemen und Versionen kann dieselbe Suite รผber einen Remote-WebDriver-Endpunkt auf Cloud-Grids wie Sauce Labs, BrowserStack oder LambdaTest ausgerichtet werden.

Ihre testing.xml-Datei sieht folgendermaรŸen aus:

Browserรผbergreifendes Testen

Diese test.xml wird dem zugeordnet Testfall Das sieht folgendermaรŸen aus:

Browserรผbergreifendes Testen

Da die testing.xml mehrere Test-Tags enthรคlt ('ChromeTest', 'FirefoxTest', 'EdgeTest'), dieser Testfall wird einmal fรผr jeden Browser ausgefรผhrt.

Der erste Test โ€žChromeTestโ€œ รผbergibt dem Parameter โ€žbrowserโ€œ den Wert โ€žchromeโ€œ, sodass ChromeDriver ausgefรผhrt wird. Dieser Testfall wird im Chrome-Browser ausgefรผhrt.

Der zweite TestFirefoxโ€žTestโ€œ รผbergibt den Wert des Parameters โ€žBrowserโ€œ als โ€žFirefox', Also FirefoxDer Treiber wird ausgefรผhrt. Dieser Testfall wird auf dem Firefox Browser. Das Hinzufรผgen eines Edge- oder Safari-Tests folgt dem gleichen Muster.

Guru99CrossBrowserScript.java

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

Anmerkungen: Um den Test auszufรผhren, klicken Sie mit der rechten Maustaste auf testing.xmlWรคhlen Sie โ€žAusfรผhren alsโ€œ und klicken Sie auf TestNG Suite.

 Browserรผbergreifendes Testen

Skalierung mit Cloud-Browser-Grids

Laufen Selenium WebDriver unterstรผtzt lokal zwei oder drei Browser, aber reale Benutzer greifen รผber Hunderte von Betriebssystem- und Browserkombinationen auf Websites zu. Cloud-Labore wie beispielsweise Saucenlabore, BrowserStack und LambdaTest Einen entfernten WebDriver-Endpunkt bereitstellen. Auf denselben verweisen Selenium Die Tests werden im Grid durchgefรผhrt, die gewรผnschten Fรคhigkeiten fรผr Browser, Version, Betriebssystem und Auflรถsung werden erfรผllt, und die Suite skaliert horizontal, ohne dass lokale Treiber verwaltet werden mรผssen.

Moderne Testraster bieten zudem KI-gestรผtzte Funktionen wie visuelle Regressionsvergleiche, selbstheilende Elementlokalisatoren und eine Bewertung der Fehleranfรคlligkeit, wodurch der Wartungsaufwand fรผr langlebige Cross-Browser-Testsuiten reduziert wird.

Hinweis: Das vorliegende Programm wurde erstellt und getestet am Selenium 4, Chrome, Firefox und Microsoft EdgeFalls die Programme einen Fehler ausgeben, aktualisieren Sie bitte die Treiberdateien, sodass sie mit Ihrer installierten Browserversion รผbereinstimmen, oder verwenden Sie Selenium Manager, der Treiber automatisch auflรถst.

Laden Sie Selenium Projektdateien fรผr die Demo in diesem Tutorial

Hรคufig gestellte Fragen

Cross-Browser-Testing ist eine funktionale und visuelle Testmethode, die รผberprรผft, ob eine Webanwendung in Chrome auf die gleiche Weise funktioniert. Firefox, Safari und Microsoft Edge auf Desktop- und Mobilgerรคten, einschlieรŸlich verschiedener Betriebssysteme und BildschirmgrรถรŸen.

Selenium WebDriver bietet eine einheitliche API, die Chrome steuert. FirefoxEdge und Safari werden รผber das offizielle W3C-WebDriver-Protokoll getestet. Derselbe Testcode lรคuft in jedem Browser, was Folgendes ermรถglicht: Selenium WebDriver ist der De-facto-Standard fรผr Browserautomatisierung und Cross-Browser-Testing.

TestNG verwendet die testing.xml-Datei mit parallel="tests" und thread-count, um jedes Test-Tag in einem eigenen Thread auszufรผhren. In Kombination mit einer parametrisierten @BeforeTest-Konfiguration wird dasselbe Selenium Die WebDriver-Suite lรคuft unter Chrome. Firefoxund Edge gleichzeitig, wodurch die gesamte Ausfรผhrungszeit verkรผrzt wird.

Sauce Labs, BrowserStack und LambdaTest bieten gehostete Lรถsungen an. Selenium Raster, die Tausende von Betriebssystem- und Browserkombinationen anzeigen, einschlieรŸlich iOS Safari und Android Chrome. Richten Sie einen RemoteWebDriver auf den Grid-Endpunkt aus und รผbergeben Sie die gewรผnschten Funktionen, um denselben Code in groรŸem Umfang auszufรผhren.

KI-gestรผtzte visuelle Regressions-Engines, wie sie beispielsweise in Applitools, Percy und den visuellen Modulen von BrowserStack und LambdaTest integriert sind, vergleichen Screenshots semantisch statt pixelweise. Sie ignorieren erwartete Unterschiede in der Kantenglรคttung oder der Schriftdarstellung zwischen Chrome, FirefoxSafari und Edge werden unterstรผtzt, wรคhrend gleichzeitig echte Layout-Regressionen erkannt werden, was die Anzahl falsch positiver Ergebnisse in Cross-Browser-Testing-Pipelines deutlich reduziert.

Ja. Moderne Frameworks wie Healenium, Testim, Mabl und die KI-Funktionen in Selenium Die IDE analysiert das DOM und schlรคgt stabile XPath- oder CSS-Selektoren vor. Wenn ein Selektor aufgrund einer UI-ร„nderung nicht mehr funktioniert, beheben KI-generierte Selektoren das Problem selbst, indem sie nahegelegene Elemente bewerten und die beste รœbereinstimmung auswรคhlen. Dadurch bleiben Cross-Browser-Test-Suites fehlerfrei und der manuelle Wartungsaufwand wird reduziert.

Hรคufige Fehler sind Diskrepanzen bei der Schriftart- und CSS-Darstellung. JavaInkonsistenzen in der Skript-Engine, fehlerhafte Unterstรผtzung von HTML5- oder ES-Funktionen, Probleme mit der Bildausrichtung, Probleme mit der Seitenausrichtung, fehlende Herstellerprรคfixe und betriebssystemspezifische Fehler in iOS Safari oder Android Chrome.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: