Cross-Browser-Testing mit Visual Studio und Coded UI Tests

21. März 2013 Softwaretest von Eric Kubenka

Seit Erscheinen des Update 1 für Visual Studio 2012 ermöglicht Microsoft das browserübergreifende Testen von Webanwendungen mit Coded-UI-Tests. Für Google Chrome, Firefox und Internet-Explorer können nun automatisierte Oberflächentests durchgeführt werden. Opera und Safari werden nicht unterstützt. Der Firefox sollte in Version 15 oder höher vorliegen. Beim Chrome ist mindestens Version 21 von Nöten.

Um die Oberflächentests im Chrome und Firefox zum laufen zu bringen werden die Selenium .NET-Bindings, sowie der Selenium ChromeDriver benötigt. Letzteres ist ein kleines Tool, welches sich bei der Ausführung von CUITs im Chrome immer mitstartet und so die Funktionen gewährleistet. Die beiden Tools können mittels diesem Installer installiert werden, wobei eine Internetverbindung bestehen muss und Visual Studio Update 2 CTP 3 oder höher installiert sein sollte. Falls ihr noch nicht im besitz dieses Updates seit, so könnt ihr der beschriebenen Anleitung folgen, um die Tools manuell zu installieren.

Nachdem die Installation der “Selenium Components for Coded UI Cross Browser Testing” abgeschlossen war, habe ich mir ein neues CUIT-Projekt angelegt und mit einigen Codezeilen sofort die Cross-Browser-Unterstützung getestet.

[TestMethod]
public void RunCodedUiTestsInBrowserLoop()
{
	// Define the browsers that should be used for the following simple test
	var browsers = new string[3]{"chrome", "IE", "Firefox"};

	foreach (var browser in browsers)
	{
		BrowserWindow.CurrentBrowser = browser;
		BrowserWindow browserWindow = BrowserWindow.Launch(new Uri("http://google.de"));
		// Check for element
		Assert.IsTrue(UiElement.Exists);
		browserWindow.Close();

		Console.WriteLine("Test Run with {0} completed.", browser);
	}
}

Wenn das Ausführen dieser wenigen Zeilen bereits zu einem ähnlichem Fehlerzustand wie dem folgendem führt, dann ist vermutlich bei der Installation der Seleniumkomponenten etwas schief gelaufen. Da bei mir keine Fehler auftraten, verweise ich an dieser Stelle auf diesen Blog-Eintrag. Möglicherweise hilft dieser beim Troubleshooting.

The playback engine could not find the Selenium binaries required to run cross browser coded UI tests. This may be because the Selenium .NET bindings and Selenium Chrome driver are not installed or an older version of the Selenium Components Installer was used.

Doch normalerweise sollte mit dem Visual Studio 2012 Update 2 CTP 4 und dem Installer nicht schief gehen, weshalb der Test bei mir erfolgreich ausgeführt wurde.

Testergebnise der Browser-SchleifeOutput der Browser-Schleife

Der kleine Codesnippet öffnet also für jeden definierten Browser ein neues Fenster und navigiert zur Startseite von Google. Doch schnell wird bei dieser Vorgehensweise deutlich, dass beim Fehlschalgen des Tests im Google Chrome der Test in den weiteren Browsern nicht mehr zur Ausführung kommt.

Abhilfe schafft hier das datengesteuerte Ausführen der Tests (datadriven tests). Dazu habe ich eine CSV-Datei “browsers.csv” im Hauptordner meines Projekts angelegt und wie unten aufgeführt gefüllt. Wichtig hierbei: Es darf nicht vergessen werden den Wert für die Eigenschaft “Copy to Output Directory”auf “Copy always”, beziehungsweise “Copy if newer”  zu setzen.

BrowserType
IE
Firefox
Chrome

Folgend muss die Testmethode ein klein wenig modifiziert werden, wobei auf dem Hinzufügen des “DataSource”-Attributs die höchste Priorität liegt.

[TestMethod]
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", @"|DataDirectory|\browsers.csv", "browsers#csv", DataAccessMethod.Sequential)]
public void RunCodedUiTestsInBrowserLoopDataDriven()
{
	// get the browser from the datasource an set it as CurrentBrowser
	BrowserWindow.CurrentBrowser = TestContext.DataRow[0].ToString();
	BrowserWindow browserWindow = BrowserWindow.Launch(new Uri("http://google.de"));
	// Exists element?
	Assert.IsTrue(UiElement.Exists);
	browserWindow.Close();

	Console.WriteLine("Test Run with {0} completed.", TestContext.DataRow[0].ToString());	
}

Wird die Methode so zur Ausführung gebracht ändert sich das Ausgabeverhalten im des Tests im “Test Explorer”-Fenster zu  folgender:

Datadriven Browserloop - Datengesteuerte Browserscheleife

Es ist zu sehen, dass für jede Zeile in der “browsers.csv” ein extra Testlauf durchgeführt wird. So kann in einem Browser der CUIT fehlschlagen und dennoch kommt der Test in den anderen Browsern zur Ausführung.

 

Dank der Selenium Components sind mit Visual Studio 2012 nun endlich sorgenfreie Cross-Browser-CUITs möglich. Doch es sind wie gesagt auch klare Grenzen gesetzt: Opera und Safari lassen sich nicht testen. In diesem Sinne. Happy Testing.

Zurück