TestNG:经过dataProvider的一次迭代后转到下一个测试

问题描述 投票:0回答:1

因此,我有2个测试,一个用于检查注册的“ test01_signIn”,如果通过,则转到第二个测试“ test02_CheckNewsStandElements”,该测试检查主页元素的可见性,唯一的问题是第一个测试具有以下数据提供程序:

@Test(dataProvider = "Data")
public void test01_signIn(String idMedia, String nomMedia, String idSSO, String mdpSSO, String lien) {
     //Test
}

@Test
public void test02_CheckNewsStandElements(){
    WebDriverWait wait = new WebDriverWait(driver,5);
    WebElement modalCloseButton = null;
    modalCloseButton = nsp.modalCloseButton(driver);
    try{
        wait.until(ExpectedConditions.visibilityOf(modalCloseButton));
    }catch(TimeoutException e){
        System.out.println("The Element isn't visible");
    }
}

@DataProvider(name="Data")
public Object [][] getLists() throws IOException, GeneralSecurityException {
    Object [][] objects = newEDLI.importData().clone();
    return objects;
}

我得到的结果更像是:测试1测试1测试1...测试2测试2测试2。当我正在寻找这样的结果时:Test1 Test2 Test 1 Test 2

java selenium testng
1个回答
0
投票

[当您使用@DataProvider将数据注入测试方法时,TestNg将连续运行此方法的次数是您拥有的数据的次数。此外,您的测试方法之间没有依赖关系。因此,您的test01_signIn独立于test02_CheckNewsStandElements执行。

您可以考虑使用@Factory来组织执行顺序。在这种情况下,您可以将数据注入到测试类构造函数中(数据提供者应该是静态的),并且可以管理测试方法执行的顺序:

public class FactoryTest {
    private String idMedia;
    private String nomMedia;
    // .. rest of your data

    @Factory(dataProvider = "Data")
    public FactoryTest(String idMedia, String nomMedia, ...) {
        this.idMedia = idMedia;
        this.nomMedia = nomMedia;
        // set the rest of your fields
    }

    @DataProvider(name = "Data")
    public static Object[] getList() {
        return newEDLI.importData().clone();
    }

    @Test
    public void test01_signIn() {
        // use data from class members 
    }

    @Test(dependsOnMethods = "test01_signIn")
    public void test02_CheckNewsStandElements() {
        WebDriverWait wait = new WebDriverWait(driver,5);
        WebElement modalCloseButton = null;
        modalCloseButton = nsp.modalCloseButton(driver);
        try{
            wait.until(ExpectedConditions.visibilityOf(modalCloseButton));
        }catch(TimeoutException e){
            System.out.println("The Element isn't visible");
        }
    }
}

注意:尽管将按照正确的顺序执行测试,但是在测试报告中仍将对它们进行分组和排序。

© www.soinside.com 2019 - 2024. All rights reserved.