TestNG听众,如何传递类名?

时间:2015-06-05 00:21:05

标签: java selenium webdriver testng

我的监听器覆盖如下:

    @Override
    public void onTestFailure(ITestResult result) {
        System.out.println("Test: " + getTestMethodName(result) + " failure");
        String methodName=result.getName().toString().trim();
        String className = result.getClass().toString().trim();
        takeScreenShot(methodName, className);

    }

    public void takeScreenShot(String methodName, String className) {
    driver=className.getDriver();  //it wont work this way :(
    File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);

            FileUtils.copyFile(scrFile, new File(methodName+".png"));

}

假设我的类是TestClass,并且有方法getDriver返回驱动程序,但是:

驱动= className.getDriver();

如何传递这个className变量? 我不想为每个类创建单独的侦听器,而String className不是WebDriver类型

任何想法?

2 个答案:

答案 0 :(得分:0)

public void takeScreenShot(ITestResult itr) {
    YourClass currentClass = (YourClass) itr.getInstance();
    WebDriver driver = currentClass.getDriver();

    // ...

答案 1 :(得分:0)

您可以进行此操作,在您的类中需要设置驱动程序属性,然后可以在Listener类中使用此属性作为示例

testClass.java

@BeforeClass
public void setDriver(ITestContext context){
  WebDriver driver = new FirefoxDriver();
  context.setAttribute("WedDeiver", driver);
}
@Test
public void t1(){
// your code
}

Listner.java

WebDriver driver = null;
@Override
public void onTestFailure(ITestResult result) {
    ITestContext context = result.getTestContext();
    driver = (RemoteWebDriver) context.getAttribute("WebDriver");
    // your code
}

您现在可以在任何类中使用以上驱动程序,唯一的事情是您需要在测试类中设置驱动程序属性值