数据提供者和断言

时间:2015-08-25 17:33:12

标签: java selenium testng

在TestNG上使用DataProviders时,我的测试方法的断言将失败,因为传入的数据导航到不同的URL。有没有办法解决这个问题,即数据只能注入某些/特定的断言?

我不是使用不同的数据测试一个场景,而是使用不同的数据测试多个场景,这是我的冲突产生的地方。

@DataProvider(name = "VINNumbers")
public String[][] VINNumbers() {
    return new String[][] {
            {"2T1BU4ECC834670"},
            {"1GKS2JKJR543989"},
            {"2FTDF0820A04457"}
    };
}

@Test(dataProvider = "VINNumbers")
public void shouldNavigateToCorrespondingVinEnteredIn(String VIN) {
    driver.get(findYourCarPage.getURL() + VIN);
    Assert.assertTrue(reactSRP.dealerListingMSRPIsDisplayed());
}

断言测试页面是否显示了MSRP,但并非所有数据提供者都会显示MSRP,因此会失败。拥有它的唯一数据提供者是第一个数组。有没有办法让dataproviders被调用到特定的断言?

1 个答案:

答案 0 :(得分:2)

如果取决于VIN,是否显示MSRP(布尔值),您可以例如以提供VIN和预期结果的方式创建提供者:

@Test(dataProvider = "VINNumbers")
public void shouldNavigateToCorrespondingVinEnteredIn(String VIN, boolean isMSRPDisplayed) {
    // act
    // assert
    assertThat(reactSRP.dealerListingMSRPIsDisplayed()).is(isMSRPDisplayed);
}

这样您最终会得到如下提供者:

{
    {"2T1BU4ECC834670", true},
    {"1GKS2JKJR543989", false},
    {"2FTDF0820A04457", true},
}

在我看来,这对于简单的案例是可以接受的。为了使断言更具可读性,我将向其添加一个也参数化的自定义消息。

我希望这会有所帮助。

相关问题