You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TestNG测试套件仅执行Login类,Fetch类无法运行求助

问题排查与解决方案

我一眼就找到问题根源了——你的Fetch类因为自定义了带参数的构造方法,导致TestNG无法实例化这个类,所以它的所有测试方法根本没机会执行!

具体原因分析

TestNG在运行测试类时,默认会调用类的无参构造方法来创建实例。而你在Fetch类里定义了这个带参构造:

public Fetch(WebDriver driver) {
    this.driver = driver;
}

这就覆盖了Java默认提供的无参构造方法,TestNG不知道该传入什么WebDriver参数,所以直接跳过了这个类的所有测试,而且不会抛出任何报错(因为TestNG认为这个类不是可执行的测试类)。

另外,你完全没必要通过构造方法传递driver:MainClass里已经把driver定义成了public static变量,Fetch继承了Login,Login又继承了MainClass,所以Fetch可以直接使用这个静态driver,根本不需要额外传递。

修复步骤

1. 删除Fetch类的带参构造方法

直接删掉这段构造方法代码,让Java自动提供默认的无参构造,TestNG就能正常实例化Fetch类了。

2. 移除类级多余的@Test注解

Fetch类顶部的@Test注解是多余的,TestNG的类级@Test一般用于配置类的测试属性(比如enabled=false),这里你不需要,删掉它避免干扰。

修改后的Fetch类代码示例

package fc;
import org.openqa.selenium.By;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.Test;

public class Fetch extends Login {
    WebDriverWait wait = new WebDriverWait(MainClass.driver, 10);
    By fetch = By.xpath("//div[@class='fetch btn_cst hint--left']");
    By accountNumber = By.xpath("//input[@id='accountNumber']");
    By load = By.xpath("//a[@class='btn_cst']");
    By fetchClose = By.xpath("//span[@class='popupfetchClose']");
    By popup = By.xpath("//a[@class='cancel']");
    generateData randomData = new generateData();

    @Test(priority = 1)
    public void fetchButtonClick() {
        try {
            driver.findElement(fetch).click();
        } catch(Exception e) {
            wait.until(ExpectedConditions.visibilityOfElementLocated(fetch));
            driver.findElement(fetch).click();
        }
    }

    // 其他测试方法保持不变...
}

额外检查点

  • 确认你的TestNG运行配置是正确加载了这个XML套件,没有只选中Login类单独运行。
  • 检查Fetch类的测试方法上的@Test注解都正确,没有被设置enabled=false之类的禁用属性。

修改完成后重新运行测试套件,Fetch类的测试方法应该就能正常执行了!

内容的提问来源于stack exchange,提问作者Melvin Xavier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:26:12