Selenium webdriver 如何在TestNG Index.html报告中使用reporter.log()附加失败的测试用例屏幕截图

Selenium webdriver 如何在TestNG Index.html报告中使用reporter.log()附加失败的测试用例屏幕截图,selenium-webdriver,webdriver,report,testng,Selenium Webdriver,Webdriver,Report,Testng,我使用静态方法拍摄屏幕截图,并使用reporter.log函数将屏幕截图附加到testNg的index.html报告。下面是拍摄屏幕截图的代码 public class GenericHelper extends CNLogin { public static String takeScreenShot(String methodName){ try { File scrFile = ((TakesScreenshot)driver).getScreenshotAs(

我使用静态方法拍摄屏幕截图,并使用reporter.log函数将屏幕截图附加到testNg的index.html报告。下面是拍摄屏幕截图的代码

public class GenericHelper extends CNLogin {

public static String takeScreenShot(String methodName){
    try {

        File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        // C:\Users\499290\AppData\Local\Temp\screenshot7520341205731631960.png 
        String FilePath = "C:\\Users\\499290\\Downloads\\CNProject1\\CNProject\\test-output\\";
        new File(FilePath);  
        FileUtils.copyFile(scrFile, new File( FilePath +methodName +".jpg") );
        System.out.println("***Placed screen shot in "+scrFile+" ***");
    }
    catch(IOException e) {
        e.printStackTrace();

    }
    return methodName+".jpg";

}
}

我正在使用index.html报告中的以下代码观看屏幕截图

 String TakescreenShot =  GenericHelper.takeScreenShot("AddNewPr");
                    Reporter.log("<a href=\"" + TakescreenShot + "\"><p align=\"left\">Add New PR screenshot at " + new Date()+ "</p>");
String TakescreenShot=GenericHelper.TakescreenShot(“AddNewPr”);
Reporter.log(“

”)添加新的公关截图;

当测试用例失败时,我无法进行屏幕截图,也无法将屏幕截图附加到报告中

这是我的测试用例,如果它通过了,我的屏幕截图方法将截图并将屏幕截图附加到报告中,但当它失败时,不确定如何截图

public void MultipleServiceDelete() throws InterruptedException {

         driver.findElement(By.id("page:frm:pageB:repeatUpper:0:repeat:0:chkIsDelete")).click();
         Thread.sleep(5000);
         driver.findElement(By.id("page:frm:pageB:btnDeleteMultipleServices")).click();
         String DeleteService =  ScreenShot.takeScreenShot("MultipleServiceDelete");
         Reporter.log("<a href=\"" + DeleteService + "\"><p align=\"left\"> Delete Service  screenshot at " + new Date()+ "</p>");
public void MultipleServiceDelete()引发InterruptedException{
driver.findElement(By.id(“page:frm:pageB:repeatUpper:0:repeat:0:chkIsDelete”)。单击();
睡眠(5000);
driver.findElement(By.id(“page:frm:pageB:btnDeleteMultipleServices”)。单击();
String DeleteService=ScreenShot.takeScreenShot(“MultipleServiceDelete”);
Reporter.log(“

”)处的服务屏幕截图;


}

您需要添加一个TestNG侦听器,当测试失败时,它会截图。以下是从我的示例中获取的侦听器代码:

您可能最感兴趣的是名为onTestFailure的方法。这是测试失败时将触发的部分。我有一个驱动程序工厂,它提供我对驱动程序对象的访问,对getDriver的调用是从工厂获取驱动程序对象。如果您刚刚得到一个静态定义的驱动程序对象,您可能可以忽略以下行:

WebDriver driver = getDriver();
其他方法只是创建文件并将屏幕截图写入其中的方便方法。显然,您需要对其进行一些调整,以允许它获取已编写屏幕截图的位置,并将其传递到您报告的日志中

我建议允许侦听器访问您的Reporter对象,并更改:

System.out.println("Written screenshot to " + screenshotAbsolutePath);
致:

将需要更改为以下内容:

String screenshotDirectory = "/tmp/screenshots";
String screenshotDirectory = "C:\\tmp\\screenshots";
或者,如果您使用windows,则类似于:

String screenshotDirectory = "/tmp/screenshots";
String screenshotDirectory = "C:\\tmp\\screenshots";

感谢它的工作,但在图像url中,我得到的屏幕快照目录为空。你能帮助我在下面的陈述中传递什么吗。字符串screenshotDirectory=System.getProperty(“screenshotDirectory”);我必须在这里给你一条路吗。以下是我的图像url:file:///C:/CNProject1/CNProject/test-output/null/1441951336337_AddNewPr.pngI我们已经更新了答案,以明确变量screenshotDirectory的来源。此外,如果这有帮助,请随时向上投票并将其标记为正确答案:)
String screenshotDirectory = "C:\\tmp\\screenshots";