/******************************************************************************* * 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.RelatedProjectsExtensionEditFormRelatedProjectEntry; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.PageFactory; /** * This is the extension edit form for the related projects extension */ public class RelatedProjectsExtensionEditForm extends AbstractExtensionEditForm { public RelatedProjectsExtensionEditForm(WebDriver driver) { super(driver, PositionProvider.getPositionNumberOfExtensionsEditForm(driver, PositionProvider.getRelatedProjectsExtensionEditFormName())); } @Override protected boolean isExtensionContentDisplayed() { return getCalculateRelatedProjectsCheckBox().isDisplayed() && getRelatedProjectsSection().isDisplayed() && getAddRelatedProjectLink().isDisplayed() && areRelatedProjectsDisplayed(); } private boolean areRelatedProjectsDisplayed() { List<RelatedProjectsExtensionEditFormRelatedProjectEntry> relatedProjectEntries = getRelatedProjectEntries(); for (Iterator<RelatedProjectsExtensionEditFormRelatedProjectEntry> iterator = relatedProjectEntries.iterator(); iterator .hasNext();) { RelatedProjectsExtensionEditFormRelatedProjectEntry relatedProjectEntry = (RelatedProjectsExtensionEditFormRelatedProjectEntry) iterator .next(); if (!relatedProjectEntry.isDisplayed()) { return false; } } return true; } //driver must be located on the edit form public int getNumberOfRelatedProjects() { WebElement root = driver.findElement(By.xpath(getXPathToRelatedProjectsSection())); List<WebElement> relatedProjectsRoot = root.findElements(By.xpath("./div")); // subtract one because there is one hidden div with no functionality return relatedProjectsRoot.size() - 1; } //driver must be located on the edit form public List<RelatedProjectsExtensionEditFormRelatedProjectEntry> getRelatedProjectEntries() { List<RelatedProjectsExtensionEditFormRelatedProjectEntry> users = new ArrayList<RelatedProjectsExtensionEditFormRelatedProjectEntry>(); for (int i = 1; i <= getNumberOfRelatedProjects(); i++) { users.add(PageFactory.initElements(driver, RelatedProjectsExtensionEditFormRelatedProjectEntry.class) .setBaseXPath(getXPathToRelatedProjectsSection() + "/div[" + i + "]/div/div/div")); } return users; } //numberOfRelatedProjectLink starting from 0 (first index) public void clickRemoveRelatedProjectLink(int numberOfRelatedProjectLink) { List<RelatedProjectsExtensionEditFormRelatedProjectEntry> relatedProjectEntries = getRelatedProjectEntries(); RelatedProjectsExtensionEditFormRelatedProjectEntry relatedProject = relatedProjectEntries .get(numberOfRelatedProjectLink); relatedProject.clickRemoveRelatedProjectsLink(); } //numberOfRelatedProjectLink starting from 0 (first index) public void clickRelatedProjectsSelectionButton(int numberOfRelatedProjectLink) { List<RelatedProjectsExtensionEditFormRelatedProjectEntry> relatedProjectEntries = getRelatedProjectEntries(); RelatedProjectsExtensionEditFormRelatedProjectEntry relatedProject = relatedProjectEntries .get(numberOfRelatedProjectLink); relatedProject.clickRelatedProjectsSelectionButton(); } //numberOfRelatedProjectLink starting from 0 (first index) public void sendKeysToRelatedProjectField(String text, boolean click, int numberOfRelatedProjectLink) { List<RelatedProjectsExtensionEditFormRelatedProjectEntry> relatedProjectEntries = getRelatedProjectEntries(); RelatedProjectsExtensionEditFormRelatedProjectEntry relatedProject = relatedProjectEntries .get(numberOfRelatedProjectLink); relatedProject.sendKeysToRelatedProjectField(text, click); } //numberOfRelatedProjectLink starting from 0 (first index) public String getRelatedProject(int numberOfRelatedProjectLink) { List<RelatedProjectsExtensionEditFormRelatedProjectEntry> relatedProjectEntries = getRelatedProjectEntries(); RelatedProjectsExtensionEditFormRelatedProjectEntry relatedProject = relatedProjectEntries .get(numberOfRelatedProjectLink); return relatedProject.getRelatedProject(); } public void checkCalculateRelatedProjectCheckBox(boolean checked) { WebElement calculateRelatedProjectCheckBox = getCalculateRelatedProjectsCheckBox(); if (checked && !calculateRelatedProjectCheckBox.isSelected()) { calculateRelatedProjectCheckBox.click(); } if (!checked && calculateRelatedProjectCheckBox.isSelected()) { calculateRelatedProjectCheckBox.click(); } } public boolean isCalculateRelatedProjectCheckBoxChecked() { WebElement calculateRelatedProjectCheckBox = getCalculateRelatedProjectsCheckBox(); return calculateRelatedProjectCheckBox.isSelected(); } public void clickAddRelatedProjectLink() { getAddRelatedProjectLink().click(); } protected WebElement getCalculateRelatedProjectsCheckBox() { return driver.findElement(By.xpath(getXPathToCalculateRelatedProjectsCheckBox())); } protected WebElement getRelatedProjectsSection() { return driver.findElement(By.xpath(getXPathToRelatedProjectsSection())); } protected WebElement getAddRelatedProjectLink() { return driver.findElement(By.xpath(getXPathToAddRelatedProjectLink())); } private String getXPathToCalculateRelatedProjectsCheckBox() { return getXPathToExtensionContainer() + "/div/div/div/div/div/div[3]/fieldset/div[2]/div/table/tbody/tr[1]/td[3]/span/input"; } private String getXPathToRelatedProjectsSection() { return getXPathToExtensionContainer() + "/div/div/div/div/div/div[3]/fieldset/div[2]/div/table/tbody/tr[2]/td[3]/div/div/div"; } private String getXPathToAddRelatedProjectLink() { return getXPathToRelatedProjectsSection() + "/div[" + getNumberOfRelatedProjects() + "]/div/div/div" + "/div[" // 1 if number is 1 because there is no remove link displayed // 2 if number is greater than 1 because the remove link is displayed + (getNumberOfRelatedProjects() == 1 ? 2 : 3) + "]/div/div/span/span"; } }