Selenium webdriver 如何在TestNG Index.html报告中使用reporter.log()附加失败的测试用例屏幕截图
我使用静态方法拍摄屏幕截图,并使用reporter.log函数将屏幕截图附加到testNg的index.html报告。下面是拍摄屏幕截图的代码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(
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";