2012-06-20 30 views
6

Estoy buscando una forma de adjuntar una captura de pantalla a la sección de Resultados de TestNG Report para los métodos fallidos.Adjuntar capturas de pantalla a TestNG Falló los resultados de los métodos

Hasta ahora era capaz de attache mis capturas de pantalla para salida Reportero mediante la implementación de esto:

Reporter.log("<br> <img src=.\\screenshots\\" + fileName + " /> <br>");

pero todavía luchando con la adición de ellos para probar la sección Resultados de métodos fallidos.

que fue capaz de poner en marcha acciones oyente y onTestFailure intercepción que fue originalmente sugerida aquí: How can I include a failure screenshot to the testNG report

Aquí es un ejemplo de ello:

@Override 
public void onTestFailure(ITestResult result) { 
    Reporter.setCurrentTestResult(result); 
    Reporter.log("<br> <img src=.\\screenshots\\Untitled.png /> <br>"); 
    Reporter.setCurrentTestResult(null); 
} 

Pero Reporter.log función sigue empuja mi información en el registro de salida de Reporter pero no en los resultados-> Métodos fallidos-> Log de método fallido.

Actualización (14/03/14): Adjunté una captura de pantalla para aclarar mi pregunta. El problema no está en capturar captura de pantalla y adjuntarla a Informe. Esa parte funciona bien. El problema es que la captura de pantalla se adjunta a la parte de Prueba de salida del informe, pero quiero verla en Resultados -> Métodos fallidos.

enter image description here

Respuesta

0

I también han aplicado la misma que se extiende TestNG TestListenerAdapter. Al capturar la captura de pantalla, adjúntela al Informe de prueba con la imagen de tamaño alto = 100 y ancho = 100 con onTestFailure. Por favor, véase más adelante si esto ayuda a resolver su problema

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); 
+0

Hola Satish, gracias por su respuesta, pero supongo que me estaba haciendo una pregunta diferente. Modifiqué mi comentario original para aclarar mi problema. – Vlad

0

Además de lo anterior no se olvide de añadir siguientes líneas a su suite de TestNG xml

<listeners> 
    <listener class-name="com.tests.DotTestListener" /> 
</listeners> 

O

pasar como listner parámetro si lo está ejecutando desde la línea de comando

java -classpath testng.jar;%CLASSPATH% org.testng.TestNG -listener com.tests.DotTestListener test\testng.xml 

Referencia: http://testng.org/doc/documentation-main.html#logging-listeners

+0

Gracias por responder Kamal. Modifiqué mi pregunta con más detalles y capturas de pantalla para ilustrar mi problema. – Vlad

0

Tuve el mismo problema pero lo resolvió. Mediante la implementación de SuitePanel usted será capaz de añadir captura de pantalla como desee https://github.com/cbeust/testng/blob/master/src/main/java/org/testng/reporters/jq/SuitePanel.java

que casi no cambian el código original, excepto

... 
// 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); 
0

Si desea mostrar la captura de pantalla en el método fallado, entonces tendrá que capturar la excepción y modificar el contenido de su mensaje y agregar img html a eso y luego aparecerá. Avíseme si necesita el ejemplo

0

Tuve el mismo problema pero se solucionó ahora. Hice un método para capturar captura de pantalla en la clase base. este método devuelve la ruta completa de captura de pantalla.

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; 

} 

Añadir utilización de este camino para agregar pantalla en el informe TestNG, así como de registro de informes mediante la actualización de TestNG TestNgListener-

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); 

} 

enter image description here

Cuestiones relacionadas