/*******************************************************************************
* Copyright (c) 2010-2014 SAP AG and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.skalli.selenium.pageobjects.ext.editform;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.skalli.selenium.pageobjects.ext.AbstractExtensionEditForm;
import org.eclipse.skalli.selenium.pageobjects.ext.util.PositionProvider;
import org.eclipse.skalli.selenium.pageobjects.ext.util.RemovableUserEntry;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.RemoteWebElement;
import org.openqa.selenium.support.PageFactory;
/**
* This is the extension edit form for the scrum extension
*/
//###could be extended from ProjectMembersExtensionEditForm -> the methods would be called different
//###Project Leads = Scrum Masters
//###Committers = Product Owners
//###Backlog field is the only thing which is added to ProjectMembersExtensionEditForm
public class ScrumExtensionEditForm extends AbstractExtensionEditForm {
public ScrumExtensionEditForm(WebDriver driver) {
super(driver, PositionProvider.getPositionNumberOfExtensionsEditForm(driver,
PositionProvider.getScrumExtensionEditFormName()));
}
@Override
protected boolean isExtensionContentDisplayed() {
//scrum masters user section and product owners user section element can be a closed tag -> isDisplayed returns false
return getScrumMastersAddUserLink().isDisplayed() && getProductOwnersAddUserLink().isDisplayed()
&& (getScrumMastersUsersSection() instanceof RemoteWebElement)
&& (getProductOwnersUsersSection() instanceof RemoteWebElement) && getBacklogField().isDisplayed()
&& areScrumMasterUsersDisplayed() && areProductOwnersUsersDisplayed();
}
private boolean areScrumMasterUsersDisplayed() {
List<RemovableUserEntry> scrumMasterUserEntries = getScrumMastersUsers();
for (Iterator<RemovableUserEntry> iterator = scrumMasterUserEntries.iterator(); iterator.hasNext();) {
RemovableUserEntry scrumMasterUserEntry = (RemovableUserEntry) iterator.next();
if (!scrumMasterUserEntry.isDisplayed()) {
return false;
}
}
return true;
}
private boolean areProductOwnersUsersDisplayed() {
List<RemovableUserEntry> productOwnersUserEntries = getProductOwnersUsers();
for (Iterator<RemovableUserEntry> iterator = productOwnersUserEntries.iterator(); iterator.hasNext();) {
RemovableUserEntry productOwnersUserEntry = (RemovableUserEntry) iterator.next();
if (!productOwnersUserEntry.isDisplayed()) {
return false;
}
}
return true;
}
//driver must be located on the edit form
public int getNumberOfScrumMastersUsers() {
WebElement root = driver.findElement(By.xpath(getXPathToScrumMastersUsersSection()));
List<WebElement> userRoots = root.findElements(By.xpath("./tr"));
return userRoots.size();
}
//driver must be located on the edit form
public List<RemovableUserEntry> getScrumMastersUsers() {
List<RemovableUserEntry> users = new ArrayList<RemovableUserEntry>();
for (int i = 1; i <= getNumberOfScrumMastersUsers(); i++) {
users.add(PageFactory.initElements(driver, RemovableUserEntry.class).setBaseXPath(
getXPathToScrumMastersUsersSection() + "/tr[" + i + "]/td[1]/div/div/div/div/div/div"));
}
return users;
}
//driver must be located on the edit form
public int getNumberOfProductOwnersUsers() {
WebElement root = driver.findElement(By.xpath(getXPathToProductOwnersUsersSection()));
List<WebElement> userRoots = root.findElements(By.xpath("./tr"));
return userRoots.size();
}
//driver must be located on the edit form
public List<RemovableUserEntry> getProductOwnersUsers() {
List<RemovableUserEntry> users = new ArrayList<RemovableUserEntry>();
for (int i = 1; i <= getNumberOfProductOwnersUsers(); i++) {
users.add(PageFactory.initElements(driver, RemovableUserEntry.class).setBaseXPath(
getXPathToProductOwnersUsersSection() + "/tr[" + i + "]/td[1]/div/div/div/div/div/div"));
}
return users;
}
public void clickScrumMastersAddUserLink() {
getScrumMastersAddUserLink().click();
}
public void clickProductOwnersAddUserLink() {
getProductOwnersAddUserLink().click();
}
public void sendKeysToBacklogField(String text) {
getBacklogField().sendKeys(text);
}
public String getBacklogFieldContent() {
return getBacklogField().getAttribute("value");
}
protected WebElement getScrumMastersAddUserLink() {
return driver.findElement(By.xpath(getXPathToScrumMastersAddUserLink()));
}
protected WebElement getProductOwnersAddUserLink() {
return driver.findElement(By.xpath(getXPathToProductOwnersAddUserLink()));
}
protected WebElement getScrumMastersUsersSection() {
return driver.findElement(By.xpath(getXPathToScrumMastersUsersSection()));
}
protected WebElement getProductOwnersUsersSection() {
return driver.findElement(By.xpath(getXPathToProductOwnersUsersSection()));
}
protected WebElement getBacklogField() {
return driver.findElement(By.xpath(getXPathToBacklogField()));
}
private String getXPathToScrumMastersAddUserLink() {
return getXPathToExtensionContainer() + "/div/div/div/div/div/div[3]/fieldset/div[2]/div/table/tbody/tr[" + 1
+ "]/td[3]/div/div/div/div[" + 2 + "]" + "/div/div/span/span";
}
private String getXPathToProductOwnersAddUserLink() {
return getXPathToExtensionContainer() + "/div/div/div/div/div/div[3]/fieldset/div[2]/div/table/tbody/tr[" + 2
+ "]/td[3]/div/div/div/div[" + 2 + "]" + "/div/div/span/span";
}
private String getXPathToScrumMastersUsersSection() {
return getXPathToExtensionContainer() + "/div/div/div/div/div/div[3]/fieldset/div[2]/div/table/tbody/tr[" + 1
+ "]/td[3]/div/div/div/div[" + 1 + "]" + "/div/div/div[2]/div/table/tbody";
}
private String getXPathToProductOwnersUsersSection() {
return getXPathToExtensionContainer() + "/div/div/div/div/div/div[3]/fieldset/div[2]/div/table/tbody/tr[" + 2
+ "]/td[3]/div/div/div/div[" + 1 + "]" + "/div/div/div[2]/div/table/tbody";
}
private String getXPathToBacklogField() {
return getXPathToExtensionContainer()
+ "/div/div/div/div/div/div[3]/fieldset/div[2]/div/table/tbody/tr[3]/td[3]/input";
}
}