goToLoginPage();
setFieldValue( "user-login-form-username", "badUsername" );
clickLinkWithLocator( "modal-login-ok", true );
- assertTextPresent( "This field is required." );
+ assertTextPresent( "This field is required.f" );
}
package org.apache.archiva.web.test.parent;
-import org.apache.archiva.web.test.tools.ArchivaSeleniumRunner;
-import org.junit.Before;
+import org.apache.archiva.web.test.tools.ScreenshotCaptureRule;
+import org.junit.Rule;
import org.junit.runner.RunWith;
+import org.junit.runners.BlockJUnit4ClassRunner;
import java.io.File;
import java.io.IOException;
* under the License.
*/
-@RunWith( ArchivaSeleniumRunner.class )
+@RunWith( BlockJUnit4ClassRunner.class )
public abstract class AbstractArchivaTest
extends AbstractSeleniumTest
{
+
protected String username;
protected String fullname;
import com.thoughtworks.selenium.DefaultSelenium;
import com.thoughtworks.selenium.Selenium;
import org.apache.archiva.web.test.tools.AfterSeleniumFailure;
-import org.junit.After;
+import org.apache.archiva.web.test.tools.ScreenshotCaptureRule;
import org.junit.Assert;
-import org.junit.Before;
+import org.junit.Rule;
import java.io.File;
import java.text.SimpleDateFormat;
public abstract class AbstractSeleniumTest
{
+
+ @Rule
+ public ScreenshotCaptureRule screenshotCaptureRule = new ScreenshotCaptureRule();
+
public String browser = System.getProperty( "browser" );
public String baseUrl = System.getProperty( "baseUrl" );
public Properties p;
- @Before
public void open()
throws Exception
{
p = new Properties();
p.load( this.getClass().getClassLoader().getResourceAsStream( "test.properties" ) );
open( baseUrl, browser, seleniumHost, seleniumPort, maxWaitTimeInMs );
+ screenshotCaptureRule.selenium = selenium;
assertAdminCreated();
}
/**
* Close selenium session.
*/
- @After
public void close()
- throws Exception
{
if ( getSelenium() != null )
{
}
@AfterSeleniumFailure
- public void captureScreenShotOnFailure( Throwable failure )
+ public void captureScreenShotOnFailure( Throwable failure, String methodName, String className )
{
SimpleDateFormat sdf = new SimpleDateFormat( "yyyy.MM.dd-HH_mm_ss" );
String time = sdf.format( new Date() );
File targetPath = new File( "target", "screenshots" );
- String cName = this.getClass().getName();
- String methodName = "";
int lineNumber = 0;
for ( StackTraceElement stackTrace : failure.getStackTrace() )
{
if ( stackTrace.getClassName().equals( this.getClass().getName() ) )
{
- methodName = stackTrace.getMethodName();
lineNumber = stackTrace.getLineNumber();
break;
}
}
- String className = cName.substring( cName.lastIndexOf( '.' ) + 1 );
targetPath.mkdirs();
Selenium selenium = getSelenium();
String fileBaseName = methodName + "_" + className + ".java_" + lineNumber + "-" + time;
super( clazz );
}
+
+
/*
- * FIXME move that to a Rule.
- */
+ * FIXME move that to a Rule.
+ */
@Override
protected Statement withAfters( FrameworkMethod method, Object target, Statement statement )
{
--- /dev/null
+package org.apache.archiva.web.test.tools;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import com.thoughtworks.selenium.Selenium;
+import org.apache.archiva.web.test.parent.AbstractSeleniumTest;
+import org.junit.rules.MethodRule;
+import org.junit.runner.Description;
+import org.junit.runners.model.FrameworkMethod;
+import org.junit.runners.model.Statement;
+
+/**
+ * @author Olivier Lamy
+ */
+public class ScreenshotCaptureRule
+ implements MethodRule //TestRule
+{
+
+ public Selenium selenium;
+
+ public Statement apply( Statement base, FrameworkMethod method, Object target )
+ {
+ try
+ {
+ ( (AbstractSeleniumTest) target ).open();
+ method.getMethod().invoke( target );
+ }
+ catch ( Throwable e )
+ {
+ ( (AbstractSeleniumTest) target ).captureScreenShotOnFailure( e, method.getMethod().getName(),
+ target.getClass().getName() );
+ }
+ finally
+ {
+ ( (AbstractSeleniumTest) target ).close();
+ }
+ return new Statement()
+ {
+ @Override
+ public void evaluate()
+ throws Throwable
+ {
+ // no op
+ }
+ };
+ }
+
+ public Statement apply( Statement base, Description description )
+ {
+ return base; //To change body of implemented methods use File | Settings | File Templates.
+ }
+}