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/

相关推荐
llm2009092 小时前
UI自动化框架之Selenium八大元素定位(二)
selenium·ui·自动化
nlog3n2 小时前
分布式短链接系统设计方案
java·分布式
每次的天空3 小时前
Android -Glide实战技术总结
java·spring boot·spring
小二·3 小时前
【IEDA】已解决:IDEA中jdk的版本切换
java·ide·intellij-idea
专注代码七年3 小时前
IDEA大幅度提升编译速度配置
java·ide·intellij-idea
max5006003 小时前
嵌入用户idea到大模型并针对Verilog语言生成任务的微调实验报告
java·ide·intellij-idea
syty20203 小时前
AST语法树应用于sql检查
java·开发语言·ast
Code blocks4 小时前
SpringBoot快速生成二维码
java·spring boot·后端
万笑佛4 小时前
java从word模板生成.doc和.wps文件
java