Java Selenium能否在测试(Assert.assertEquals())失败时截图?

Java Selenium能否在测试(Assert.assertEquals())失败时截图?,java,selenium-webdriver,testng,Java,Selenium Webdriver,Testng,我对Selenium还不熟悉,当Assert equals失败时,我一直在用Selenium截图。我正在使用TestNG 当testcase在服务器端失败时,它需要截图一个页面,这样我就可以确切地知道哪里出了问题 我将代码包装在try-catch块中,并在catch中截图 当看到selenium问题(例如元素不可见、无法单击元素)时,屏幕截图功能会起作用 但是对于Assert.equals(),这是失败的。当Assert.assertEquals()失败时,我希望它会捕获并截图。有人能澄清我的疑

我对Selenium还不熟悉,当Assert equals失败时,我一直在用Selenium截图。我正在使用TestNG

当testcase在服务器端失败时,它需要截图一个页面,这样我就可以确切地知道哪里出了问题

我将代码包装在try-catch块中,并在catch中截图

当看到selenium问题(例如元素不可见、无法单击元素)时,屏幕截图功能会起作用

但是对于Assert.equals(),这是失败的。当Assert.assertEquals()失败时,我希望它会捕获并截图。有人能澄清我的疑问吗

下面是代码片段,我是如何尝试实现这一点的:

try {


Assert.assertEquals(expected,actualoutput,message) //it fails

}

catch {
Selenium taking screenshot  // iam not able to take screenshot
}

虽然这些评论是正确的,但我为您提供了一种变通方法—将
Assert
更改为
if

if (!message.equals(expected)){
   takeScreenshot(outputfile.jpg);
}

您可能正在捕获异常,而Assert在失败时抛出错误

然而,我认为testng为您提供了其他钩子,您可以在其中共享在测试中截图失败的逻辑

实现这一点的一种方法是将截图代码放入ITestListener接口提供的onTestFailure中。这样可以避免将所有验证放在try-catch块中


最近TestNG还添加了一些。您也可以尝试探索一下。

我建议使用注释
@AfterMethod
,如果
结果失败,则调用
@Override
方法缩短屏幕

@AfterMethod
        public void onTestFailure(ITestResult testResult) throws IOException {
          if(testResult.getStatus() == ITestResult.FAILURE){
              System.out.println(testResult.getStatus());
            }

@Override
public void onTestFailure(ITestResult result) {
        System.out.println("***** Error " + result.getName() 
                                         + " test has failed *****");

        <Code and Logic>
  }
@AfterMethod
public void onTestFailure(ITestResult testResult)引发IOException{
if(testResult.getStatus()==ITestResult.FAILURE){
System.out.println(testResult.getStatus());
}
@凌驾
公共void onTestFailure(ITestResult结果){
System.out.println(“******错误”+result.getName()
+“测试失败****”;
<代码和逻辑>
}

你能把整个片段放进去吗?