----- "cjdelisle (SVN)" <[email protected]> wrote:
> Author: cjdelisle > Date: 2010-04-27 08:45:23 +0200 (Tue, 27 Apr 2010) > New Revision: 28628 > > Added: > > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/RegisterTest.java > > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/RegisterTestAdminAddUser.java > > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/RegisterTestNoLiveValidation.java > > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/AdminSectionPage.java > > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/FormPage.java > > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/LightBoxRegisterPage.java > > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/UsersPage.java > Modified: > > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/AdministrationPage.java > > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/BasePage.java > > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/RegisterPage.java > > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/ViewPage.java > > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/framework/AbstractTest.java > Log: > XAADMINISTRATION-134: Users->add new user not using XWiki.Registration > with field validation.Added testing. Also duplicated selenium1.0 tests > for registeration. Maybe we should delete original selenium 1.0 test when they are replaced. This way we know how much migration remains to do. WDYT ? Jerome. >Also added some testing infrastructure. > > Added: > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/RegisterTest.java > =================================================================== > --- > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/RegisterTest.java > (rev 0) > +++ > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/RegisterTest.java > 2010-04-27 06:45:23 UTC (rev 28628) > @@ -0,0 +1,175 @@ > +/* > + * See the NOTICE file distributed with this work for additional > + * information regarding copyright ownership. > + * > + * This is free software; you can redistribute it and/or modify it > + * under the terms of the GNU Lesser General Public License as > + * published by the Free Software Foundation; either version 2.1 of > + * the License, or (at your option) any later version. > + * > + * This software is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with this software; if not, write to the Free > + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, > MA > + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. > + */ > +package org.xwiki.it.ui; > + > +import org.junit.Assert; > +import org.junit.Before; > +import org.junit.Test; > + > +import org.openqa.selenium.By; > +import org.openqa.selenium.WebDriverException; > + > +import org.xwiki.it.ui.elements.RegisterPage; > +import org.xwiki.it.ui.elements.ViewPage; > +import org.xwiki.it.ui.elements.HomePage; > +import org.xwiki.it.ui.elements.LoginPage; > +import org.xwiki.it.ui.elements.AdministrationPage; > +import org.xwiki.it.ui.elements.AdminSectionPage; > +import org.xwiki.it.ui.framework.AbstractTest; > +import org.xwiki.it.ui.framework.TestUtils; > + > +/** > + * Test the user registration feature. > + * > + * @version $Id$ > + * @since 2.3M1 > + */ > +public class RegisterTest extends AbstractTest > +{ > + protected RegisterPage registerPage; > + > + @Before > + public void setUp() > + { > + registerPage = getRegisterPage(); > + > + deleteUser("JohnSmith"); > + registerPage.gotoRegisterPage(); > + > + // Switch LiveValidation on or off as needed. > + int x = 0; > + while (registerPage.liveValidationEnabled() != > useLiveValidation()) { > + HomePage homePage = new HomePage(getDriver()); > + homePage.gotoHomePage(); > + homePage.loginAsAdmin(); > + AdministrationPage adminPage = > homePage.administorWiki(); > + AdminSectionPage registrationAdminSection = > adminPage.clickRegistrationSection(); > + > registrationAdminSection.getForm().setFieldValue(By.name("XWiki.Registration_1_liveValidation_enabled"), > + > Boolean.valueOf(useLiveValidation()).toString()); > + registrationAdminSection.clickSave(); > + if (x > 2) { > + throw new WebDriverException("Unable to set > useLiveValidation to " + useLiveValidation()); > + } > + x++; > + registerPage.gotoRegisterPage(); > + } > + registerPage.fillInJohnSmithValues(); > + } > + > + /** To put the registration page someplace else, subclass this > class and change this method. */ > + protected RegisterPage getRegisterPage() > + { > + return new RegisterPage(getDriver()); > + } > + > + /** To test without javascript validation, subclass this class > and change this method. */ > + protected boolean useLiveValidation() > + { > + return true; > + } > + > + @Test > + public void testRegisterJohnSmith() > + { > + Assert.assertTrue(validateAndRegister()); > + tryToLogin("JohnSmith", "WeakPassword"); > + } > + > + @Test > + public void testRegisterExistingUser() > + { > + registerPage.fillRegisterForm(null, null, "Admin", null, > null, null); > + // Can't use validateAndRegister here because user existance > is not checked by LiveValidation. > + Assert.assertFalse(registerPage.register()); > + > Assert.assertTrue(registerPage.validationFailureMessagesInclude("User > already exists.")); > + } > + > + @Test > + public void testRegisterPasswordTooShort() > + { > + registerPage.fillRegisterForm(null, null, null, "short", > "short", null); > + Assert.assertFalse(validateAndRegister()); > + > Assert.assertTrue(registerPage.validationFailureMessagesInclude("Please > use a longer password.")); > + } > + > + @Test > + public void testRegisterDifferentPasswords() > + { > + registerPage.fillRegisterForm(null, null, null, null, > "DifferentPassword", null); > + Assert.assertFalse(validateAndRegister()); > + > Assert.assertTrue(registerPage.validationFailureMessagesInclude("Your > passwords aren't the same.")); > + } > + > + @Test > + public void testRegisterEmptyPassword() > + { > + registerPage.fillRegisterForm(null, null, null, "", "", > null); > + Assert.assertFalse(validateAndRegister()); > + > Assert.assertTrue(registerPage.validationFailureMessagesInclude("This > field is mandatory.")); > + } > + > + @Test > + public void testRegisterInvalidEmail() > + { > + registerPage.fillRegisterForm(null, null, null, null, null, > "not an email address"); > + Assert.assertFalse(validateAndRegister()); > + > Assert.assertTrue(registerPage.validationFailureMessagesInclude("Please > give a valid email address.")); > + } > + > + /** > + * If LiveValidation is enabled then it will check that there are > no failures with that. > + * If no failures then hits register button, it then asserts that > hitting thr register > + * button did not reveal any failures not caught by > LiveValidation. > + * > + * If LiveValidation is disabled then just hits the register > button. > + */ > + protected boolean validateAndRegister() > + { > + if (useLiveValidation()) { > + registerPage.triggerLiveValidation(); > + if > (!registerPage.getValidationFailureMessages().isEmpty()) { > + return false; > + } > + boolean result = registerPage.register(); > + > Assert.assertTrue(registerPage.getValidationFailureMessages().isEmpty()); > + return result; > + } > + return registerPage.register(); > + } > + > + /** Deletes specified user if it exists, leaves the driver on > undefined page. */ > + private void deleteUser(String userName) > + { > + ViewPage vp = new ViewPage(getDriver()); > + TestUtils.gotoPage("XWiki", userName, getDriver()); > + if (vp.exists()) { > + vp.loginAsAdmin(); > + TestUtils.deletePage("XWiki", userName, getDriver()); > + vp.clickLogout(); > + } > + } > + > + protected void tryToLogin(String username, String password) > + { > + LoginPage loginPage = registerPage.clickLogin(); > + loginPage.loginAs(username, password); > + Assert.assertTrue(registerPage.isAuthenticated()); > + } > +} > > > Property changes on: > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/RegisterTest.java > ___________________________________________________________________ > Name: svn:keywords > + Author Id Revision HeadURL > Name: svn:eol-style > + native > > Added: > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/RegisterTestAdminAddUser.java > =================================================================== > --- > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/RegisterTestAdminAddUser.java > (rev 0) > +++ > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/RegisterTestAdminAddUser.java > 2010-04-27 06:45:23 UTC (rev 28628) > @@ -0,0 +1,54 @@ > +/* > + * See the NOTICE file distributed with this work for additional > + * information regarding copyright ownership. > + * > + * This is free software; you can redistribute it and/or modify it > + * under the terms of the GNU Lesser General Public License as > + * published by the Free Software Foundation; either version 2.1 of > + * the License, or (at your option) any later version. > + * > + * This software is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with this software; if not, write to the Free > + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, > MA > + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. > + */ > +package org.xwiki.it.ui; > + > +import org.junit.Assert; > +import org.junit.Test; > + > +import org.xwiki.it.ui.elements.RegisterPage; > +import org.xwiki.it.ui.elements.HomePage; > +import org.xwiki.it.ui.elements.LoginPage; > +import org.xwiki.it.ui.elements.AdministrationPage; > +import org.xwiki.it.ui.elements.UsersPage; > +import org.xwiki.it.ui.elements.LightBoxRegisterPage; > + > +/** > + * Test the Admin->Users->AddNewUser feature. > + * > + * @version $Id$ > + * @since 2.4M1 > + */ > +public class RegisterTestAdminAddUser extends RegisterTest > +{ > + protected RegisterPage getRegisterPage() > + { > + return new LightBoxRegisterPage(getDriver()); > + } > + > + protected void tryToLogin(String username, String password) > + { > + HomePage homePage = new HomePage(getDriver()); > + homePage.gotoHomePage(); > + homePage.clickLogout(); > + LoginPage loginPage = homePage.clickLogin(); > + loginPage.loginAs(username, password); > + Assert.assertTrue(registerPage.isAuthenticated()); > + } > +} > > > Property changes on: > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/RegisterTestAdminAddUser.java > ___________________________________________________________________ > Name: svn:keywords > + Author Id Revision HeadURL > Name: svn:eol-style > + native > > Added: > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/RegisterTestNoLiveValidation.java > =================================================================== > --- > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/RegisterTestNoLiveValidation.java > (rev 0) > +++ > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/RegisterTestNoLiveValidation.java > 2010-04-27 06:45:23 UTC (rev 28628) > @@ -0,0 +1,34 @@ > +/* > + * See the NOTICE file distributed with this work for additional > + * information regarding copyright ownership. > + * > + * This is free software; you can redistribute it and/or modify it > + * under the terms of the GNU Lesser General Public License as > + * published by the Free Software Foundation; either version 2.1 of > + * the License, or (at your option) any later version. > + * > + * This software is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with this software; if not, write to the Free > + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, > MA > + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. > + */ > +package org.xwiki.it.ui; > + > +/** > + * Test the user registration feature without javascript field > validation. > + * > + * @version $Id$ > + * @since 2.4M1 > + */ > +public class RegisterTestNoLiveValidation extends RegisterTest > +{ > + protected boolean useLiveValidation() > + { > + return false; > + } > +} > > > Property changes on: > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/RegisterTestNoLiveValidation.java > ___________________________________________________________________ > Name: svn:keywords > + Author Id Revision HeadURL > Name: svn:eol-style > + native > > Added: > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/AdminSectionPage.java > =================================================================== > --- > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/AdminSectionPage.java > (rev 0) > +++ > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/AdminSectionPage.java > 2010-04-27 06:45:23 UTC (rev 28628) > @@ -0,0 +1,65 @@ > +/* > + * See the NOTICE file distributed with this work for additional > + * information regarding copyright ownership. > + * > + * This is free software; you can redistribute it and/or modify it > + * under the terms of the GNU Lesser General Public License as > + * published by the Free Software Foundation; either version 2.1 of > + * the License, or (at your option) any later version. > + * > + * This software is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with this software; if not, write to the Free > + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, > MA > + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. > + */ > +package org.xwiki.it.ui.elements; > + > +import org.openqa.selenium.WebDriver; > +import org.openqa.selenium.WebElement; > +import org.openqa.selenium.support.FindBy; > +import org.xwiki.it.ui.framework.TestUtils; > + > +/** > + * Represents the actions possible on the main Administration Page. > + * > + * @version $Id$ > + * @since 2.3M1 > + */ > +public class AdminSectionPage extends AdministrationPage > +{ > + @FindBy(xpath = > "//d...@id='admin-page-content']/div/p/span/inp...@type='submit']") > + private WebElement saveButton; > + > + // The admin-page-content div is being treated as a form since it > may contain multiple forms and we want to be able > + // to access elements in them all. > + @FindBy(xpath = "//d...@id='admin-page-content']") > + private WebElement formElement; > + > + private FormPage form; > + > + public AdminSectionPage(WebDriver driver) > + { > + super(driver); > + this.form = new FormPage(formElement, driver); > + } > + > + public void gotoAdministrationPage() > + { > + TestUtils.gotoPage("XWiki", "XWikiPreferences", "admin", > getDriver()); > + } > + > + public void clickSave() > + { > + saveButton.click(); > + } > + > + public FormPage getForm() > + { > + return form; > + } > +} > > > Property changes on: > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/AdminSectionPage.java > ___________________________________________________________________ > Name: svn:keywords > + Author Id Revision HeadURL > Name: svn:eol-style > + native > > Modified: > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/AdministrationPage.java > =================================================================== > --- > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/AdministrationPage.java > 2010-04-26 15:17:30 UTC (rev 28627) > +++ > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/AdministrationPage.java > 2010-04-27 06:45:23 UTC (rev 28628) > @@ -35,6 +35,12 @@ > @FindBy(xpath = "//l...@class='Import']/a/span/img") > WebElement importLink; > > + @FindBy(xpath = "//l...@class='Registration']/a/span/img") > + WebElement registrationLink; > + > + @FindBy(xpath = "//l...@class='Users']/a/span/img") > + WebElement usersLink; > + > public AdministrationPage(WebDriver driver) > { > super(driver); > @@ -51,4 +57,15 @@ > return new ImportPage(getDriver()); > } > > + public AdminSectionPage clickRegistrationSection() > + { > + this.registrationLink.click(); > + return new AdminSectionPage(getDriver()); > + } > + > + public UsersPage clickUsersSection() > + { > + this.usersLink.click(); > + return new UsersPage(getDriver()); > + } > } > > Modified: > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/BasePage.java > =================================================================== > --- > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/BasePage.java > 2010-04-26 15:17:30 UTC (rev 28627) > +++ > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/BasePage.java > 2010-04-27 06:45:23 UTC (rev 28628) > @@ -70,21 +70,74 @@ > { > return getDriver().findElement(By.xpath("//me...@name='" + > metaName + "']")).getAttribute("content"); > } > - > + > + /** > + * Wait until the element given by the locator is displayed. Give > up after 10 seconds. > + * > + * @param locator the locator for the element to look for. > + */ > public void waitUntilElementIsVisible(final By locator) > { > this.waitUntilElementIsVisible(locator, 10); > } > > + /** > + * Wait until the element given by the locator is displayed. > + * > + * @param locator the locator for the element to look for. > + * @param timeout how long to wait in seconds before giving up. > + */ > public void waitUntilElementIsVisible(final By locator, int > timeout) > { > + waitUntilElementsAreVisible(new By[] {locator}, timeout, > true); > + } > + > + /** > + * Wait until one or all of a array of element locators are > displayed. > + * > + * @param locators the array of element locators to look for. > + * @param all if true then don't return until all elements are > found. Otherwise return after finding one. > + */ > + public void waitUntilElementsAreVisible(final By[] locators, > final boolean all) > + { > + waitUntilElementsAreVisible(locators, 10, all); > + } > + > + /** > + * Wait until one or all of a array of element locators are > displayed. > + * > + * @param locators the array of element locators to look for. > + * @param timeout how long to wait in seconds before giving up. > + * @param all if true then don't return until all elements are > found. Otherwise return after finding one. > + */ > + public void waitUntilElementsAreVisible(final By[] locators, int > timeout, final boolean all) > + { > Wait<WebDriver> wait = new WebDriverWait(driver, timeout); > wait.until(new ExpectedCondition<WebElement>() > { > public WebElement apply(WebDriver driver) > { > - RenderedWebElement element = (RenderedWebElement) > driver.findElement(locator); > - return element.isDisplayed() ? element : null; > + RenderedWebElement element = null; > + for (int i = 0; i < locators.length; i++) { > + try { > + element = (RenderedWebElement) > driver.findElement(locators[i]); > + } catch (NotFoundException e) { > + // This exception is caught by WebDriverWait > + // but it returns null which is not > necessarily what we want. > + if (all) { > + return null; > + } > + continue; > + } > + if (element.isDisplayed()) { > + if (!all) { > + return element; > + } > + } else if (all) { > + return null; > + } > + } > + return element; > } > }); > } > > Added: > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/FormPage.java > =================================================================== > --- > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/FormPage.java > (rev 0) > +++ > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/FormPage.java > 2010-04-27 06:45:23 UTC (rev 28628) > @@ -0,0 +1,96 @@ > +/* > + * See the NOTICE file distributed with this work for additional > + * information regarding copyright ownership. > + * > + * This is free software; you can redistribute it and/or modify it > + * under the terms of the GNU Lesser General Public License as > + * published by the Free Software Foundation; either version 2.1 of > + * the License, or (at your option) any later version. > + * > + * This software is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with this software; if not, write to the Free > + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, > MA > + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. > + */ > +package org.xwiki.it.ui.elements; > + > +import java.util.Map; > +import java.util.HashMap; > + > +import org.openqa.selenium.WebDriver; > +import org.openqa.selenium.WebElement; > +import org.openqa.selenium.NoSuchElementException; > +import org.openqa.selenium.WebDriverException; > +import org.openqa.selenium.By; > + > +/** > + * Represents a Form. > + * > + * @version $Id:$ > + * @since 2.4M1 > + */ > +public class FormPage extends BasePage > +{ > + private final WebElement form; > + > + public FormPage(WebElement form, WebDriver driver) > + { > + super(driver); > + this.form = form; > + } > + > + public void fillFieldsByName(Map<String, String> valuesByNames) > + { > + Map valuesByElements = new HashMap<WebElement, String>((int) > (valuesByNames.size() / 0.75)); > + > + for (String name : valuesByNames.keySet()) { > + > valuesByElements.put(this.form.findElement(By.name(name)), > valuesByNames.get(name)); > + } > + fillFieldsByElements(valuesByElements); > + } > + > + > + public void fillFieldsByElements(Map<WebElement, String> > valuesByElements) > + { > + for (WebElement el : valuesByElements.keySet()) { > + setFieldValue(el, valuesByElements.get(el)); > + } > + } > + > + public void setFieldValue(By findElementBy, String value) > + { > + setFieldValue(this.form.findElement(findElementBy), value); > + } > + > + public void setFieldValue(WebElement fieldElement, String value) > + { > + if (!fieldElement.getTagName().equals("input") && > !fieldElement.getTagName().equals("textbox")) { > + throw new WebDriverException("You can only fill in input > and textbox elements."); > + } > + if (fieldElement.getAttribute("type").equals("checkbox")) { > + setCheckBox(fieldElement, value.equals("true")); > + } else { > + fieldElement.clear(); > + fieldElement.sendKeys(value); > + } > + } > + > + public void setCheckBox(WebElement checkBoxElement, boolean > checked) > + { > + int x = 0; > + while (checkBoxElement.isSelected() != checked) { > + checkBoxElement.toggle(); > + if (x == 100) { > + throw new WebDriverException("Unable to set checkbox > at " > + + > checkBoxElement.getAttribute("name") + " to " + checked); > + } > + x++; > + } > + > + } > +} > > > Property changes on: > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/FormPage.java > ___________________________________________________________________ > Name: svn:keywords > + Author Id Revision HeadURL > Name: svn:eol-style > + native > > Added: > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/LightBoxRegisterPage.java > =================================================================== > --- > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/LightBoxRegisterPage.java > (rev 0) > +++ > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/LightBoxRegisterPage.java > 2010-04-27 06:45:23 UTC (rev 28628) > @@ -0,0 +1,81 @@ > +/* > + * See the NOTICE file distributed with this work for additional > + * information regarding copyright ownership. > + * > + * This is free software; you can redistribute it and/or modify it > + * under the terms of the GNU Lesser General Public License as > + * published by the Free Software Foundation; either version 2.1 of > + * the License, or (at your option) any later version. > + * > + * This software is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with this software; if not, write to the Free > + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, > MA > + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. > + */ > +package org.xwiki.it.ui.elements; > + > +import java.util.List; > +import java.util.ArrayList; > + > +import org.openqa.selenium.support.FindBy; > +import org.openqa.selenium.By; > +import org.openqa.selenium.WebElement; > +import org.openqa.selenium.WebDriver; > + > +/** > + * Represents a registertion page in a lightbox > + * > + * @version $Id$ > + * @since 2.3M1 > + */ > +public class LightBoxRegisterPage extends RegisterPage > +{ > + @FindBy(xpath = > "//div/fo...@id='register']/div/span[1]/inp...@value='Save']") > + private WebElement submitButton; > + > + public LightBoxRegisterPage(WebDriver driver) > + { > + super(driver); > + } > + > + public void gotoRegisterPage() > + { > + HomePage homePage = new HomePage(getDriver()); > + homePage.gotoHomePage(); > + > + homePage.loginAsAdmin(); > + AdministrationPage adminPage = homePage.administorWiki(); > + UsersPage usersPage = adminPage.clickUsersSection(); > + > + usersPage.clickAddNewUser(); > + waitUntilElementIsVisible(By.id("register_first_name")); > + } > + > + /** @return true if registration is successful, false if user > couldn't be registered. */ > + public boolean register() > + { > + submitButton.click(); > + > + waitUntilElementsAreVisible( > + new By[] > {By.xpath("//t...@class='username']/a...@href='/xwiki/bin/view/XWiki/JohnSmith']"), > + > By.xpath("//dd/sp...@class='LV_validation_message LV_invalid']") > + }, > + false > + ); > + > + return !getDriver() > + .findElements( > + > By.xpath("//t...@class='username']/a...@href='/xwiki/bin/view/XWiki/JohnSmith']")) > + .isEmpty(); > + } > + > + public boolean liveValidationEnabled() > + { > + return > !getDriver().findElements(By.xpath("//d...@id='lb']/d...@id='lb-content']/script[3]")).isEmpty(); > + } > +} > > > Property changes on: > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/LightBoxRegisterPage.java > ___________________________________________________________________ > Name: svn:keywords > + Author Id Revision HeadURL > Name: svn:eol-style > + native > > Modified: > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/RegisterPage.java > =================================================================== > --- > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/RegisterPage.java > 2010-04-26 15:17:30 UTC (rev 28627) > +++ > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/RegisterPage.java > 2010-04-27 06:45:23 UTC (rev 28628) > @@ -19,8 +19,18 @@ > */ > package org.xwiki.it.ui.elements; > > +import java.util.List; > +import java.util.Map; > +import java.util.HashMap; > + > +import org.openqa.selenium.support.FindBy; > +import org.openqa.selenium.By; > +import org.openqa.selenium.WebElement; > import org.openqa.selenium.WebDriver; > +import org.openqa.selenium.WebDriverException; > > +import org.xwiki.it.ui.framework.TestUtils; > + > /** > * Represents the actions possible on the Registration Page > * > @@ -29,8 +39,133 @@ > */ > public class RegisterPage extends ViewPage > { > + @FindBy(id = "register") > + private WebElement registerFormElement; > + > + @FindBy(xpath = > "//fo...@id='register']/div/span/inp...@type='submit']") > + private WebElement submitButton; > + > + private FormPage form; > + > public RegisterPage(WebDriver driver) > { > super(driver); > } > + > + /** To put the registration page someplace else, subclass this > class and change this method. */ > + public boolean isOnRegisterPage() > + { > + if (registerFormElement != null && > !getDriver().findElements(By.name("register_password")).isEmpty()) { > + if (form == null) { > + form = new FormPage(registerFormElement, > getDriver()); > + } > + return true; > + } > + return false; > + } > + > + /** To put the registration page someplace else, subclass this > class and change this method. */ > + public void gotoRegisterPage() > + { > + HomePage homePage = new HomePage(getDriver()); > + homePage.gotoHomePage(); > + > + if (homePage.isAuthenticated()) { > + homePage.clickLogout(); > + } > + > + homePage.clickRegister(); > + form = new FormPage(registerFormElement, getDriver()); > + } > + > + public void fillInJohnSmithValues() > + { > + fillRegisterForm("John", "Smith", "JohnSmith", > "WeakPassword", "WeakPassword", "[email protected]"); > + } > + > + public void fillRegisterForm(final String firstName, > + final String lastName, > + final String username, > + final String password, > + final String confirmPassword, > + final String email) > + { > + checkAtRegisterPage(); > + Map map = new HashMap(); > + if (firstName != null) { > + map.put("register_first_name", firstName); > + } > + if (lastName != null) { > + map.put("register_last_name", lastName); > + } > + if (username != null) { > + map.put("xwikiname", username); > + } > + if (password != null) { > + map.put("register_password", password); > + } > + if (confirmPassword != null) { > + map.put("register2_password", confirmPassword); > + } > + if (email != null) { > + map.put("register_email", email); > + } > + form.fillFieldsByName(map); > + } > + > + /** @return true if registration is successful, false if user > couldn't be registered. */ > + public boolean register() > + { > + checkAtRegisterPage(); > + submitButton.click(); > + > + List<WebElement> infos = > getDriver().findElements(By.className("infomessage")); > + for (WebElement info : infos) { > + if (info.getText().indexOf("Registration successful.") != > -1) { > + return true; > + } > + } > + return false; > + } > + > + /** @return a list of WebElements representing validation failure > messages. Use after calling register() */ > + public List<WebElement> getValidationFailureMessages() > + { > + return > getDriver().findElements(By.xpath("//dd/sp...@class='LV_validation_message > LV_invalid']")); > + } > + > + /** @return Is the specified message included in the list of > validation failure messages. */ > + public boolean validationFailureMessagesInclude(String message) > + { > + for (WebElement messageElement : > getValidationFailureMessages()) { > + if (messageElement.getText().equals(message)) { > + return true; > + } > + } > + return false; > + } > + > + public boolean liveValidationEnabled() > + { > + return > !getDriver().findElements(By.xpath("/html/body/div/div/div[3]/div/div/div/div/div/script")).isEmpty(); > + } > + > + /** Try to make LiveValidation validate the forms. Focus on an > unvalidated field (register_first_name)*/ > + public void triggerLiveValidation() > + { > + // Click on all of the validated fields to prevent "Passwords > don't match" sticking -> flickering test. > + // The right solution is to have a better way to fire > LiveValidation without excessive js. > + > registerFormElement.findElement(By.name("register2_password")).click(); > + > registerFormElement.findElement(By.name("register_password")).click(); > + > registerFormElement.findElement(By.name("xwikiname")).click(); > + > + > registerFormElement.findElement(By.name("register_first_name")).click(); > + } > + > + private void checkAtRegisterPage() > + { > + if (!isOnRegisterPage()) { > + throw new WebDriverException("Must go to the registration > page before using it's functions."); > + } > + } > } > > Added: > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/UsersPage.java > =================================================================== > --- > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/UsersPage.java > (rev 0) > +++ > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/UsersPage.java > 2010-04-27 06:45:23 UTC (rev 28628) > @@ -0,0 +1,56 @@ > +/* > + * See the NOTICE file distributed with this work for additional > + * information regarding copyright ownership. > + * > + * This is free software; you can redistribute it and/or modify it > + * under the terms of the GNU Lesser General Public License as > + * published by the Free Software Foundation; either version 2.1 of > + * the License, or (at your option) any later version. > + * > + * This software is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with this software; if not, write to the Free > + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, > MA > + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. > + */ > +package org.xwiki.it.ui.elements; > + > +import org.junit.Assert; > +import org.junit.Test; > + > +import org.openqa.selenium.WebDriver; > +import org.openqa.selenium.WebElement; > +import org.openqa.selenium.support.FindBy; > + > + > +import org.xwiki.it.ui.elements.RegisterPage; > +import org.xwiki.it.ui.elements.BasePage; > +import org.xwiki.it.ui.elements.AdministrationPage; > + > +/** > + * Test the Admin->Users->AddNewUser feature. > + * > + * @version $Id$ > + * @since 2.4M1 > + */ > +public class UsersPage extends BasePage > +{ > + @FindBy(id = "addNewUser") > + private WebElement addNewUserButton; > + > + public UsersPage(WebDriver driver) > + { > + super(driver); > + } > + > + public RegisterPage clickAddNewUser() > + { > + this.addNewUserButton.click(); > + RegisterPage rp = new LightBoxRegisterPage(getDriver()); > + return rp; > + } > +} > > > Property changes on: > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/UsersPage.java > ___________________________________________________________________ > Name: svn:keywords > + Author Id Revision HeadURL > Name: svn:eol-style > + native > > Modified: > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/ViewPage.java > =================================================================== > --- > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/ViewPage.java > 2010-04-26 15:17:30 UTC (rev 28627) > +++ > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/elements/ViewPage.java > 2010-04-27 06:45:23 UTC (rev 28628) > @@ -19,6 +19,8 @@ > */ > package org.xwiki.it.ui.elements; > > +import java.util.List; > + > import org.openqa.selenium.By; > import org.openqa.selenium.JavascriptExecutor; > import org.openqa.selenium.WebDriver; > @@ -52,6 +54,9 @@ > @FindBy(id = "tmCreateSpace") > private WebElement createSpaceMenuLink; > > + @FindBy(id= "tmAdminWiki") > + private WebElement administorWikiMenuLink; > + > public ViewPage(WebDriver driver) > { > super(driver); > @@ -63,12 +68,16 @@ > public void loginAsAdmin() > { > if (!isAuthenticated()) { > - // If there's no login link then go to the home page > + // If there's no login link then go to the home page. > if (!hasLoginLink()) { > + String thisPage = getPageURL(); > HomePage homePage = new HomePage(getDriver()); > homePage.gotoHomePage(); > + clickLogin().loginAsAdmin(); > + getDriver().get(thisPage); > + } else { > + clickLogin().loginAsAdmin(); > } > - clickLogin().loginAsAdmin(); > } > } > > @@ -122,6 +131,13 @@ > return new CreateSpacePage(getDriver()); > } > > + public AdministrationPage administorWiki() > + { > + hoverOverMenu("tmWiki"); > + this.administorWikiMenuLink.click(); > + return new AdministrationPage(getDriver()); > + } > + > // TODO: I don't think we should go through the menus, it's > probably faster to to as deletePage() does > public void deleteCurrentPage() > { > @@ -142,6 +158,19 @@ > > return new HistoryPane(getDriver()); > } > + > + /** @return does this page exist. */ > + public boolean exists() > + { > + List<WebElement> messages = > getDriver().findElements(By.className("xwikimessage")); > + for (WebElement message : messages) { > + if (message.getText().equals("The requested document > could not be found.") > + || message.getText().equals("The document has been > deleted.")) { > + return false; > + } > + } > + return true; > + } > > private void hoverOverMenu(String menuId) > { > > Modified: > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/framework/AbstractTest.java > =================================================================== > --- > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/framework/AbstractTest.java > 2010-04-26 15:17:30 UTC (rev 28627) > +++ > enterprise/trunk/distribution-test/ui-tests/src/test/it/org/xwiki/it/ui/framework/AbstractTest.java > 2010-04-27 06:45:23 UTC (rev 28628) > @@ -22,6 +22,7 @@ > import org.junit.AfterClass; > import org.junit.BeforeClass; > import org.openqa.selenium.WebDriver; > +import org.xwiki.test.XWikiExecutor; > > /** > * To be extended by all Test Classes. Allows to start/stop the Web > Driver and get access to it. > @@ -31,20 +32,30 @@ > */ > public class AbstractTest > { > + private static XWikiExecutor executor; > + > @BeforeClass > - public static void init() > + public static void init() throws Exception > { > + if > (!Boolean.parseBoolean(System.getProperty("xwiki.alltests"))) { > + // Start XE > + executor = new XWikiExecutor(0); > + executor.start(); > + } > + > if (TestUtils.getDriver() == null) { > TestUtils.initDriver(); > } > } > > @AfterClass > - public static void shutdown() > + public static void shutdown() throws Exception > { > // Only close if we're not part of the AllTests test suite > if > (!Boolean.parseBoolean(System.getProperty("xwiki.alltests"))) { > TestUtils.closeDriver(); > + // Stop XE > + executor.stop(); > } > } > > > _______________________________________________ > notifications mailing list > [email protected] > http://lists.xwiki.org/mailman/listinfo/notifications _______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs

