Java 中配置 Selenium UI 自动化测试 并生成 Cucumber 报告
要在 Java 中配置 Selenium UI 自动化测试 并生成 Cucumber 报告,通常需要以下几个步骤。
👨💻 Author: Moshow郑锴 ⚡ Powered by: https://zhengkai.blog.csdn.net/
🛠️ 1. 添加 Maven 依赖
在 pom.xml
中加入以下依赖:
<dependencies><!-- Cucumber 核心 --><dependency><groupId>io.cucumber</groupId><artifactId>cucumber-java</artifactId><version>7.17.0</version><scope>test</scope></dependency><!-- Cucumber JUnit --><dependency><groupId>io.cucumber</groupId><artifactId>cucumber-junit</artifactId><version>7.17.0</version><scope>test</scope></dependency><!-- Selenium WebDriver --><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>4.25.0</version><scope>test</scope></dependency><!-- JUnit --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.10.0</version><scope>test</scope></dependency>
</dependencies><!-- 报告插件 -->
<build><plugins><plugin><groupId>net.masterthought</groupId><artifactId>maven-cucumber-reporting</artifactId><version>5.8.0</version><executions><execution><id>generate-cucumber-reports</id><phase>verify</phase><goals><goal>generate</goal></goals><configuration><projectName>UI Automation</projectName><outputDirectory>${project.build.directory}/cucumber-reports</outputDirectory><cucumberOutput>${project.build.directory}/cucumber.json</cucumberOutput></configuration></execution></executions></plugin></plugins>
</build>
📂 2. 项目目录结构
推荐的分层结构:
src/test/java├─ stepdefs/ # 步骤定义│ └─ LoginStep.java├─ pages/ # Page Object│ └─ LoginPage.java├─ runners/ # 测试运行器│ └─ TestRunner.java└─ hooks/ # 钩子(截图、清理)└─ ScreenshotHook.javasrc/test/resources└─ features/└─ login.feature
📝 3. Feature 文件 (BDD 场景)
src/test/resources/features/login.feature
Feature: Login FunctionalityScenario: User logs in successfullyGiven I open the login pageWhen I enter username "testuser" and password "password123"And I click loginThen I should see the homepage
💻 4. Step Definitions
LoginStep.java
package stepdefs;import io.cucumber.java.en.*;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import pages.LoginPage;public class LoginStep {WebDriver driver;LoginPage loginPage;@Given("I open the login page")public void i_open_the_login_page() {driver = new ChromeDriver();driver.get("https://example.com/login");loginPage = new LoginPage(driver);}@When("I enter username {string} and password {string}")public void i_enter_credentials(String username, String password) {loginPage.enterUsername(username);loginPage.enterPassword(password);}@When("I click login")public void i_click_login() {loginPage.clickLogin();}@Then("I should see the homepage")public void i_should_see_homepage() {loginPage.verifyHomePage();driver.quit();}
}
🏗️ 5. Page Object 示例
LoginPage.java
package pages;import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;public class LoginPage {WebDriver driver;By usernameField = By.id("username");By passwordField = By.id("password");By loginButton = By.id("login");public LoginPage(WebDriver driver) {this.driver = driver;}public void enterUsername(String username) {driver.findElement(usernameField).sendKeys(username);}public void enterPassword(String password) {driver.findElement(passwordField).sendKeys(password);}public void clickLogin() {driver.findElement(loginButton).click();}public void verifyHomePage() {assert driver.getTitle().contains("Home");}
}
▶️ 6. 测试运行器
TestRunner.java
package runners;import org.junit.runner.RunWith;
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;@RunWith(Cucumber.class)
@CucumberOptions(features = "src/test/resources/features",glue = {"stepdefs"},plugin = {"pretty","json:target/cucumber.json","html:target/cucumber-html-report"}
)
public class TestRunner {
}
📊 7. 生成报告
执行命令:
mvn clean verify
运行后会生成:
target/cucumber.json
target/cucumber-html-report/index.html
target/cucumber-reports/
下的 美观 HTML 报告(由maven-cucumber-reporting
插件生成)
✅ 总结
依赖:引入 Selenium + Cucumber + 报告插件
结构:分层(Feature → StepDefs → PageObject)
运行器:配置
CucumberOptions
输出 JSON/HTML报告:用
maven-cucumber-reporting
生成可视化报告👨💻 Author: Moshow郑锴 ⚡ Powered by: https://zhengkai.blog.csdn.net/