您不必在测试中传递驱动程序或调用 testfailure(实际上这会破坏测试侦听器的点);
以下将在侦听器中实现屏幕截图,而无需传递驱动程序;
所有测试类都必须扩展一个简单的基础测试类;
public asbtract baseTestCase() {
private WebDriver driver;
public WebDriver getDriver() {
return driver;
}
@BeforeMethod
public void createDriver() {
Webdriver driver=XXXXDriver();
}
@AfterMethod
public void tearDownDriver() {
if (driver != null)
{
try
{
driver.quit();
}
catch (WebDriverException e) {
System.out.println("***** CAUGHT EXCEPTION IN DRIVER TEARDOWN *****");
System.out.println(e);
}
}
}
在您的侦听器中,您需要访问基类;
公共类 ScreenshotListener 扩展 TestListenerAdapter {
@Override
public void onTestFailure(ITestResult result)
{
Object currentClass = result.getInstance();
WebDriver webDriver = ((BaseTest) currentClass).getDriver();
if (webDriver != null)
{
File f = ((TakesScreenshot) webDriver).getScreenshotAs(OutputType.FILE);
//etc.
}
}
您的测试现在不知道 screenshgot 甚至被捕获并且可以通过添加侦听器来控制。