/*******************************************************************************
* 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.concrete;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.skalli.selenium.pageobjects.SearchAndNavigationbarPage;
import org.eclipse.skalli.selenium.pageobjects.ext.AbstractExtensionEditForm;
import org.eclipse.skalli.selenium.pageobjects.ext.editform.AdditionalLinksExtensionEditForm;
import org.eclipse.skalli.selenium.pageobjects.ext.editform.BasicsExtensionEditForm;
import org.eclipse.skalli.selenium.pageobjects.ext.editform.DevelopmentInfrastructureExtensionEditForm;
import org.eclipse.skalli.selenium.pageobjects.ext.editform.InfoExtensionEditForm;
import org.eclipse.skalli.selenium.pageobjects.ext.editform.MavenExtensionEditForm;
import org.eclipse.skalli.selenium.pageobjects.ext.editform.ProjectMembersExtensionEditForm;
import org.eclipse.skalli.selenium.pageobjects.ext.editform.RatingsAndReviewExtensionEditForm;
import org.eclipse.skalli.selenium.pageobjects.ext.editform.RelatedProjectsExtensionEditForm;
import org.eclipse.skalli.selenium.pageobjects.ext.editform.ScrumExtensionEditForm;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;
import org.openqa.selenium.support.PageFactory;
/**
* This page object contains the {@link org.openqa.selenium.WebElement}s for the edit page
*
* The edit page is a page with search field, navigation bar and the edit page specific elements (buttons like "Ok",
* "Cancel", "Expand All", "Collapse All" and the extensions)
*/
public class EditPage extends SearchAndNavigationbarPage {
@FindBy(how = How.XPATH, using = "//div[contains(@class, 'header_button_ok')]")
private WebElement upperOkButton;
@FindBy(how = How.XPATH, using = "//div[contains(@class, 'header_button_cancel')]")
private WebElement upperCancelButton;
@FindBy(how = How.XPATH, using = "//div[contains(@class, 'header_button_validate')]")
private WebElement upperValidateButton;
@FindBy(how = How.XPATH, using = "//div[contains(@class, 'header_button_expand_all')]")
private WebElement upperExpandAllButton;
@FindBy(how = How.XPATH, using = "//div[contains(@class, 'header_button_collapse_all')]")
private WebElement upperCollapseAllButton;
@FindBy(how = How.XPATH, using = "//div[contains(@class, 'footer_button_ok')]")
private WebElement lowerOkButton;
@FindBy(how = How.XPATH, using = "//div[contains(@class, 'footer_button_cancel')]")
private WebElement lowerCancelButton;
@FindBy(how = How.XPATH, using = "//div[contains(@class, 'footer_button_validate')]")
private WebElement lowerValidateButton;
@FindBy(how = How.XPATH, using = "//div[contains(@class, 'footer_button_expand_all')]")
private WebElement lowerExpandAllButton;
@FindBy(how = How.XPATH, using = "//div[contains(@class, 'footer_button_collapse_all')]")
private WebElement lowerCollapseAllButton;
private List<AbstractExtensionEditForm> extensions;
private BasicsExtensionEditForm basicsExtensionEditForm;
private ProjectMembersExtensionEditForm projectMembersExtensionEditForm;
private InfoExtensionEditForm infoExtensionEditForm;
private AdditionalLinksExtensionEditForm additionalLinksExtensionEditForm;
private RatingsAndReviewExtensionEditForm ratingsAndReviewExtensionEditForm;
private RelatedProjectsExtensionEditForm relatedProjectsExtensionEditForm;
private DevelopmentInfrastructureExtensionEditForm developmentInfrastructureExtensionEditForm;
private MavenExtensionEditForm mavenExtensionEditForm;
private ScrumExtensionEditForm scrumExtensionEditForm;
public EditPage(WebDriver driver) {
super(driver);
extensions = new ArrayList<AbstractExtensionEditForm>();
}
//cannot be initialized in constructor because the page may not be loaded -> elements not found -> exception
private void initializeExtensions() {
//initialize only once
if (extensions.size() > 0) {
return;
}
basicsExtensionEditForm = PageFactory.initElements(driver, BasicsExtensionEditForm.class);
extensions.add(basicsExtensionEditForm);
projectMembersExtensionEditForm = PageFactory.initElements(driver, ProjectMembersExtensionEditForm.class);
extensions.add(projectMembersExtensionEditForm);
infoExtensionEditForm = PageFactory.initElements(driver, InfoExtensionEditForm.class);
extensions.add(infoExtensionEditForm);
additionalLinksExtensionEditForm = PageFactory.initElements(driver, AdditionalLinksExtensionEditForm.class);
extensions.add(additionalLinksExtensionEditForm);
ratingsAndReviewExtensionEditForm = PageFactory.initElements(driver, RatingsAndReviewExtensionEditForm.class);
extensions.add(ratingsAndReviewExtensionEditForm);
relatedProjectsExtensionEditForm = PageFactory.initElements(driver, RelatedProjectsExtensionEditForm.class);
extensions.add(relatedProjectsExtensionEditForm);
developmentInfrastructureExtensionEditForm = PageFactory.initElements(driver,
DevelopmentInfrastructureExtensionEditForm.class);
extensions.add(developmentInfrastructureExtensionEditForm);
mavenExtensionEditForm = PageFactory.initElements(driver, MavenExtensionEditForm.class);
extensions.add(mavenExtensionEditForm);
scrumExtensionEditForm = PageFactory.initElements(driver, ScrumExtensionEditForm.class);
extensions.add(scrumExtensionEditForm);
}
@Override
public boolean isDisplayed() {
return super.isDisplayed()
&& getUpperOkButton().isDisplayed()
&& getUpperCancelButton().isDisplayed()
&& getUpperValidateButton().isDisplayed()
&& getUpperExpandAllButton().isDisplayed()
&& getUpperCollapseAllButton().isDisplayed()
&& ((extensions.size() > 0) ? (getLowerOkButton().isDisplayed() && getLowerCancelButton().isDisplayed()
&& getLowerValidateButton().isDisplayed() && getLowerExpandAllButton().isDisplayed() && getLowerCollapseAllButton()
.isDisplayed())
: true);
}
/**
* check needs a lot of time so it have to be executed separately
* @return whether the extensions are displayed or not
*/
public boolean areExtensionsDisplayed() {
initializeExtensions();
for (Iterator<AbstractExtensionEditForm> iterator = extensions.iterator(); iterator.hasNext();) {
AbstractExtensionEditForm editForm = (AbstractExtensionEditForm) iterator.next();
if (!editForm.isDisplayed()) {
return false;
}
}
return true;
}
public void clickUpperOkButton() {
getUpperOkButton().click();
}
public void clickUpperCancelButton() {
getUpperCancelButton().click();
}
public void clickUpperValidateButton() {
getUpperValidateButton().click();
}
public void clickUpperExpandAllButton() {
getUpperExpandAllButton().click();
}
public void clickUpperCollapseAllButton() {
getUpperCollapseAllButton().click();
}
public void clickLowerOkButton() {
getLowerOkButton().click();
}
public void clickLowerCancelButton() {
getLowerCancelButton().click();
}
public void clickLowerValidateButton() {
getLowerValidateButton().click();
}
public void clickLowerExpandAllButton() {
getLowerExpandAllButton().click();
}
public void clickLowerCollapseAllButton() {
getLowerCollapseAllButton().click();
}
public List<AbstractExtensionEditForm> getExtensions() {
return extensions;
}
public BasicsExtensionEditForm getBasicsExtensionEditForm() {
initializeExtensions();
return basicsExtensionEditForm;
}
public ProjectMembersExtensionEditForm getProjectMembersExtensionEditForm() {
initializeExtensions();
return projectMembersExtensionEditForm;
}
public InfoExtensionEditForm getInfoExtensionEditForm() {
initializeExtensions();
return infoExtensionEditForm;
}
public AdditionalLinksExtensionEditForm getAdditionalLinksExtensionEditForm() {
initializeExtensions();
return additionalLinksExtensionEditForm;
}
public RatingsAndReviewExtensionEditForm getRatingsAndReviewExtensionEditForm() {
initializeExtensions();
return ratingsAndReviewExtensionEditForm;
}
public RelatedProjectsExtensionEditForm getRelatedProjectsExtensionEditForm() {
initializeExtensions();
return relatedProjectsExtensionEditForm;
}
public DevelopmentInfrastructureExtensionEditForm getDevelopmentInfrastructureExtensionEditForm() {
initializeExtensions();
return developmentInfrastructureExtensionEditForm;
}
public MavenExtensionEditForm getMavenExtensionEditForm() {
initializeExtensions();
return mavenExtensionEditForm;
}
public ScrumExtensionEditForm getScrumExtensionEditForm() {
initializeExtensions();
return scrumExtensionEditForm;
}
protected WebElement getUpperOkButton() {
return upperOkButton;
}
protected WebElement getUpperCancelButton() {
return upperCancelButton;
}
protected WebElement getUpperValidateButton() {
return upperValidateButton;
}
protected WebElement getUpperExpandAllButton() {
return upperExpandAllButton;
}
protected WebElement getUpperCollapseAllButton() {
return upperCollapseAllButton;
}
protected WebElement getLowerOkButton() {
return lowerOkButton;
}
protected WebElement getLowerCancelButton() {
return lowerCancelButton;
}
protected WebElement getLowerValidateButton() {
return lowerValidateButton;
}
protected WebElement getLowerExpandAllButton() {
return lowerExpandAllButton;
}
protected WebElement getLowerCollapseAllButton() {
return lowerCollapseAllButton;
}
}