[MRM-1164] Copy in AbstractSeleniumTestCase to remove the dependency on old shared UI tests from Maven, and update version numbers.

git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@761154 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Wendy Smoak 2009-04-02 03:31:19 +00:00
parent 60d5de8830
commit 9c549e773e
3 changed files with 617 additions and 9 deletions

View File

@ -23,7 +23,7 @@
<parent>
<groupId>org.apache.archiva</groupId>
<artifactId>archiva-web</artifactId>
<version>1.2-SNAPSHOT</version>
<version>1.2.1-SNAPSHOT</version>
</parent>
<artifactId>archiva-webapp-test</artifactId>
<packaging>pom</packaging>
@ -45,12 +45,6 @@
<artifactId>archiva-webapp</artifactId>
<type>war</type>
</dependency>
<dependency>
<groupId>org.apache.maven.shared</groupId>
<artifactId>maven-web-ui-tests</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-utils</artifactId>
@ -59,7 +53,13 @@
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-slf4j-logging</artifactId>
</dependency>
<dependency>
<groupId>org.openqa.selenium.client-drivers</groupId>
<artifactId>selenium-java-client-driver</artifactId>
<version>0.8.1</version>
<scope>test</scope>
</dependency>
<!-- Dependency for MavenConnectionTest -->
<dependency>
<groupId>jdom</groupId>
@ -222,6 +222,7 @@
<plugin>
<groupId>org.codehaus.cargo</groupId>
<artifactId>cargo-maven2-plugin</artifactId>
<version>1.0</version>
<executions>
<execution>
<id>start-container</id>

View File

@ -19,7 +19,6 @@ package org.apache.maven.archiva.web.test;
* under the License.
*/
import org.apache.maven.shared.web.test.AbstractSeleniumTestCase;
/**
*/

View File

@ -0,0 +1,608 @@
package org.apache.maven.archiva.web.test;
/*
* 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.DefaultSelenium;
import com.thoughtworks.selenium.Selenium;
import junit.framework.TestCase;
import org.codehaus.plexus.util.StringUtils;
import java.io.File;
import java.util.Calendar;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
/**
* @author <a href="mailto:evenisse@apache.org">Emmanuel Venisse</a>
* @version $Id$
*/
public abstract class AbstractSeleniumTestCase
extends TestCase
{
public static final String CHECKBOX_CHECK = "on";
public static final String CHECKBOX_UNCHECK = "off";
private Selenium sel;
protected String adminUsername;
protected String adminPassword;
protected String adminFullName = getApplicationName() + " Admin";
protected String adminEmail = "admin@localhost.localdomain";
protected String maxWaitTimeInMs;
protected String baseUrl;
public void setUp()
throws Exception
{
super.setUp();
Properties p = new Properties();
p.load ( this.getClass().getClassLoader().getResourceAsStream( "it.properties" ) );
baseUrl = p.getProperty( "BASE_URL" );
maxWaitTimeInMs = p.getProperty( "MAX_WAIT_TIME_IN_MS" );
adminUsername = p.getProperty( "ADMIN_USERNAME" );
adminPassword = p.getProperty( "ADMIN_PASSWORD" );
String seleniumHost = p.getProperty( "SELENIUM_HOST" );
int seleniumPort = Integer.parseInt( (p.getProperty( "SELENIUM_PORT" ) ) );
String browser = System.getProperty( "browser" );
if ( StringUtils.isEmpty( browser ) )
{
browser = p.getProperty( "SELENIUM_BROWSER" );
}
sel = new DefaultSelenium( seleniumHost, seleniumPort, browser, baseUrl );
sel.start();
initialize();
}
public void tearDown()
throws Exception
{
sel.stop();
}
public Selenium getSelenium()
{
return sel;
}
public abstract String getBaseUrl();
/**
* We create an admin user if it doesn't exist
*/
protected void initialize()
{
open( getWebContext() );
if ( getTitle().endsWith( "Create Admin User" ) )
{
assertCreateAdminUserPage();
submitCreateAdminUserPage( adminFullName, adminEmail, adminPassword, adminPassword );
assertLoginPage();
submitLoginPage( adminUsername, adminPassword );
postAdminUserCreation();
logout();
}
}
/**
* where webapp initial configurations can be done
*/
protected void postAdminUserCreation()
{
if ( getTitle().endsWith( "Continuum - Configuration" ) )
{
setFieldValue("baseUrl", baseUrl);
clickButtonWithValue( "Save" );
}
}
protected abstract String getApplicationName();
/**
* some webapps have
*
* @return the page prefix set by the webapp
*/
protected String getTitlePrefix()
{
return "";
}
protected abstract String getInceptionYear();
protected String getWebContext()
{
return "/";
}
public void open( String url )
{
sel.open( url );
}
public String getTitle()
{
return sel.getTitle();
}
public String getHtmlContent()
{
return getSelenium().getHtmlSource();
}
public void assertTextPresent( String text )
{
assertTrue( "'" + text + "' isn't present.", sel.isTextPresent( text ) );
}
public void assertTextNotPresent( String text )
{
assertFalse( "'" + text + "' is present.", sel.isTextPresent( text ) );
}
public void assertElementPresent( String elementLocator )
{
assertTrue( "'" + elementLocator + "' isn't present.", isElementPresent( elementLocator ) );
}
public void assertElementNotPresent( String elementLocator )
{
assertFalse( "'" + elementLocator + "' is present.", isElementPresent( elementLocator ) );
}
public void assertLinkPresent( String text )
{
assertTrue( "The link '" + text + "' isn't present.", isElementPresent( "link=" + text ) );
}
public void assertLinkNotPresent( String text )
{
assertFalse( "The link '" + text + "' is present.", isElementPresent( "link=" + text ) );
}
public void assertImgWithAlt( String alt )
{
assertElementPresent( "//img[@alt='" + alt + "']" );
}
public void assertImgWithAltAtRowCol( boolean isALink, String alt, int row, int column )
{
String locator = "//tr[" + row + "]/td[" + column + "]/";
locator += isALink ? "a/" : "";
locator += "img[@alt='" + alt + "']";
assertElementPresent( locator );
}
public void assertCellValueFromTable( String expected, String tableElement, int row, int column )
{
assertEquals( expected, getCellValueFromTable( tableElement, row, column ) );
}
public boolean isTextPresent( String text )
{
return sel.isTextPresent( text );
}
public boolean isLinkPresent( String text )
{
return isElementPresent( "link=" + text );
}
public boolean isElementPresent( String locator )
{
return sel.isElementPresent( locator );
}
public void waitPage()
{
waitPage( 180000 );
}
public void waitPage( int nbMillisecond )
{
sel.waitForPageToLoad( String.valueOf( nbMillisecond ) );
}
public void assertPage( String title )
{
assertEquals( getTitlePrefix() + title, getTitle() );
assertHeader();
assertFooter();
}
public abstract void assertHeader();
public void assertFooter()
{
int currentYear = Calendar.getInstance().get( Calendar.YEAR );
assertTrue( getSelenium().getText( "xpath=//div[@id='footer']/div[1]" ).endsWith(
"Copyright © " + getInceptionYear() + "-" + currentYear + " The Apache Software Foundation" ) );
}
public String getFieldValue( String fieldName )
{
return sel.getValue( fieldName );
}
public String getCellValueFromTable( String tableElement, int row, int column )
{
return getSelenium().getTable( tableElement + "." + row + "." + column );
}
public void selectValue( String locator, String value )
{
getSelenium().select( locator, "label=" + value );
}
public void submit()
{
clickLinkWithXPath( "//input[@type='submit']" );
}
public void assertButtonWithValuePresent( String text )
{
assertTrue( "'" + text + "' button isn't present", isButtonWithValuePresent( text ) );
}
public void assertButtonWithValueNotPresent( String text )
{
assertFalse( "'" + text + "' button is present", isButtonWithValuePresent( text ) );
}
public boolean isButtonWithValuePresent( String text )
{
return isElementPresent( "//button[@value='" + text + "']" ) || isElementPresent( "//input[@value='" + text + "']" );
}
public void clickButtonWithValue( String text )
{
clickButtonWithValue( text, true );
}
public void clickButtonWithValue( String text, boolean wait )
{
assertButtonWithValuePresent( text );
if ( isElementPresent( "//button[@value='" + text + "']" ) )
{
clickLinkWithXPath( "//button[@value='" + text + "']", wait );
}
else
{
clickLinkWithXPath( "//input[@value='" + text + "']", wait );
}
}
public void clickSubmitWithLocator( String locator )
{
clickLinkWithLocator( locator );
}
public void clickSubmitWithLocator( String locator, boolean wait )
{
clickLinkWithLocator( locator, wait );
}
public void clickImgWithAlt( String alt )
{
clickLinkWithLocator( "//img[@alt='" + alt + "']" );
}
public void clickLinkWithText( String text )
{
clickLinkWithText( text, true );
}
public void clickLinkWithText( String text, boolean wait )
{
clickLinkWithLocator( "link=" + text, wait );
}
public void clickLinkWithXPath( String xpath )
{
clickLinkWithXPath( xpath, true );
}
public void clickLinkWithXPath( String xpath, boolean wait )
{
clickLinkWithLocator( "xpath=" + xpath, wait );
}
public void clickLinkWithLocator( String locator )
{
clickLinkWithLocator( locator, true );
}
public void clickLinkWithLocator( String locator, boolean wait )
{
assertElementPresent( locator );
sel.click( locator );
if ( wait )
{
waitPage();
}
}
public void setFieldValues( Map fieldMap )
{
Map.Entry entry;
for ( Iterator entries = fieldMap.entrySet().iterator(); entries.hasNext(); )
{
entry = (Map.Entry) entries.next();
sel.type( (String) entry.getKey(), (String) entry.getValue() );
}
}
public void setFieldValue( String fieldName, String value )
{
sel.type( fieldName, value );
}
public void checkField( String locator )
{
sel.check( locator );
}
public void uncheckField( String locator )
{
sel.uncheck( locator );
}
public boolean isChecked( String locator )
{
return sel.isChecked( locator );
}
//////////////////////////////////////
// Login
//////////////////////////////////////
public void goToLoginPage()
{
clickLinkWithText( "Login" );
assertLoginPage();
}
public void login( String username, String password )
{
login( username, password, true, "Login Page" );
}
public void login( String username, String password, boolean valid, String assertReturnPage )
{
if ( isLinkPresent( "Login" ) )
{
goToLoginPage();
submitLoginPage( username, password, false, valid, assertReturnPage );
}
}
public void assertLoginPage()
{
assertPage( "Login Page" );
assertTextPresent( "Login" );
assertTextPresent( "Username" );
assertTextPresent( "Password" );
assertTextPresent( "Remember Me" );
assertFalse( isChecked( "rememberMe" ) );
}
public void submitLoginPage( String username, String password )
{
submitLoginPage( username, password, false, true, "Login Page" );
}
public void submitLoginPage( String username, String password, boolean validUsernamePassword )
{
submitLoginPage( username, password, false, validUsernamePassword, "Login Page" );
}
public void submitLoginPage( String username, String password, boolean rememberMe, boolean validUsernamePassword,
String assertReturnPage )
{
assertLoginPage();
setFieldValue( "username", username );
setFieldValue( "password", password );
if ( rememberMe )
{
checkField( "rememberMe" );
}
clickButtonWithValue( "Login" );
if ( validUsernamePassword )
{
//assertTextPresent( "Current User:" );
assertTextPresent( username );
assertLinkPresent( "Edit Details" );
assertLinkPresent( "Logout" );
}
else
{
if ( "Login Page".equals( assertReturnPage ) )
{
assertLoginPage();
}
else
{
assertPage( assertReturnPage );
}
}
}
public boolean isAuthenticated()
{
return !( isLinkPresent( "Login" ) && isLinkPresent( "Register" ) );
}
//////////////////////////////////////
// Logout
//////////////////////////////////////
public void logout()
{
assertTrue( "User wasn't authenticated.", isAuthenticated() );
clickLinkWithText( "Logout" );
assertFalse( "The user is always authenticated after a logout.", isAuthenticated() );
}
//////////////////////////////////////
// My Account
//////////////////////////////////////
public void goToMyAccount()
{
clickLinkWithText( "Edit Details" );
}
public void assertMyAccountDetails( String username, String newFullName, String newEmailAddress )
throws Exception
{
assertPage( "Account Details" );
//isTextPresent( "Username" );
assertTextPresent( "Username:" );
assertElementPresent( "registerForm_user_username" );
assertCellValueFromTable( username, "//form/table", 0, 1 );
assertTextPresent( "Full Name*:" );
assertElementPresent( "user.fullName" );
assertEquals( newFullName, getFieldValue( "user.fullName" ) );
assertTextPresent( "Email Address*:" );
assertElementPresent( "user.email" );
assertEquals( newEmailAddress, getFieldValue( "user.email" ) );
assertTextPresent("Current Password*:");
assertElementPresent("oldPassword");
assertTextPresent( "New Password*:" );
assertElementPresent( "user.password" );
assertTextPresent( "Confirm Password*:" );
assertElementPresent( "user.confirmPassword" );
assertTextPresent( "Last Password Change" );
assertElementPresent( "registerForm_user_timestampLastPasswordChange" );
}
public void editMyUserInfo( String newFullName, String newEmailAddress, String oldPassword, String newPassword,
String confirmNewPassword )
{
goToMyAccount();
setFieldValue( "user.fullName", newFullName );
setFieldValue( "user.email", newEmailAddress );
setFieldValue( "oldPassword", oldPassword );
setFieldValue( "user.password", newPassword );
setFieldValue( "user.confirmPassword", confirmNewPassword );
clickButtonWithValue( "Submit" );
}
//////////////////////////////////////
// Users
//////////////////////////////////////
public void assertUsersListPage()
{
assertPage( "[Admin] User List" );
}
public void assertCreateUserPage()
{
assertPage( "[Admin] User Create" );
assertTextPresent( "Username" );
assertTextPresent( "Full Name" );
assertTextPresent( "Email Address" );
assertTextPresent( "Password" );
assertTextPresent( "Confirm Password" );
}
public void assertUserRolesPage()
{
assertPage( "[Admin] User Edit" );
assertTextPresent( "[Admin] User Roles" );
assertTextPresent( "Assigned Roles" );
assertTextPresent( "Available Roles" );
}
public void assertDeleteUserPage( String username )
{
assertPage( "[Admin] User Delete" );
assertTextPresent( "[Admin] User Delete" );
assertTextPresent( "The following user will be deleted: " + username );
assertButtonWithValuePresent( "Delete User" );
}
//////////////////////////////////////
// Create Admin User
//////////////////////////////////////
public void assertCreateAdminUserPage()
{
assertPage( "Create Admin User" );
assertTextPresent( "Create Admin User" );
assertTextPresent( "Username" );
assertElementPresent( "user.username" );
assertTextPresent( "Full Name" );
assertElementPresent( "user.fullName" );
assertTextPresent( "Email Address" );
assertElementPresent( "user.email" );
assertTextPresent( "Password" );
assertElementPresent( "user.password" );
assertTextPresent( "Confirm Password" );
assertElementPresent( "user.confirmPassword" );
}
public void submitCreateAdminUserPage( String fullName, String email, String password, String confirmPassword )
{
setFieldValue( "user.fullName", fullName );
setFieldValue( "user.email", email );
setFieldValue( "user.password", password );
setFieldValue( "user.confirmPassword", confirmPassword );
submit();
waitPage();
}
public String getBasedir()
{
String basedir = System.getProperty( "basedir" );
if ( basedir == null )
{
basedir = new File( "" ).getAbsolutePath();
}
return basedir;
}
}