如何实现iTestContext侦听器而无需为PDFBox实用程序添加方法参数testng(来自XML)

时间:2018-12-20 16:38:07

标签: selenium-webdriver testng listener

我正在使用Selenium TestNG自动化Salesforce应用程序。我正在使用apache PDFBox实现实用程序,在该实用程序中,我将所有屏幕截图粘贴到PDF中以使客户端满意。

我的逻辑是我使用1.png,2.png等方法在每种方法中创建屏幕截图,直到n.png为止,然后使用pdfbox方法将其粘贴到pdf中。

问题是我的屏幕截图数量是可变的,所以我实现了iTestContext,其中将变量计数器设置为最大数量,然后将它们传递给我的after方法,在这里我获取计数器,然后粘贴了这些屏幕截图的数量-像这样

Class Login {

    @Test
    mymethod(ItestContext context){
        commonfunctions.savescreenshot(1.png);
        commonfunctions.savescreenshot(2.png);
        commonfunctions.savescreenshot(n.png);
        context.setAttribute("Counter", "n");
    }

    @AfterMethod
    myaftermethod(){
        String PATH = //Path of my test method    
        String MethodCounter = (String)context.getAttribute("Counter");
        PDFUtility.addImagetoPDF(PATH,Integer.parseInt(MethodCounter) );
    }
}

问题是我需要实现许多方法,并且我不希望ITestContext侦听器作为每个方法的参数。我可以在xml文件中传递它并将其用于所有方法吗?

希望我提供了所有详细信息

1 个答案:

答案 0 :(得分:0)

如果您需要掌握当前的 var emptyBins = dc.ExecuteQuery<BIN>( @"SELECT BINS.BIN_NUMBER FROM BINS LEFT JOIN INVENTORY_ACTIVE ON BINS.BIN_NUMBER = INVENTORY_ACTIVE.BIN_NUMBER WHERE (((BINS.BIN_TYPE)={0}) AND ((INVENTORY_ACTIVE.BIN_NUMBER) Is Null)) ORDER BY BINS.BIN_NUMBER;", "INVENTORY"); if (dc.DatabaseExists()) MainGrid.ItemsSource = emptyBins; 对象(代表正在执行的当前ITestContext标签),则无需将其作为参数传递给{ {1}}方法。

您可以从<test>带注释的测试方法中通过以下方式访问它:

@Test

这样,您无需将@Test对象作为参数传递给org.testng.ITestContext context = org.testng.Reporter.getCurrentTestResult().getTestContext(); 方法。

  

我可以将其传递到xml文件中并用于所有方法吗?

否,您无法通过xml文件传递org.testng.ITestContext对象。