Testing with Selenium
Diese Dokumentation beschreibt den Prozess zum Testen von webforJ-Anwendungen mit Selenium, wobei der Schwerpunkt auf der HelloWorldView aus dem webforj-archetype-hello-world liegt.
Um mehr über das webforj-archetype-hello-world zu erfahren, siehe den Abschnitt Einführung in die Grundlagen der App.
Voraussetzungen
Bevor Sie die Selenium-Tests ausführen, stellen Sie sicher, dass Folgendes erfüllt ist:
- Die webforJ-App ist korrekt eingerichtet und läuft auf Ihrem lokalen Server.
- Sie haben installiert:
- Selenium Java-Bindings.
- Ein kompatibler WebDriver für Ihren Browser.
- Maven für Projektabhängigkeiten.
Maven-Konfiguration
Fügen Sie die erforderlichen Abhängigkeiten in Ihre pom.xml für Selenium und andere Testbibliotheken hinzu:
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.27.0</version>
</dependency>
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>5.9.2</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Testbeispiel: HelloWorldView
Der folgende Code demonstriert einen auf Selenium basierenden Test für die Komponente HelloWorldView.
package com.example.views;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
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.support.ui.WebDriverWait;
import static java.time.Duration.ofSeconds;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.openqa.selenium.support.ui.ExpectedConditions.titleIs;
import io.github.bonigarcia.wdm.WebDriverManager;
class HelloWorldViewTest {
private WebDriver driver;
private static final String PORT = System.getProperty("server.port", "8080");
@BeforeAll
static void setupAll() {
WebDriverManager.chromedriver().setup();
}
@BeforeEach
void setup() {
driver = new ChromeDriver();
driver.get("http://localhost:" + PORT + "/");
new WebDriverWait(driver, ofSeconds(30))
.until(titleIs("webforJ Hello World"));
}
@AfterEach
void teardown() {
if (driver != null) {
driver.quit();
}
}
@Test
void shouldClickButton() {
WebElement button = driver.findElement(By.tagName("dwc-button"));
assertEquals("Say Hello", button.getText(), "Buttontext stimmt nicht überein!");
}
}
Wichtige Schritte
-
WebDriver initialisieren:
- Verwenden Sie
WebDriverManager, um das Treiber-Executable für den Browser automatisch zu verwalten.
- Verwenden Sie
-
Testumgebung einrichten:
- Starten Sie den Testserver unter
http://localhost:<port>/. - Warten Sie, bis der Seitentitel dem erwarteten
webforJ Hello Worldentspricht.
- Starten Sie den Testserver unter
-
Mit Elementen interagieren:
- Lokalisieren Sie Elemente mit
By.tagName,By.idoder anderen Selenium-Lokatoren. - Überprüfen Sie erwartete Verhaltensweisen wie Button-Klicks oder Textänderungen.
- Lokalisieren Sie Elemente mit
Da webforJ eine Einzelseiten-Webanwendung produziert, ist Selenium sich nach dem Laden der Anfangsseite nicht über die DOM-Manipulation im Klaren. Sie können die WebDriverWait-API von Selenium verwenden, um zu warten, bis das DOM kompiliert wurde.
- Teardown:
- Beenden Sie die WebDriver-Session, um Ressourcen freizugeben.
Tests ausführen
-
Starten Sie den webforJ-Server:
mvn jetty:run -
Führen Sie die Testfälle aus:
mvn test
Erwartetes Verhalten
- Beim Besuch von
http://localhost:<port>/wird die SeiteHelloWorldViewgeladen. - Das Element
dwc-buttonmit dem TextSay Hellosollte vorhanden sein.