我的监听器覆盖如下:
@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类型
任何想法?
答案 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
}
您现在可以在任何类中使用以上驱动程序,唯一的事情是您需要在测试类中设置驱动程序属性值