我正在做一个 Java/Selenium/TestNG 项目,我有 3 个 Selenium 测试要使用 DataProviders 运行。我创建了一个文件读取器类,将 Excel 数据流式传输到一个对象,供我的 DataProvider 使用,无论出于何种原因,只会运行一张特定工作表上的测试。使用其他 2 张纸的测试将被忽略,我对此很陌生,所以非常感谢任何帮助,代码如下供您查看:
public static Object[][] getTestData(String sheetname){
Object[][] data = null;
try{
FileInputStream fis = new FileInputStream(TEST_DATA_WORKBOOK_PATH);
book = WorkbookFactory.create(fis);
sheet = book.getSheet(sheetname);
data = new Object[sheet.getLastRowNum()][sheet.getRow(0).getLastCellNum()];
for (int i = 0; i < sheet.getLastRowNum(); i++) {
for (int j = 0; j < sheet.getRow(0).getLastCellNum(); j++) {
data[i][j] =sheet.getRow(i + 1).getCell(j).toString();
}
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(data);
return data;
}
这是将正确运行的测试:
@Test(description = "register with valid info", dataProvider = "ValidRegDP", enabled = true)
public void registrationTests02(String firstname, String lastname, String email, String address, String city, String state, String zip, String country, String username, String password){
HomePage homePage = new HomePage(getDriver());
LoginPage loginPage = homePage.clkLoginBtn();
RegistrationPage regPage = loginPage.clkRegisterBtn();
regPage.setFirstName(firstname)
.setLastName(lastname)
.setEmail(email)
.setAddress(address)
.setCity(city)
.selectCountry(country)
.selectState(state)
.setZip(zip)
.setUsername(username)
.setPassword(password)
.clkPrivacy()
.clkContinue()
.waitForPresence(By.xpath("//div[@class='alert alert-error alert-danger']"));
Assert.assertEquals(getDriver().getCurrentUrl(), "https://automationteststore.com/index.php?rt=account/create");
}
@DataProvider(name = "ValidRegDP")
public static Object[][] getDataFromValRegProviders(){
Object[][] data = ExcelReader.getTestData("goodRegistration");
return data;
}
这个测试一直被忽略:
@Test(description = "login tests", dataProvider = "LoginProviders", enabled = true)
public void loginTests(String username, String password){
HomePage homePage = new HomePage(getDriver());
LoginPage loginPage = homePage.clkLoginBtn();
loginPage.login(username, password);
Assert.assertEquals(getDriver().getCurrentUrl(), "https://automationteststore.com/index.php?rt=account/login");
}
@DataProvider(name = "LoginProviders")
public static Object[][] getLoginProviders(){
Object[][] data = ExcelReader.getTestData("login");
return data;
}
我检查了工作表名称和 Excel 文件路径,它们是正确的,还尝试用不同的名称和不同的工作表名称创建一个新的 Excel 工作簿,但结果相同,我的测试只有一张工作表被正确读取(有效的注册数据表)
使用 DataProvider 的 Excel 文件的其他测试/测试仍然被忽略。我添加了 dataProviderClass 值以尝试让它工作,但相同的工作表/测试仍然被忽略,只有一个有效的注册测试运行。
我的终端在忽略测试时给出的唯一消息是
SLF4J:未找到 SLF4J 提供程序。 SLF4J:默认为无操作 (NOP) 记录器实现 SLF4J:有关详细信息,请参阅https://www.slf4j.org/codes.html#noProviders。 错误 StatusLogger Log4j2 找不到日志记录实现。请将 log4j-core 添加到类路径中。
我也尝试将其添加到我的构建中,但测试仍然被忽略。我不确定还能尝试什么,任何帮助将不胜感激,谢谢你们!