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

Commit

Permalink
Merge pull request #661 from zanata/fix-admin-tests
Browse files Browse the repository at this point in the history
Fix admin and related tests after UI update
  • Loading branch information
djansen-redhat committed Jan 15, 2015
2 parents bdf70b7 + 84aca2f commit 98d4ddc
Show file tree
Hide file tree
Showing 14 changed files with 263 additions and 178 deletions.
Expand Up @@ -26,6 +26,7 @@
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.zanata.page.BasePage;
import org.zanata.util.WebElementUtil;

import java.util.HashMap;
import java.util.List;
Expand All @@ -34,28 +35,45 @@
@Slf4j
public class AddLanguagePage extends BasePage {

public static final int NAME_ROW = 3;
private static final int NAME_COLUMN = 0;
private static final int VALUE_COLUMN = 1;

private By languageInputField = By.xpath(
"//input[@type='text' and contains(@id, 'localeName')]");
private By saveButton = By.xpath("//input[@value='Save']");
private By enabledByDefaultCheckbox = By.xpath(
"//input[@type='checkbox' and contains(@name, 'enabledByDefault')]");
private By saveButton = By.id("addLanguageForm:save-button");
private By enabledByDefaultCheckbox = By.id("addLanguageForm:enabled");
private By languageInfo = By.id("addLanguageForm:output");
private By languageInfoItem = By.className("txt--meta");

public AddLanguagePage(final WebDriver driver) {
super(driver);
}

public AddLanguagePage inputLanguage(String language) {
public AddLanguagePage enterSearchLanguage(String language) {
log.info("Enter language {}", language);
waitForWebElement(languageInputField).sendKeys(language);
defocus();
waitForPageSilence();
WebElementUtil.searchAutocomplete(getDriver(),
"localeAutocomplete", language);
return new AddLanguagePage(getDriver());
}

public AddLanguagePage selectSearchLanguage(final String language) {
log.info("Select language {}", language);
waitForAMoment().until(new Predicate<WebDriver>() {
@Override
public boolean apply(WebDriver driver) {
List < WebElement > searchResults =
WebElementUtil.getSearchAutocompleteResults(
driver,
"addLanguageForm",
"localeAutocomplete");
boolean clickedLanguage = false;
for (WebElement searchResult : searchResults) {
if (searchResult.getText().contains(language)) {
searchResult.click();
clickedLanguage = true;
break;
}
}
return clickedLanguage;
}
});
return new AddLanguagePage(getDriver());
}
public AddLanguagePage enableLanguageByDefault() {
log.info("Click Enable by default");
if (!waitForWebElement(enabledByDefaultCheckbox).isSelected()) {
Expand All @@ -79,18 +97,20 @@ public Map<String, String> getLanguageDetails() {
waitForAMoment().until(new Predicate<WebDriver>() {
@Override
public boolean apply(WebDriver input) {
List<WebElement> thisElement = getDriver()
.findElements(By.className("prop"));
return !thisElement.get(NAME_ROW)
.findElements(By.tagName("span"))
.get(VALUE_COLUMN).getText().isEmpty();
return !waitForElementExists(languageInfo)
.findElements(By.className("l--push-top-half"))
.get(0).findElement(languageInfoItem)
.getText().isEmpty();
}
});
for (WebElement item : getDriver().findElements(By.className("prop"))) {
map.put(item.findElements(By.tagName("span"))
.get(NAME_COLUMN).getText(),
item.findElements(By.tagName("span"))
.get(VALUE_COLUMN).getText());
for (WebElement item : waitForElementExists(languageInfo)
.findElements(By.className("l--push-top-half"))) {
String name = item.getText();
String value = item.findElement(languageInfoItem).getText();
// Truncate name at value
int cutoff = name.lastIndexOf(value);
name = name.substring(0, cutoff).trim();
map.put(name, value);
}
return map;
}
Expand Down
Expand Up @@ -32,6 +32,7 @@
import org.zanata.util.TableRow;
import org.zanata.util.WebElementUtil;

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

@Slf4j
Expand All @@ -40,90 +41,100 @@ public class ManageLanguagePage extends BasePage {
public static final int LOCALE_COLUMN = 0;
public static final int ENABLED_COLUMN = 3;

private By languageTable = By.id("languageForm:threads");
private By languageTable = By.id("languageForm");
private By addLanguageButton = By.linkText("Add New Language");
private By moreActions = By.id("more-actions");
private By enableByDefault = By.linkText("Enable by default");
private By disableByDefault = By.linkText("Disable by default");

public ManageLanguagePage(WebDriver driver) {
super(driver);
}

public ManageLanguagePage clickMoreActions() {
log.info("Click More Actions dropdown");
waitForWebElement(moreActions).click();
return new ManageLanguagePage(getDriver());
}

public AddLanguagePage addNewLanguage() {
log.info("Click Add New Language");
waitForWebElement(addLanguageButton).click();
return new AddLanguagePage(getDriver());
}

public ManageLanguageTeamMemberPage manageTeamMembersFor(
final String localeId) {
log.info("Click team {}", localeId);
TableRow matchedRow = findRowByLocale(localeId);

log.debug("for locale [{}] found table row: {}", localeId, matchedRow);
List<WebElement> cells = matchedRow.getCells();
int teamMemberCellIndex = cells.size() - 1;
WebElement teamMemberCell = cells.get(teamMemberCellIndex);
WebElement teamMemberButton =
teamMemberCell.findElement(By
.xpath(".//input[@value='Team Members']"));
teamMemberButton.click();
findRowByLocale(localeId).click();
return new ManageLanguageTeamMemberPage(getDriver());
}

private TableRow findRowByLocale(final String localeId) {
TableRow matchedRow =
waitForAMoment().until(new Function<WebDriver, TableRow>() {
@Override
public TableRow apply(WebDriver driver) {
List<TableRow> tableRows =
WebElementUtil.getTableRows(getDriver(),
languageTable);
Optional<TableRow> matchedRow =
Iterables.tryFind(tableRows,
new Predicate<TableRow>() {
@Override
public boolean
apply(TableRow input) {
List<String> cellContents =
input.getCellContents();
String localeCell =
cellContents.get(
LOCALE_COLUMN)
.trim();
return localeCell
.equalsIgnoreCase(localeId);
}
});

// we keep looking for the locale until timeout
return matchedRow.isPresent() ? matchedRow.get() : null;
}
});
return matchedRow;
public ManageLanguagePage clickOptions(String localeId) {
findRowByLocale(localeId).findElement(By.className("dropdown__toggle"))
.click();
return new ManageLanguagePage(getDriver());
}

public ManageLanguagePage enableLanguageByDefault(String localeId) {
log.info("Click to enable {}", localeId);
TableRow matchedRow = findRowByLocale(localeId);

WebElement enabledCell = matchedRow.getCells().get(ENABLED_COLUMN);
WebElement enabledCheckbox =
enabledCell.findElement(By.tagName("input"));
if (!enabledCheckbox.isSelected()) {
enabledCheckbox.click();
getDriver().switchTo().alert().accept();
}

findRowByLocale(localeId).findElement(enableByDefault).click();
switchToAlert().accept();
return new ManageLanguagePage(getDriver());
}

public boolean languageIsEnabled(String localeId) {
log.info("Query is language enabled {}", localeId);
return findRowByLocale(localeId).getCells().get(ENABLED_COLUMN)
.findElement(By.tagName("input")).isSelected();
return findRowByLocale(localeId)
.findElements(By.className("i--cancel"))
.size() > 0;
}

public List<String> getLanguageLocales() {
log.info("Query list of languages");
return WebElementUtil.getColumnContents(getDriver(), languageTable,
LOCALE_COLUMN);
return getNames();
}

private String getShortLocale(WebElement row) {
String locale = getListEntryLocale(row);
return locale.substring(0, locale.indexOf('[')).trim();
}

private WebElement findRowByLocale(final String localeId) {
for (WebElement row : getRows()) {
if (getShortLocale(row).equals(localeId)) {
return row;
}
}
throw new RuntimeException("Did not find locale "+localeId);
}

private List<WebElement> getRows() {
return waitForWebElement(waitForElementExists(By.id("languageForm")),
By.className("list--stats"))
.findElements(By.className("list__item--actionable"));
}

private List<String> getNames() {
List<String> names = new ArrayList<>();
for (WebElement listItem : getRows()) {
names.add(getShortLocale(listItem));
}
return names;
}

private String getListEntryName(WebElement listElement) {
String listTitle = listElement.findElement(By.className("list__title"))
.getText();
return listTitle.substring(0, listTitle.lastIndexOf(getListEntryUsers(listElement))).trim();
}

private String getListEntryLocale(WebElement listElement) {
return listElement.findElement(By.className("list__item__meta")).getText().trim();
}

private String getListEntryUsers(WebElement listElement) {
return listElement.findElement(By.className("list__title"))
.findElement(By.className("txt--meta")).getText().trim();
}
}

0 comments on commit 98d4ddc

Please sign in to comment.