Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在testNG报告中包含故障屏幕截图_Java_Selenium_Webdriver_Selenium Webdriver_Testng - Fatal编程技术网

Java 如何在testNG报告中包含故障屏幕截图

Java 如何在testNG报告中包含故障屏幕截图,java,selenium,webdriver,selenium-webdriver,testng,Java,Selenium,Webdriver,Selenium Webdriver,Testng,目前,我正在以这种方式拍摄测试失败的屏幕截图: @AfterMethod(alwaysRun=true) public void catchExceptions(ITestResult result){ Calendar calendar = Calendar.getInstance(); SimpleDateFormat formater = new SimpleDateFormat("dd_MM_yyyy_hh_mm_ss"); String methodName =

目前,我正在以这种方式拍摄测试失败的屏幕截图:

@AfterMethod(alwaysRun=true)
public void catchExceptions(ITestResult result){
    Calendar calendar = Calendar.getInstance();
    SimpleDateFormat formater = new SimpleDateFormat("dd_MM_yyyy_hh_mm_ss");
    String methodName = result.getName();
    if(!result.isSuccess()){
        File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        try {
            FileUtils.copyFile(scrFile, new File((String) PathConverter.convert("failure_screenshots/"+methodName+"_"+formater.format(calendar.getTime())+".png")));
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    }
}
我可以在TestNG报告链接或图片中包含我自己的屏幕截图吗?如果是,怎么做


我在网上找到的只是FEST框架。但是由于我已经在拍摄截图,我不想使用其他框架。

是的,您可以在testng报告中包含指向您的截图的链接

您需要调用
org.testng.Reporter.log
方法,通过使用@Listeners({yourlister.class})注释您的测试类或所有测试类的父类,或者通过将侦听器添加到
testng.xml
来编写指向报表的超链接

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="default">
  <listeners>
    <listener class-name="ScreenshotListener" />
  </listeners>
  <test name="Test">
    <packages>
      <package name="someTests.*"/>
    </packages>
  </test>
</suite>

定制一点ExtentReport可以提供非常有用的报告,在测试失败时准确捕获异常+屏幕截图。屏幕截图可以放在异常旁边,用户可以使用该异常来了解发生错误时网站在做什么

报告示例 试验

后置法

     @AfterMethod
     public void getResult(ITestResult result) throws Exception{
      if(result.getStatus() == ITestResult.FAILURE)
     {
        extentlogger.log(Status.FAIL, MarkupHelper.createLabel(result.getThrowable() + 
        " - Test Case Failed", ExtentColor.RED));
    
        try {
        // get path of captured screenshot using custom failedTCTakeScreenshot method
        String screenshotPath = failedTCTakeScreenshot( result);
        extentlogger.fail("Test Case Failed Snapshot is below " + 
      extentlogger.addScreenCaptureFromPath(screenshotPath));
       } catch (InterruptedException e) {
        e.printStackTrace();
        }
      }
     }

谢谢你的回答。结果中是否有链接/图片?比如在失败的方法名下或者类似的东西?是的。您需要首先创建一个侦听器类并将其添加到testng。您可以从testng.org获取详细信息。搜索侦听器。一旦创建了该类,就应该在其中编写一个重写ontestfailure方法的方法。每当testng发现故障时,就会执行此方法中的代码。您可以调用截图抓取方法并使用Reporter.log将超链接放置到该截图。然后您可以在failed testcases details.excelled下找到这个链接。工作得很有魅力。有趣的是,如此简短的描述是多么有用;)再详细一点。扩展TestNG TestListenerAdapter,实现上述问题中的onTestFailure,并在Reporter.log末尾添加(“”;,用@Listeners({yourListener.class})注释测试类或所有测试类的父类。您已经完成了。@Harini我假设您正在使用testNG插件从eclipse运行此测试。您需要转到项目的属性,然后转到testNG部分,并选中useprojecttestngjar选项。你的问题将是resolved@Cagy79如果库路径中有selenium-standalone.jar和testng.jar,则需要更改jar文件的顺序。我假设selenium.jar有一个旧版本的testNG,它导致了这种奇怪的行为。这并没有回答最初的问题
      @Test (enabled=true)                           
        public void verifySearch() {
       extentlogger = extent.createTest("To verify verifySearch");
      //Your other code here.....
        soft.assertEquals("xxx", "xxxx");
        soft.assertAll();
      }
     @AfterMethod
     public void getResult(ITestResult result) throws Exception{
      if(result.getStatus() == ITestResult.FAILURE)
     {
        extentlogger.log(Status.FAIL, MarkupHelper.createLabel(result.getThrowable() + 
        " - Test Case Failed", ExtentColor.RED));
    
        try {
        // get path of captured screenshot using custom failedTCTakeScreenshot method
        String screenshotPath = failedTCTakeScreenshot( result);
        extentlogger.fail("Test Case Failed Snapshot is below " + 
      extentlogger.addScreenCaptureFromPath(screenshotPath));
       } catch (InterruptedException e) {
        e.printStackTrace();
        }
      }
     }