【问题标题】:How to use dataProvider against multiple testng method using selenium testng code如何使用 selenium testng 代码对多个 testng 方法使用 dataProvider
【发布时间】:2020-12-27 04:06:17
【问题描述】:

您能否建议我的代码可能有什么问题,使用 dataprovider 我的测试方法 Test2Test3 看起来像无法访问,您能否提供解决方案,告诉我如何在不将所有代码放入单个测试方法的情况下解决此问题

  1. 使用数据提供程序时,我只能访问 Test1 代码,这意味着在执行我的代码后,我的输出低于输出(见下面的输出)

输出

测试用例之前

打印测试1

我的预期输出应该在哪里(见下面的输出)

输出

测试用例之前

打印测试1

打印测试2

打印测试2

public class Test extends DriverConfig {
    
    @DataProvider
    public Iterator<String> getTestData() throws Exception {
        driver.manage().timeouts().implicitlyWait(12, TimeUnit.SECONDS);
        ArrayList<String> getclientProduct = sftpCon.clientProduct("Client Type");
        System.out.println("getclientProduct----------" + getclientProduct);
        System.out.println("Before Test case");
        return getclientProduct.iterator();
    
    }
    
    @Test(priority = 1, retryAnalyzer = com.brcc.tool.RetryFailedTestCases.RetryTestCases.class,dataProvider = "getTestData")
    public void A1(String clientName,String clientAddress) throws Exception {

        wait = new WebDriverWait(driver, 10);
        driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
        System.out.println("Print Test1");
    }
    @Test(priority = 2, retryAnalyzer = com.brcc.tool.RetryFailedTestCases.RetryTestCases.class)
    public void A2() throws Exception {
        wait = new WebDriverWait(driver, 80);
        System.out.println("Print Test2");
        
    }

    @Test(priority = 3, retryAnalyzer = com.brcc.tool.RetryFailedTestCases.RetryTestCases.class)
    public void A3() throws Exception {
        wait = new WebDriverWait(driver, 10);
        System.out.println("Print Test3");
        
    }

}

【问题讨论】:

  • 您可以使用 BeforeClass 注解在所有测试方法之前执行代码。 driver.manage().timeouts().implicitlyWait(12, TimeUnit.SECONDS);不得在 DataProvider 内。在测试中使用名称时,会自动从测试方法调用 DataProvider。
  • 它不起作用,我有多个测试数据要测试,根据我的测试数据,我的代码流应该是多次,但我不知道问题出在哪里,我只能得到第一次测试数据的结果不是第二次和第三次......等

标签: selenium selenium-webdriver testing testng testng-dataprovider


【解决方案1】:

代码中未定义数据提供者的名称。数据提供者的名称应与@Test 中使用的名称匹配

@DataProvider (name = "getTestData")

以下应该符合预期的执行顺序。

public class Test extends DriverConfig{


@BeforeClass
public void beforeClass(){
    driver = new ChromeDriver();
    System.out.println("Before Test case");
}

@DataProvider (name = "getTestData")
public Iterator<String> getTestData() throws Exception {
   
    ArrayList<String> getclientProduct = sftpCon.clientProduct("Client Type");
    System.out.println("getclientProduct----------" + getclientProduct);
   
    return getclientProduct.iterator();

}

@Test(priority = 1, retryAnalyzer = com.brcc.tool.RetryFailedTestCases.RetryTestCases.class,dataProvider = "getTestData")
public void A1(String clientName,String clientAddress) throws Exception {

    System.out.println("Print Test1");
}
@Test(priority = 2, retryAnalyzer = com.brcc.tool.RetryFailedTestCases.RetryTestCases.class)
public void A2() throws Exception {
 
    System.out.println("Print Test2");

}

@Test(priority = 3, retryAnalyzer = RetryFailedTestCases.RetryTestCases.class)
public void A3() throws Exception {
    System.out.println("Print Test3");

}

}

【讨论】:

  • 我试过 @DataProvider (name = "getTestData") ,但它仍然不适合我
  • 1.您是否添加了 @BeforeClass 部分? 2. 为什么会有wait = new WebDriverWait(driver, 10);它目前没有做任何事情。 3. 您的 DataProvider 输出应与 Test 方法中的参数匹配。 testng.org/doc/documentation-main.html#parameters-dataproviders
【解决方案2】:

您可以对这些类型的场景使用@Factory 注解。 下面是代码sn-p

public class Test{
        
    String data;
    
    @DataProvider(name="dataProvider")
    public static Iterator<String> getTestData() throws Exception {
        ArrayList<String> data = new ArrayList<String>();
        data.add("Test Data");
        return data.iterator();
    
    }
    
    @Factory(dataProvider="dataProvider")
    public Test(String data) {
        this.data = data;
    }
    
    @Test(priority = 1)
    public void A1() {
        System.out.println("Print Test 1: " + data);
    }
    @Test(priority = 2)
    public void A2() {
        System.out.println("Print Test 2: " + data);
    }

    @Test(priority = 3)
    public void A3()  {
        System.out.println("Print Test 3: " + data);
    }
        
}

输出:

Print Test 1: Test Data
Print Test 2: Test Data
Print Test 3: Test Data

===============================================
Single Test
Total tests run: 3, Passes: 3, Failures: 0, Skips: 0
===============================================

【讨论】:

  • 你能举个例子吗,我的预期输出应该是 Print Test 1: Test Data1 Print Test 2: Test Data1 Print Test 3: Test Data1 Print Test 1: Test Data2 Print Test 2: Test Data2 Print测试 3:测试数据 2 打印测试 1:测试数据 3 打印测试 2:测试数据 3 打印测试 3:测试数据 3
  • 在你的dataprovider函数中,只需在数组列表中添加更多元素@DataProvider(name="dataProvider") public static Iterator&lt;String&gt; getTestData() throws Exception { ArrayList&lt;String&gt; data = new ArrayList&lt;String&gt;(); data.add("Test Data 1"); data.add("Test Data 2"); data.add("Test Data 3"); return data.iterator(); }
  • 能否请您更正此方法,看起来此方法缺少返回类型。@Factory(dataProvider="dataProvider") public Test(String data) { this.data = data; }
猜你喜欢
  • 1970-01-01
  • 2011-05-23
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
  • 2015-07-26
  • 2012-06-05
  • 1970-01-01
  • 2016-04-15
相关资源
最近更新 更多