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/

相关推荐
苏渡苇12 小时前
优雅应对异常,从“try-catch堆砌”到“设计驱动”
java·后端·设计模式·学习方法·责任链模式
团子的二进制世界12 小时前
G1垃圾收集器是如何工作的?
java·jvm·算法
long31612 小时前
Aho-Corasick 模式搜索算法
java·数据结构·spring boot·后端·算法·排序算法
rannn_11113 小时前
【苍穹外卖|Day4】套餐页面开发(新增套餐、分页查询、删除套餐、修改套餐、起售停售)
java·spring boot·后端·学习
灵感菇_13 小时前
Java HashMap全面解析
java·开发语言
qq_124987075313 小时前
基于JavaWeb的大学生房屋租赁系统(源码+论文+部署+安装)
java·数据库·人工智能·spring boot·计算机视觉·毕业设计·计算机毕业设计
短剑重铸之日13 小时前
《设计模式》第十一篇:总结
java·后端·设计模式·总结
若鱼191913 小时前
SpringBoot4.0新特性-Observability让生产环境更易于观测
java·spring
觉醒大王13 小时前
强女思维:着急,是贪欲外显的相。
java·论文阅读·笔记·深度学习·学习·自然语言处理·学习方法
努力学编程呀(๑•ี_เ•ี๑)13 小时前
【在 IntelliJ IDEA 中切换项目 JDK 版本】
java·开发语言·intellij-idea