Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将参数TestNG DataProvider parallel=true从@Test传递给侦听器_Java_Selenium_Testng_Testng Dataprovider - Fatal编程技术网

Java 将参数TestNG DataProvider parallel=true从@Test传递给侦听器

Java 将参数TestNG DataProvider parallel=true从@Test传递给侦听器,java,selenium,testng,testng-dataprovider,Java,Selenium,Testng,Testng Dataprovider,我让DataProvider生成一些数据并将其提供给@Test @DataProvider(name=“dp”,parallel=true) 公共对象[][]getBrowser(方法m){ 迭代器Iterator=Constants.browsers.Iterator(); 字符串浏览器=null; 对象[][]数据=新对象[2][1]; 对于(int i=0;i

我让DataProvider生成一些数据并将其提供给@Test

@DataProvider(name=“dp”,parallel=true)
公共对象[][]getBrowser(方法m){
迭代器Iterator=Constants.browsers.Iterator();
字符串浏览器=null;
对象[][]数据=新对象[2][1];
对于(int i=0;i<2;i++){
if(iterator.hasNext()){
browser=iterator.next();
数据[i][0]=浏览器;
}
}
返回数据;

}
按照在ITestContext中为ITestResult设置的方式设置属性

@Test(dataProviderClass = TestUtilities.class, dataProvider = "dp")
public void testing(String browser, ITestContext context) throws InterruptedException {

  ITestResult result = Reporter.getCurrentTestResult();
  // Changes here 
  result.setAttribute("browser", browser);

  context.setAttribute("browser", browser);

  initiate(browser, Constants.baseURL); //Instantiate Chrome or Edge WebDriver and go to the URL

  //  Do the testing

  closeBrowser();
}

下面的方法将只执行一次

  /**
   * Invoked after all the test methods belonging to the classes inside the <test> 
   tag have run
   * and all their Configuration methods have been called.
   *
   * @param context The test context
   */

    @Override
      public void onFinish(ITestContext context) {
    
        String usedBrowser = null;
        usedBrowser = (String) context.getAttribute("browser");
        log.debug("ITestContext --> Used Browser  : " + usedBrowser);
    
      }

完成时只执行一次

不幸的是,在尝试了您的建议后,我仍然看到与以前相同的问题。我只看到ITestResult只打印了一次。快速提问,OnFinish将只执行一次,这意味着最后执行的线程将覆盖先前完成的线程?无论如何,谢谢:)您正在ITestContext中设置context.setAttribute(“浏览器”,浏览器),因此它将被覆盖。其中一个测试可能失败,因此您会在onTestFailure、onTestSkipped上看到“仅查看ITestResult仅打印一次”的问题。测试实际上没有做任何事情。它只会同时启动Chrome和Edge浏览器,然后访问www.google.com。就这样。没有用于检查任何内容的断言或其他方法。之后,只需调用quit()。当我执行代码时,我可以看到这些浏览器同时启动,进入google.com,然后关闭浏览器。我的错。实际上,ITestResult在控制台中打印了两次,但第一次打印在日志堆栈的顶部,第二次打印在最后一次打印在底部。只有在检查.log文件后,我才能看到它们都以良好的顺序打印在日志文件中。非常感谢你的帮助Rahul:)
  /**
   * Invoked after all the test methods belonging to the classes inside the <test> 
   tag have run
   * and all their Configuration methods have been called.
   *
   * @param context The test context
   */

    @Override
      public void onFinish(ITestContext context) {
    
        String usedBrowser = null;
        usedBrowser = (String) context.getAttribute("browser");
        log.debug("ITestContext --> Used Browser  : " + usedBrowser);
    
      }
DEBUG TestBase -ITestResult --> BROWSER is Chrome

DEBUG TestBase -ITestResult --> BROWSER is Edge

DEBUG TestBase -ITestContext --> Used Browser  : Edge --- Note this--