Java 中配置 Selenium UI 自动化测试 并生成 Cucumber 报告

要在 Java 中配置 Selenium UI 自动化测试 并生成 Cucumber 报告,通常需要以下几个步骤。

👨‍💻 Author: Moshow郑锴 ⚡ Powered by: https://zhengkai.blog.csdn.net/

🛠️ 1. 添加 Maven 依赖

pom.xml 中加入以下依赖:

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. 项目目录结构

推荐的分层结构:

Groovy 复制代码
src/test/java
 ├─ stepdefs/        # 步骤定义
 │    └─ LoginStep.java
 ├─ pages/           # Page Object
 │    └─ LoginPage.java
 ├─ runners/         # 测试运行器
 │    └─ TestRunner.java
 └─ hooks/           # 钩子(截图、清理)
      └─ ScreenshotHook.java

src/test/resources
 └─ features/
      └─ login.feature

📝 3. Feature 文件 (BDD 场景)

src/test/resources/features/login.feature

Groovy 复制代码
Feature: Login Functionality

  Scenario: User logs in successfully
    Given I open the login page
    When I enter username "testuser" and password "password123"
    And I click login
    Then I should see the homepage

💻 4. Step Definitions

LoginStep.java

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

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

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. 生成报告

执行命令:

bash 复制代码
mvn clean verify
  • 运行后会生成:

    • target/cucumber.json

    • target/cucumber-html-report/index.html

    • target/cucumber-reports/ 下的 美观 HTML 报告 (由 maven-cucumber-reporting 插件生成)

✅ 总结

  1. 依赖:引入 Selenium + Cucumber + 报告插件

  2. 结构:分层(Feature → StepDefs → PageObject)

  3. 运行器 :配置 CucumberOptions 输出 JSON/HTML

  4. 报告 :用 maven-cucumber-reporting 生成可视化报告

  5. 👨‍💻 Author: Moshow郑锴 ⚡ Powered by: https://zhengkai.blog.csdn.net/

相关推荐
IT爱学堂41 分钟前
尚硅谷 - 2025年3月Java+AI大模型应用开发
java·开发语言·人工智能
小贤plus1 小时前
SpringBoot 三大核心注解精讲:@ControllerAdvice、@RestControllerAdvice、@Validated 分组校验(实战)
java
吠品2 小时前
Java byte数组与String互转:编码细节与踩坑记录
java·linux·服务器
晚风醉蝶2 小时前
1-6-插入排序-InsertionSort
java·数据结构·排序算法
yaoxin5211233 小时前
497. Java 反射 - 使用反射读取注解
java·开发语言·python
eralong3 小时前
Java 面向对象:继承、多态、接口
java·后端
哦虎!4 小时前
【数据库】事务
java·数据库·mysql
CDN3604 小时前
流媒体加速实践:出海东南亚短视频点播频繁缓冲,HLS 分片与 Nginx 配置调优
java·网络·nginx·流媒体加速
程序员黑豆4 小时前
Java中的null与NullPointerException完全指南:安全处理、实战排查与面试题
java·前端·ai编程
晴天165 小时前
Electron面试题-Day19
java·javascript·electron