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/

相关推荐
独自破碎E2 小时前
Spring AI怎么实现结构化输出?
java·人工智能·spring
h7ml2 小时前
企业微信API接口对接系统中Java后端的持续集成/持续部署(CI/CD)落地技巧
java·ci/cd·企业微信
星火开发设计2 小时前
C++ multimap 全面解析与实战指南
java·开发语言·数据结构·c++·学习·知识
码农水水2 小时前
阿里Java面试被问:RocketMQ的消息轨迹追踪实现
java·开发语言·windows·算法·面试·rocketmq·java-rocketmq
APIshop2 小时前
实战解析:1688详情api商品sku、主图数据
java·服务器·windows
醇氧2 小时前
【maven】maven-site-plugin 插件
java·log4j·maven
kaico20182 小时前
Java线程池
java
菜鸟233号2 小时前
力扣494 目标和 java实现
java·数据结构·算法·leetcode
有一个好名字2 小时前
力扣-字符串解码
java·算法·leetcode