Selenium

Die Einrichtung von Selenium mit aqua für automatisierte Tests

Diese Anleitung hilft Ihnen, Selenium mit aqua einzurichten, um automatisierte Tests in Ihrer Entwicklungsumgebung oder in BrowserStack durchzuführen. Folgen Sie den Schritten sorgfältig, um sicherzustellen, dass alle Komponenten korrekt konfiguriert sind.

Voraussetzungen

Vergewissern Sie sich, dass Sie die folgenden Dinge vorhanden sind, bevor Sie mit der Einrichtung beginnen:

  • Java JDK, das auf dem Server installiert ist, auf dem der Agent ausgeführt wird

  • Selenium, JUnit, Hamcrest, und Apache Commons IO Bibliotheken heruntergeladen:

30MBSeleniumJunitLibs.ziparchive

  • aqua-Testfall mit den erforderlichen Testdaten für Browser- und Betriebssystemkonfigurationen erstellt

Schritte zum Einrichten und Ausführen von Tests

1. Einrichtung der Umgebung

  1. Java JDK installieren:

    • Laden Sie die neueste Version von Java JDK herunter und installieren Sie sie auf dem Server, auf dem der PowerShell-Agent ausgeführt wird.

  2. Selenium herunterladen:

    • Laden Sie die Selenium Java-Client-Bibliothek von der offiziellen Website von Selenium herunter.

    • Extrahieren Sie den Inhalt in einen Ordner namens Selenium innerhalb des PowerShell-Agent-Verzeichnisses.

  3. JUnit und Hamcrest-Bibliotheken herunterladen:

    • Laden Sie JUnit und Hamcrest von der offiziellen JUnit Download Seite.

    • Legen Sie die heruntergeladenen JAR-Dateien ebenfalls in das Verzeichnis des PowerShell-Agenten.

  4. Apache Commons IO herunterladen:

    • Laden Sie dasorg.apache.commons.io.jar herunter und platzieren Sie es im Verzeichnis des Agenten. Stellen Sie alternativ sicher, dass es im Klassenpfad deklariert ist.

  5. Selenium Server ausführen:

    • Laden Sie den Selenium Standalone-Server von der offiziellen Website von Selenium herunter.

    • Starten Sie den Server mit dem Befehl:

      java -jar selenium-server-4.23.0.jar standalone

2. aqua konfigurieren

  1. Anmeldung bei aqua:

    • melden Sie sich in aquaan.

  2. Erstellen Sie einen Testfall:

    • Navigieren Sie zum Abschnitt Testfälle und erstellen Sie einen neuen Testfall.

  3. Fügen Sie einen Testschritt hinzu:

    • Erstellen Sie innerhalb des Testfalls einen neuen Testschritt.

  4. PowerShell-Automatisierung hinzufügen:

    • Konfigurieren Sie den Testschritt für die Verwendung von PowerShell zur Automatisierung.

  5. PowerShell-Skript hochladen:

    • Kopieren Sie das in execute.ps1 enthaltene PowerShell-Skript in den aqua PowerShell-Automatisierungsschritt.

  6. Java-Dateien hochladen:

    • Laden SieRemoteTest.java undReport.javaals Anhänge zum PowerShell-Schritt hoch. Diese Dateien enthalten die Testlogik und das Protokollierungsprogramm.

3. Einrichtung von Testdaten

  1. Hinzufügen von Testdaten zum Testfall:

    • Fügen Sie die folgenden Testdatenparameter ein, um die Betriebssystem- und Browserkonfigurationen zu steuern:

      • BrowserName

      • BrowserVersion

      • OS

      • OS_Version

    • Diese Parameter werden in RemoteTest.java verwendet, um anzugeben, in welcher Umgebung der Test laufen soll.

4. Ausführung des Tests

  1. Kompilieren Sie die Javadateien:

    • Stellen Sie sicher, dass das PowerShell-Skript (execute.ps1) die Java-Dateien mit dem Befehl javac mit dem entsprechenden Klassenpfad kompiliert, der alle erforderlichen Bibliotheken und Klassen enthält.

  2. Test durchführen:

    • Führen Sie den Test über die aqua-Schnittstelle aus. Das PowerShell-Skript wird ausgeführt, kompiliert und führt die Java-Testdateien aus.

Beispiel für ein PowerShell-Skript (execute.ps1)

# Get Parameters from aqua
param($variables, $tempDir, $aquaCallback)  

$OutputEncoding = [Console]::OutputEncoding

####################################
# Construct classpath for Selenium #
####################################

# Set Java-Classpath and send to aqua-Log
# $classpath = "C:/Program Files (x86)/Selenium/libs/libs/*;C:/Program Files (x86)/Selenium/libs/selenium-java-3.141.59.jar;"+$tempDir+";"
$classpath = $tempDir+"\..\..\hamcrest_1_3\*;"+$tempDir+"\..\..\junit_4_13\*;"+$tempDir+"\..\..\Selenium\*;"+$tempDir+"\..\..\Selenium\selenium-java-4.23.0.jar;"+$tempDir+";"

$aquaCallback.SendMessage($tempDir, [aqua.ProcessEngine.WebServiceProxy.ExecutionLogMessageType]::InformationalDebug, "PowerShell"); 
$aquaCallback.SendMessage("Classpath: "+$classpath, [aqua.ProcessEngine.WebServiceProxy.ExecutionLogMessageType]::InformationalDebug, "PowerShell"); 

#################################################
# Inject Parameters from aqua-Variables-Manager #
#################################################

$fileStr = $tempDir+"\RemoteTest.java"
#$aquaCallback.SendMessage("File: "+$fileStr, [aqua.ProcessEngine.WebServiceProxy.ExecutionLogMessageType]::InformationalDebug, "PowerShell"); 
$tempFileStr = $tempDir+"\Temp.java"
#$aquaCallback.SendMessage("Temp-File: "+$tempFileStr, [aqua.ProcessEngine.WebServiceProxy.ExecutionLogMessageType]::InformationalDebug, "PowerShell"); 

foreach ($var in $variables) {
	$aquaCallback.SendMessage("Set Parameter "+$var.Name+ " to "+$var.Value, [aqua.ProcessEngine.WebServiceProxy.ExecutionLogMessageType]::InformationalDebug, "PowerShell"); 
	$replaceString = "%"+$var.Name+"%"

	Get-Content $fileStr | Foreach-Object {$_.Replace($replaceString, $var.Value)} | Set-Content $tempFileStr
	
	If (Test-Path $fileStr){
		Remove-Item $fileStr
		move-item -path $tempFileStr -destination $fileStr
	}
}

# replace variable %browserstack% so that settings of browserstack are used
$aquaCallback.SendMessage("Replace %browserstack% for online execution on Browserstack", [aqua.ProcessEngine.WebServiceProxy.ExecutionLogMessageType]::InformationalDebug, "PowerShell"); 
Get-Content $fileStr | Foreach-Object {$_.Replace("%browserstack%", "true")} | Set-Content $tempFileStr
If (Test-Path $fileStr){
    Remove-Item $fileStr
    move-item -path $tempFileStr -destination $fileStr
}

################
# Compile Test #
################

# javac -encoding UTF-8 -cp "$classpath" -d . $tempDir/*.java 2>&1 > execution.log
javac -cp "$classpath" -d . $tempDir/*.java 2>&1 >> execution.log

################
# Execute Test #
################

$aquaCallback.SendMessage("Going to execute selenium tests", [aqua.ProcessEngine.WebServiceProxy.ExecutionLogMessageType]::InformationalDebug, "PowerShell"); 

# Run JUnit with Selenium-Script and log to test.log
java -cp "$classpath;." org.junit.runner.JUnitCore RemoteTest 2>&1 >> execution.log

########################
# Send results to aqua #
########################

# Read Execution-Result
$result = $LastExitCode

$aquaCallback.AddExecutionAttachment($tempDir+"/execution.log");  
$aquaCallback.SendMessage("Execution Finished with result: "+$result, [aqua.ProcessEngine.WebServiceProxy.ExecutionLogMessageType]::InformationalDebug, "PowerShell"); 

# Send Log to Attachments which is created by the java code
# If (Test-Path $tempDir+"/test.log"){
    $aquaCallback.AddExecutionAttachment($tempDir+"/test.log");
# }  

# Parse Log
foreach ($line in [System.IO.File]::ReadLines($tempDir+"/test.log")) {
	if($started) {
		if($line -cmatch "STOP") {
			$started = $true;
			break
		}
		$split = $line.Split(";");
		
		$date = $split[0]
		$level = $split[1]
		$message = $split[2]
		$screenshot = $split[3]
		
		if($level -match "INFO") {
			$levelstring = [aqua.ProcessEngine.WebServiceProxy.ExecutionLogMessageType]::InformationalInfo
		} elseif ($level -match "DEBUG") {
			$levelstring = [aqua.ProcessEngine.WebServiceProxy.ExecutionLogMessageType]::InformationalDebug
		} elseif ($level -match "ERROR") {
			$levelstring = [aqua.ProcessEngine.WebServiceProxy.ExecutionLogMessageType]::ExecutionError
		} elseif ($level -match "WARN") {
			$levelstring = [aqua.ProcessEngine.WebServiceProxy.ExecutionLogMessageType]::InformationalWarn
		} else {
			$levelstring = [aqua.ProcessEngine.WebServiceProxy.ExecutionLogMessageType]::ExecutionError
		} 			
		
		if($screenshot) {
			$aquaCallback.SendMessageWithScreenshot($message, $tempDir+"/"+$screenshot, $levelstring, "Selenium");   
		} else {
			$aquaCallback.SendMessage($message, $levelstring, "Selenium");
		}
	}
	# Loop for starting Line
	if(!$started) {
		if($line -cmatch "START") {
			$started = $true;
		}
	}
}

# Cleanup - Does not work
Remove-Item .\screenshot* -include .png -force
Remove-Item .\* -include .class -force
Remove-Item .\test.log -force

# Return Result
if ($result -gt 0)
{
    $aquaCallback.SendMessage("Failures detected. See attached log for details.", [aqua.ProcessEngine.WebServiceProxy.ExecutionLogMessageType]::InformationalDebug, "PowerShell"); 
    return "Fail";
}
else
{
    $aquaCallback.SendMessage("All tests passed.", [aqua.ProcessEngine.WebServiceProxy.ExecutionLogMessageType]::InformationalDebug, "PowerShell"); 
    return "Ready"
}

Hinweise

  • Stellen Sie sicher, dass die Pfade im PowerShell-Skript korrekt auf die Speicherorte der Bibliotheken Selenium, JUnit, Hamcrest und Apache Commons IO eingestellt sind.

  • DieRemoteTest.java sollte eine Logik zur Interpretation der Testdatenparameter und zur entsprechenden Konfiguration des Tests enthalten.

  • DieReport.java Datei sollte die Protokollierung übernehmen und sicherstellen, dass die Protokolle ordnungsgemäß geparst und im aqua-Ausführungsprotokoll angezeigt werden.

Wenn Sie diese Schritte befolgen, werden Sie Selenium-Tests in der aqua-Umgebung erfolgreich einrichten und ausführen können.

Last updated