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
相关产品推荐
相关产品推荐

