需要帮助 - 我在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身份运行。
答案 0 :(得分:0)
您获得NullPointerException的原因是因为Testng为每个侦听器创建了一个新实例。所以新实例的驱动程序没有初始化。
在您的情况下,运行@Test方法的Screenshot类的对象和作为TestNG调用的侦听器的Screenshot类的实例是不同的。
有几种方法可以解决这个问题。
将代码从onTestFailure移动到@AfterMethod,并将ITestResult作为方法参数。处理结果数据以截取屏幕截图。
@AfterMethod
public void afterMet(ITestResult res){
if(res.isSuccess())
将驱动程序设为全局静态。 - 如果您打算只运行顺序测试
如果您计划并行运行,请考虑使用threadlocal。