【问题标题】:Run all Test for one iteration of dataprovider and so on till the end of data in data provider对数据提供者的一次迭代运行所有测试,依此类推,直到数据提供者中的数据结束
【发布时间】:2018-05-08 09:53:24
【问题描述】:

实际上数据提供者有日期和品牌名称,所以我的第一个 @test 只能选择日期和品牌名称,然后在第二个 @test 中它将针对相同的日期和品牌名称获取数据,并且在第二次迭代中,第一个 @test 取第二个日期和@dataprovider 的第二个品牌名称,然后第二个 @test 将做自己的工作,依此类推,请帮助我 提前致谢。 示例如下:

`@DataProvider
  public static Object[][] dp() {
    return new Object[][] {
      new Object[] { "23", "Online" },
      new Object[] { "24", "Online" },
    };
  }
@Test(dataProvider = "dp")
  public void DateAndBrand(String date,String game) throws InterruptedException{
System.out.println(date"  "+game)
}
@Test
  public void CheckDifference(){
System.out.println("in second Test");
} 

我想要输出类似:

23  Online 
in second Test
24  Online
in second Test

我的 testng.xml 文件如下:

<suite name="Automation" parallel="false">
<test name="Data Difference">
<classes>
 <class name="monitoring.DataCompareAuto">
  <methods>
        <include name="DateAndBrand"/>
        <include name="CheckDifference" />
    </methods>
  </class>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->

【问题讨论】:

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


    【解决方案1】:

    每当我们使用带有@Test 注释的dataProvider 属性时,该方法被调用的次数是@DataProvider 返回的数组中对象的数量。

    要实现您所指的输出,您可以使用 ITestListener 接口或 TestListenerAdapter 类。

    使用这些侦听器,您可以在开始、成功、失败等情况下拦截每个测试方法。您可以在那里执行任何操作。

    import org.testng.ITestContext;
    import org.testng.ITestListener;
    import org.testng.ITestResult;
    
    public class TestInterceptor implements ITestListener {
        @Override
        public void onFinish(ITestContext arg0) {
            // TODO Auto-generated method stub
    
        }
        @Override
        public void onStart(ITestContext arg0) {
            // TODO Auto-generated method stub
    
        }
        @Override
        public void onTestFailedButWithinSuccessPercentage(ITestResult arg0) {
            // TODO Auto-generated method stub
    
        }
        @Override
        public void onTestFailure(ITestResult arg0) {
            // TODO Auto-generated method stub
    
        }
        @Override
        public void onTestSkipped(ITestResult arg0) {
            // TODO Auto-generated method stub
    
        }
        @Override
        public void onTestStart(ITestResult arg0) {
            // TODO Auto-generated method stub
    
        }
        @Override
        public void onTestSuccess(ITestResult arg0) {
            System.out.println(" Can perform CheckDifference operation here.");
    
        }
    
    }
    

    所以在这种情况下你的输出将是

    23  Online
     Can perform CheckDifference operation here.
    24  Online
     Can perform CheckDifference operation here.
    in second Test
     Can perform CheckDifference operation here.
    

    记得在你的 testng.xml 文件中添加监听器

    【讨论】:

    • 感谢它工作正常,但在我的代码中,当我编写 @Override public void onTestSuccess(ITestResult arg0) { driver.findElements(By.tagName("tr")); } 它给出了一个异常,因为没有找到元素。
    • 这是因为 java 编译器。您的项目必须具有早于 1.6 的 java 编译器版本。从 Project > Build Path 将其更改为最新的编译器版本。如果有帮助,请告诉我。
    • 没有 java 编译器版本是 1.8 。它不起作用。我将上面的 标签添加到 标签。正确放置 的方法是正确的吗?如果有其他方式,请提供帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-23
    • 2022-01-18
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多