Skip to content
This repository has been archived by the owner on Nov 9, 2017. It is now read-only.

Commit

Permalink
Merge branch 'master' into refactor-file-storage
Browse files Browse the repository at this point in the history
  • Loading branch information
davidmason committed Jul 16, 2013
2 parents b932532 + 0a84eb5 commit 602d3d7
Show file tree
Hide file tree
Showing 73 changed files with 1,899 additions and 696 deletions.
7 changes: 6 additions & 1 deletion functional-test/pom.xml
Expand Up @@ -53,6 +53,7 @@
<webdriver.chrome.bin>/opt/google/chrome/google-chrome</webdriver.chrome.bin>
<!-- this decides what web driver type we intended to use-->
<webdriver.type>chrome</webdriver.type>
<webdriver.display>:0</webdriver.display>
<webdriver.log>${project.build.directory}/webdriver.log</webdriver.log>

<!-- this is the path we store H2 backup script which will be used to reset database state -->
Expand Down Expand Up @@ -402,7 +403,11 @@
<!--<echo>-Dzanata.client.version=maven client version to use. Currently: ${zanata.client.version}</echo>-->
<echo>-Dzanata.sample.projects.basedir=${project.build.testOutputDirectory}/sample-projects</echo>
<echo>-Dcargo.debug.jvm.args : If not set by default will listen to port 8787. Need to set to empty on jenkins</echo>
<echo>-Dinclude.test.patterns : by default is **/*TestSuite.java. Can be used to control what test to run.</echo>
<echo>-Dinclude.test.patterns=test filter pattern. Can be used to control what test to run. Default is **/*TestSuite.java.</echo>
<echo>-Dwebdriver.type=run tests in htmlUnit, chrome or firefox. For chrome, see also webdriver.chrome.* Default is htmlUnit.</echo>
<echo>-Dwebdriver.display=display to run test browser in, for Xnest or otherwise. Default is :0.</echo>
<echo>-Dwebdriver.chrome.bin=full path to chrome binary.</echo>
<echo>-Dwebdriver.chrome.driver=full path to chromedriver binary.</echo>
<echo>==========================================================</echo>
</target>
</configuration>
Expand Down
9 changes: 9 additions & 0 deletions functional-test/src/main/java/org/zanata/page/HomePage.java
Expand Up @@ -26,6 +26,7 @@
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.zanata.page.account.RegisterPage;
import org.zanata.page.administration.AdministrationPage;
import org.zanata.page.groups.VersionGroupsPage;
import org.zanata.page.projects.ProjectsPage;
Expand Down Expand Up @@ -108,4 +109,12 @@ public AdministrationPage goToAdministration()
adminLink.click();
return new AdministrationPage(getDriver());
}

public RegisterPage goToRegistration()
{
getDriver().findElement(By.id("systemCol")).click();
WebElement registerLink = getDriver().findElement(By.id("Register"));
registerLink.click();
return new RegisterPage(getDriver());
}
}
Expand Up @@ -29,6 +29,7 @@
import java.io.IOException;
import java.util.concurrent.TimeUnit;

import com.google.common.collect.ImmutableMap;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriverService;
import org.openqa.selenium.firefox.FirefoxBinary;
Expand Down Expand Up @@ -105,11 +106,11 @@ private WebDriver configureChromeDriver()
driverService = new ChromeDriverService.Builder()
.usingDriverExecutable(new File(PropertiesHolder.properties.getProperty("webdriver.chrome.driver")))
.usingAnyFreePort()
.withEnvironment(ImmutableMap.of("DISPLAY", PropertiesHolder.properties.getProperty("webdriver.display")))
.withLogFile(new File(PropertiesHolder.properties.getProperty("webdriver.log")))
.build();
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability("chrome.binary", PropertiesHolder.properties.getProperty("webdriver.chrome.bin"));
// System.setProperty("webdriver.chrome.driver", properties.getProperty("webdriver.chrome.driver"));
try
{
driverService.start();
Expand All @@ -134,11 +135,13 @@ private WebDriver configureFirefoxDriver()
{
firefoxBinary = new FirefoxBinary();
}
//we timeout the connection in 10 seconds
// firefoxBinary.setTimeout(SECONDS.toMillis(10));

/*
* TODO: Evaluate current timeout
* Timeout the connection in 30 seconds
* firefoxBinary.setTimeout(TimeUnit.SECONDS.toMillis(30));
*/
firefoxBinary.setEnvironmentProperty("DISPLAY", PropertiesHolder.properties.getProperty("webdriver.display"));
return new FirefoxDriver(firefoxBinary, makeFirefoxProfile());
// return new FirefoxDriver();
}

private FirefoxProfile makeFirefoxProfile()
Expand All @@ -149,12 +152,16 @@ private FirefoxProfile makeFirefoxProfile()
// TODO - look at FirefoxDriver.getProfile().
}
final FirefoxProfile firefoxProfile = new FirefoxProfile();
// firefoxProfile.setPreference("browser.safebrowsing.malware.enabled",
// false); // disables connection to sb-ssl.google.com

/*
* TODO: Evaluate need for this
* Disable unnecessary connection to sb-ssl.google.com
* firefoxProfile.setPreference("browser.safebrowsing.malware.enabled", false);
*/

firefoxProfile.setAlwaysLoadNoFocusLib(true);
firefoxProfile.setEnableNativeEvents(true);
firefoxProfile.setAcceptUntrustedCertificates(true);
// firefoxProfile.setPort(8000);
return firefoxProfile;
}

Expand Down
@@ -0,0 +1,192 @@
/*
* Copyright 2013, Red Hat, Inc. and individual contributors as indicated by the
* @author tags. See the copyright.txt file in the distribution for a full
* listing of individual contributors.
*
* 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.zanata.page.account;


import com.google.common.base.Function;
import lombok.extern.slf4j.Slf4j;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.zanata.page.AbstractPage;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
* @author Damian Jansen <a href="mailto:djansen@redhat.com">djansen@redhat.com</a>
*/
@Slf4j
public class RegisterPage extends AbstractPage
{

@FindBy(id = "registerForm:nameField:name")
private WebElement nameField;

@FindBy(id = "registerForm:emailField:email")
private WebElement emailField;

@FindBy(id = "registerForm:usernameField:username")
private WebElement usernameField;

@FindBy(id = "registerForm:passwordField:password")
private WebElement passwordField;

@FindBy(id = "registerForm:passwordConfirmField:passwordConfirm")
private WebElement confirmPasswordField;

@FindBy(id = "registerForm:captcha:verifyCaptcha")
private WebElement captchaField;

@FindBy(id = "registerForm:agreedToTerms:agreedToTerms")
private WebElement termsCheckbox;

@FindBy(id = "registerForm:registerButton")
private WebElement registerButton;

public RegisterPage(WebDriver driver)
{
super(driver);
List<String> elements = new ArrayList<String>();
elements.add("registerForm:nameField:name");
elements.add("registerForm:emailField:email");
elements.add("registerForm:usernameField:username");
elements.add("registerForm:passwordField:password");
elements.add("registerForm:passwordConfirmField:passwordConfirm");
elements.add("registerForm:captcha:verifyCaptcha");
elements.add("registerForm:agreedToTerms:agreedToTerms");
elements.add("registerForm:registerButton");
waitForPage(elements);
}

public RegisterPage enterName(String name)
{
nameField.sendKeys(name);
return new RegisterPage(getDriver());
}

public RegisterPage enterUserName(String userName)
{
usernameField.sendKeys(userName);
return new RegisterPage(getDriver());
}

public RegisterPage enterEmail(String email)
{
emailField.sendKeys(email);
return new RegisterPage(getDriver());
}

public RegisterPage enterPassword(String password)
{
passwordField.sendKeys(password);
return new RegisterPage(getDriver());
}

public RegisterPage enterConfirmPassword(String confirmPassword)
{
confirmPasswordField.sendKeys(confirmPassword);
return new RegisterPage(getDriver());
}

public RegisterPage enterCaptcha(String captcha)
{
captchaField.sendKeys(captcha);
return new RegisterPage(getDriver());
}

public RegisterPage clickTerms()
{
termsCheckbox.click();
return new RegisterPage(getDriver());
}

// TODO: Add a "signup success" page
public AbstractPage register()
{
registerButton.click();
return new AbstractPage(getDriver());
}

public RegisterPage registerFailure()
{
registerButton.click();
return new RegisterPage(getDriver());
}

public RegisterPage clearFields()
{
nameField.clear();
emailField.clear();
usernameField.clear();
passwordField.clear();
confirmPasswordField.clear();
captchaField.clear();
return new RegisterPage(getDriver());
}

/*
Pass in a map of strings, to be entered into the registration fields.
Fields: name, email, username, password, confirmpassword, captcha
*/
public RegisterPage setFields(Map<String, String> fields)
{
clearFields();
enterName(fields.get("name"));
enterEmail(fields.get("email"));
enterUserName(fields.get("username"));
enterPassword(fields.get("password"));
enterConfirmPassword(fields.get("confirmpassword"));
enterCaptcha(fields.get("captcha"));
return new RegisterPage(getDriver());
}

public List<String> waitForErrors()
{
waitForTenSec().until(new Function<WebDriver, WebElement>()
{
@Override
public WebElement apply(WebDriver driver)
{
return getDriver().findElement(By.xpath("//span[@class='errors']"));
}
});
return getErrors();
}

/*
* Wait for all necessary entities to be available
*/
private void waitForPage(List<String> elements) {
for (final String element : elements) {
waitForTenSec().until(new Function<WebDriver, WebElement>()
{
@Override
public WebElement apply(WebDriver driver)
{
return getDriver().findElement(By.id(element));
}
});
}
}
}
Expand Up @@ -28,6 +28,7 @@
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.zanata.page.AbstractPage;
import com.google.common.base.Predicate;

/**
* @author Damian Jansen <a href="mailto:djansen@redhat.com">djansen@redhat.com</a>
Expand All @@ -36,9 +37,6 @@
public class ManageUserAccountPage extends AbstractPage
{

@FindBy(id = "userdetailForm:usernameField:username")
private WebElement usernameField;

@FindBy(id = "userdetailForm:passwordField:password")
private WebElement passwordField;

Expand All @@ -56,6 +54,9 @@ public class ManageUserAccountPage extends AbstractPage

private Map<String, String> roleMap;

// username field will trigger ajax call and become stale
private By usernameBy = By.id("userdetailForm:usernameField:username");

public ManageUserAccountPage(WebDriver driver)
{
super(driver);
Expand All @@ -67,9 +68,18 @@ public ManageUserAccountPage(WebDriver driver)
roleMap.put("user", "4");
}

public ManageUserAccountPage enterUsername(String username)
public ManageUserAccountPage enterUsername(final String username)
{
usernameField.sendKeys(username);
waitForTenSec().until(new Predicate<WebDriver>()
{
@Override
public boolean apply(WebDriver input)
{
WebElement usernameField = input.findElement(usernameBy);
usernameField.sendKeys(username);
return input.findElement(usernameBy).getAttribute("value").equals(username);
}
});
return new ManageUserAccountPage(getDriver());
}

Expand Down Expand Up @@ -117,7 +127,15 @@ public ManageUserPage cancelEditUser()

public ManageUserAccountPage clearFields()
{
usernameField.clear();
waitForTenSec().until(new Predicate<WebDriver>()
{
@Override
public boolean apply(WebDriver input)
{
input.findElement(usernameBy).clear();
return input.findElement(usernameBy).getAttribute("value").isEmpty();
}
});
passwordField.clear();
passwordConfirmField.clear();
return new ManageUserAccountPage(getDriver());
Expand Down

0 comments on commit 602d3d7

Please sign in to comment.