我有一个将驱动程序作为非静态变量调用的测试用例。我还在我的测试用例中添加了截图监听器。当测试用例失败时控件会自动发送到屏幕截图监听器...但是由于我的驱动程序是一个非静态变量,因此无法在屏幕截图监听器中访问它。所以我得到空指针异常。
有没有办法在截图监听器中全局访问非静态驱动?
我的测试用例:
@Test
public void testCase() {
//non-static driver is initialized
}
我的截图监听器:
public class ScreenshotListener extends TestListenerAdapter
{
@Override
public void onTestFailure(ITestResult testResult) {
//driver needs to be accessed here
}
}
最佳答案
您不必传递驱动程序或在测试中调用 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); } } }
在你的监听器中,你需要访问基类;
公共(public)类 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.
}
}
您的测试现在不知道屏幕截图甚至正在被捕获并且可以通过添加监听器来控制。
关于java - TestNG 中的非静态驱动程序和屏幕截图监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17605783/