gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 08:26:50 24 4
gpt4 key购买 nike

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

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

我的测试用例:

@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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com