You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by ca...@apache.org on 2009/07/17 20:25:14 UTC
svn commit: r795182 -
/continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/listener/CaptureScreenShotsListener.java
Author: carlos
Date: Fri Jul 17 18:25:14 2009
New Revision: 795182
URL: http://svn.apache.org/viewvc?rev=795182&view=rev
Log:
Capture the page HTML on error and avoid exceptions when errors happen in pre-test phases
Modified:
continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/listener/CaptureScreenShotsListener.java
Modified: continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/listener/CaptureScreenShotsListener.java
URL: http://svn.apache.org/viewvc/continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/listener/CaptureScreenShotsListener.java?rev=795182&r1=795181&r2=795182&view=diff
==============================================================================
--- continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/listener/CaptureScreenShotsListener.java (original)
+++ continuum/branches/continuum-selenium-parallel-carlos/src/test/testng/org/apache/continuum/web/test/listener/CaptureScreenShotsListener.java Fri Jul 17 18:25:14 2009
@@ -22,16 +22,20 @@
import static org.apache.continuum.web.test.parent.ThreadSafeSeleniumSession.getSession;
import java.io.File;
+import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Pattern;
+import org.apache.commons.io.FileUtils;
import org.testng.ITestResult;
import org.testng.TestListenerAdapter;
public class CaptureScreenShotsListener
extends TestListenerAdapter
{
+ private static final String FS = File.separator;
+
@Override
public void onTestFailure( ITestResult tr )
{
@@ -41,9 +45,10 @@
private void captureError( ITestResult tr )
{
+ String baseFileName = getBaseFileName( tr );
try
{
- captureScreenshot( tr );
+ captureScreenshot( baseFileName );
}
catch ( RuntimeException e )
{
@@ -55,31 +60,55 @@
e.printStackTrace();
}
}
+ try
+ {
+ captureHtmlSource( baseFileName );
+ }
+ catch ( IOException e )
+ {
+ System.out.println( "Error capturing HTML for test " + tr.getName() + " [" + getSession().getBrowser()
+ + "]" );
+ e.printStackTrace();
+ }
}
- // captureAssertionError() creates a 'target/screenshots' directory and saves '.png' page screenshot of the
- // encountered error
- private void captureScreenshot( ITestResult tr )
+ private String getBaseFileName( ITestResult tr )
{
File f = new File( "" );
String filePath = f.getAbsolutePath();
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat( "yyyy.MM.dd-HH_mm_ss" );
String time = sdf.format( d );
- String fs = File.separator;
- File targetPath = new File( filePath + fs + "target" + fs + "screenshots" );
+ File targetPath = new File( filePath + FS + "target" + FS + "screenshots" );
targetPath.mkdir();
String cName = tr.getTestClass().getName();
StackTraceElement stackTrace[] = tr.getThrowable().getStackTrace();
int index = getStackTraceIndexOfCallingClass( cName, stackTrace );
- String methodName = stackTrace[index].getMethodName();
- int lNumber = stackTrace[index].getLineNumber();
+ String methodName = index >= 0 ? stackTrace[index].getMethodName() : tr.getMethod().getMethodName();
+ int lNumber = index >= 0 ? stackTrace[index].getLineNumber() : -1;
String lineNumber = Integer.toString( lNumber );
String className = cName.substring( cName.lastIndexOf( '.' ) + 1 );
String fileName =
- targetPath.toString() + fs + methodName + "(" + className + ".java_" + lineNumber + ")-" + time + ".png";
+ targetPath.toString() + FS + methodName + "(" + className + ".java_" + lineNumber + ")-"
+ + getSession().getBrowser() + "-" + time;
+ return fileName;
+ }
+
+ /**
+ * Save the screenshot of the browser as a PNG image
+ *
+ * @param baseFileName
+ */
+ private void captureScreenshot( String baseFileName )
+ {
getSession().getSelenium().windowMaximize();
- getSession().getSelenium().captureEntirePageScreenshot( fileName, "" );
+ getSession().getSelenium().captureEntirePageScreenshot( baseFileName + ".png", "" );
+ }
+
+ private void captureHtmlSource( String baseFileName )
+ throws IOException
+ {
+ FileUtils.writeStringToFile( new File( baseFileName + ".html" ), getSession().getSelenium().getHtmlSource() );
}
private int getStackTraceIndexOfCallingClass( String nameOfClass, StackTraceElement stackTrace[] )
@@ -92,7 +121,14 @@
match = Pattern.matches( nameOfClass, className );
i++;
}
- while ( match == false );
+ while ( ( match == false ) && ( i < stackTrace.length ) );
+
+ if ( !match )
+ {
+ /* the error happened outside of the test class, maybe pre-test */
+ return -1;
+ }
+
i--;
return i;
}