Selenium webdriver 由于onTestFailureMethod中的驱动程序实例为Null,导致Null指针异常

Selenium webdriver 由于onTestFailureMethod中的驱动程序实例为Null,导致Null指针异常,selenium-webdriver,testng,Selenium Webdriver,Testng,需要帮助-我在onTestFailure方法中遇到空指针异常。若我的@Test方法中的任何一个失败,控制将转到onTestFailure,但该方法中的驱动程序为null。我的密码是- import statements... @Listeners(ScreenShot.class) public class ScreenShot implements ITestListener{ WebDriver driver; @BeforeClass public void lau

需要帮助-我在onTestFailure方法中遇到空指针异常。若我的@Test方法中的任何一个失败,控制将转到onTestFailure,但该方法中的驱动程序为null。我的密码是-

import statements...
@Listeners(ScreenShot.class)
public class ScreenShot implements ITestListener{
    WebDriver driver;
    @BeforeClass
    public void launch(){
        System.setProperty("webdriver.ie.driver", "D:\\Jars\\Drivers\\IEDriverServer.exe");
        driver = new InternetExplorerDriver();
        driver.get("url");
    }

    @Test
    public void test1(){
        //driver.findElement(By.id("Email")).sendKeys("E@E.COM");
        System.out.println("Method1 begins");
        //some code here - exception occurs here
        System.out.println("Method ended");
    }

    public void onTestFailure(ITestResult result){
        File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);  //Getting exception here as driver is null
        try {
            FileUtils.copyFile(scrFile, new File("C:\\snaps\\"+result.getMethod().getMethodName()+".png"));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
    }

我通过右键单击->以testng方式运行这个类

获取NullPointerException的原因是Testng为每个侦听器创建了一个新实例。因此,新实例的驱动程序尚未初始化

在您的例子中,运行@Test方法的Screenshot类的对象和TestNG调用的Screenshot类作为侦听器的实例是不同的

有两种方法可以解决这个问题

  • 使用ITestResult作为方法参数,将代码从onTestFailure移动到@AfterMethod。处理结果数据以拍摄屏幕截图

    @AfterMethod
    public void afterMet(ITestResult res){
            if(res.isSuccess())
    
  • 将驱动程序设置为全局静态。-如果您计划只运行顺序测试

  • 如果您计划并行运行,请考虑threadlocal


  • 将webdriver设置为静态并重试。是的,您可以通过@niharika_neo所述的任何方式实现您的结果。。。