java - TestNG 中的非静态驱动程序和屏幕截图监听器

标签 java selenium selenium-webdriver testng

我有一个将驱动程序作为非静态变量调用的测试用例。我还在我的测试用例中添加了截图监听器。当测试用例失败时控件会自动发送到屏幕截图监听器...但是由于我的驱动程序是一个非静态变量,因此无法在屏幕截图监听器中访问它。所以我得到空指针异常。

有没有办法在截图监听器中全局访问非静态驱动?

我的测试用例:

@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(事实上,这违背了测试监听器的目的);

以下将在不传递驱动程序的情况下在监听器中实现屏幕截图;

  1. 所有测试类都必须扩展一个简单的基础测试类;

    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);
                    }
    
            }
        }
    
  2. 在你的监听器中,你需要访问基类;

公共(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/

相关文章:

python - 如何使用selenium从网页下载嵌入的PDF?

c# - 如何在最新的 Chrome 版本中使用 C#、Selenium 处理 Windows 身份验证?

java - 在 PageFactory 中获取 NPE NullPointerException (Selenium+Java)

java - Selenium WebDriver 用于自动化 ReactJs 应用程序

python - Selenium Python 使用键盘快捷键打开群组中的所有 Facebook 帖子

node.js - 如何关闭 ChromeDriver 服务?

java - 如何在另一个 JSP 自定义标记内获取 JSP 自定义值

java - 正则表达式中的转义路径分隔符

java - 异步处理 = 跨线程 = 有效?

java - 如果我们有足够的处理器来服务所有线程,Thread.yield() 会做任何事情吗?