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/

相关推荐
卓码软件测评3 小时前
第三方CNAS软件测试报告【Gatling和云原生环境集成_在Kubernetes和Docker中部署与执行测试】
测试工具·自动化·测试用例·负载均衡·压力测试
tg-zm8899963 小时前
2025返利商城源码/挂机自动收益可二开多语言/自定义返利比例/三级分销理财商城
java·mysql·php·laravel·1024程序员节
X***C8623 小时前
SpringBoot:几种常用的接口日期格式化方法
java·spring boot·后端
前端达人3 小时前
你的App消息推送为什么石沉大海?看Service Worker源码我终于懂了
java·开发语言
小光学长3 小时前
基于ssm的宠物交易系统的设计与实现850mb48h(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
java·前端·数据库
编程大师哥3 小时前
vxe-table 透视表分组汇总及排序基础配置
java
8***84824 小时前
spring security 超详细使用教程(接入springboot、前后端分离)
java·spring boot·spring
9***J6284 小时前
Spring Boot项目集成Redisson 原始依赖与 Spring Boot Starter 的流程
java·spring boot·后端
程序员勋勋4 小时前
高频Robot Framework软件测试面试题
测试工具·职场和发展
M***Z2104 小时前
SQL 建表语句详解
java·数据库·sql