我正在寻找一种方法将屏幕截图附加到TestNG报告的结果部分,以了解失败的方法。
到目前为止,我能够通过实现以下功能将我的屏幕截图附加到Reporter Output:
Reporter.log("<br> <img src=.\\screenshots\\" + fileName + " /> <br>");
但仍然在努力将它们添加到失败方法的“测试结果”部分。
我能够实现Listener并拦截最初建议的onTestFailure操作: How can I include a failure screenshot to the testNG report
以下是一个例子:
@Override
public void onTestFailure(ITestResult result) {
Reporter.setCurrentTestResult(result);
Reporter.log("<br> <img src=.\\screenshots\\Untitled.png /> <br>");
Reporter.setCurrentTestResult(null);
}
但是Reporter.log函数仍然在Reporter输出日志中推送我的信息,但是在结果 - >失败的方法 - >失败的方法日志中没有。
更新(2014年3月14日):我附上截图以澄清我的问题。问题不在于捕获屏幕截图并将其附加到Report。那部分工作正常。问题是截图附加到报告的测试输出部分,但我想在结果中看到它 - &gt;失败的方法。
答案 0 :(得分:0)
我还实现了相同的扩展Testng TestListenerAdapter。通过捕获屏幕截图,然后使用onTestFailure将其附加到具有size height = 100和width = 100的图像的Testng Report中。如果这有助于解决您的问题,请参阅下文
File scrFile = ((TakesScreenshot) WebdriverManager.globalDriverInstance).getScreenshotAs(OutputType.FILE);
//Needs Commons IO library
try {
FileUtils.copyFile(scrFile, new File(file.getAbsolutePath()+ "/selenium-reports/html/" + result.getName() + ".jpg"));
Reporter.log("<a href='"+ file.getAbsolutePath()+"/selenium-reports/html/" + result.getName() + ".jpg'> <img src='"+ file.getAbsolutePath()+"/selenium-reports/html/"+ result.getName() + ".jpg' height='100' width='100'/> </a>");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Reporter.setCurrentTestResult(null);
答案 1 :(得分:0)
除了上述内容外,不要忘记在testng套件xml中添加以下行:
<listeners>
<listener class-name="com.tests.DotTestListener" />
</listeners>
或
如果从命令行执行它,则作为listner参数传递
java -classpath testng.jar;%CLASSPATH% org.testng.TestNG -listener com.tests.DotTestListener test\testng.xml
参考:http://testng.org/doc/documentation-main.html#logging-listeners
答案 2 :(得分:0)
我遇到了同样的问题,但它已经解决了。通过实施SuitePanel,您可以根据需要添加屏幕截图 https://github.com/cbeust/testng/blob/master/src/main/java/org/testng/reporters/jq/SuitePanel.java
除了
,我几乎不会更改原始代码...
// Description?
String description = tr.getMethod().getDescription();
if (! Strings.isNullOrEmpty(description)) {
xsb.push("em");
xsb.addString("(" + description + ")");
xsb.pop("em");
}
// Add screen shot here
xsb.push(“img”,”src”,imagePath);
xsb.pop(“img”);
xsb.pop(D);
xsb.pop(D);
答案 3 :(得分:0)
如果要显示失败方法的屏幕截图,则必须捕获异常并修改其消息内容并向其添加img html然后它将出现。如果您需要示例,请告诉我
答案 4 :(得分:0)
我有同样的问题,但现在修好了。我在基类中创建了捕获截图的方法。此方法返回完整的截图路径。
public String getScreenshot (String screenshotName, WebDriver driver) throws IOException{
DateFormat dateformate = new SimpleDateFormat("dd-mm-yy-hh-mm-ss");
Date date = new Date();
String currentdate = dateformate.format(date);
String imageName =screenshotName+currentdate;
TakesScreenshot ts=(TakesScreenshot)driver;
File source=ts.getScreenshotAs(OutputType.FILE);
String location =System.getProperty("user.dir")+"\\testOutput\\screenshot\\"+imageName+".png";
File screenshotLocation =new File (location);
FileUtils.copyFile(source, screenshotLocation);
return location;
}
添加使用此路径通过更新testng TestNgListener-
在testng报告中添加屏幕截图以及报告日志public void onTestFailure(ITestResult arg0) {
Object currentClass = arg0.getInstance();
WebDriver driver = ((BrowserSetup) currentClass).getDriver();
String name = arg0.getName();
System.out.println(name);
try {
String screenshotPath =getScreenshot(name, driver);
System.out.println("Screenshot taken");
String path = "<img src=\"file://" + screenshotPath + "\" alt=\"\"/>";
System.out.println(screenshotPath+" and path - "+path);
Reporter.log("Capcher screenshot path is "+path);
} catch (Exception e) {
System.out.println("Exception while takescreenshot "+e.getMessage());
}
printTestResults(arg0);
}
答案 5 :(得分:0)
我建议您使用ReportNG而不是原始的TestNG报告。
答案 6 :(得分:0)
如果仅获取屏幕截图有问题,您可以尝试按以下方式获取它:
private static byte[] GetCropImg(IWebDriver targetChrome, IWebElement targetElement)
{
var screenshot = ((ITakesScreenshot)targetChrome).GetScreenshot();
var location = targetElement.Location;
using (MemoryStream stream = new MemoryStream(screenshot.AsByteArray))
{
var rect = new Rectangle(location.X, location.Y, targetElement.Size.Width, targetElement.Size.Height);
using (Bitmap bmpImage = new Bitmap(stream))
{
using (Bitmap cropedImag = bmpImage.Clone(rect, bmpImage.PixelFormat))
{
using (MemoryStream ms = new MemoryStream())
{
cropedImag.Save(ms, ImageFormat.Jpeg);
byte[] byteImage = ms.ToArray();
return byteImage;
}
}
}
}
}
然后您可以保存文件或保存sting64
var imgString64 = Convert.ToBase64String(byteImage); //Get Base64
PS:在JAVA上应该几乎相同)
答案 7 :(得分:0)