////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2009-2013 Denim Group, Ltd.
//
// The contents of this file are subject to the Mozilla Public License
// Version 2.0 (the "License"); you may not use this file except in
// compliance with the License. You may obtain a copy of the License at
// http://www.mozilla.org/MPL/
//
// Software distributed under the License is distributed on an "AS IS"
// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
// License for the specific language governing rights and limitations
// under the License.
//
// The Original Code is ThreadFix.
//
// The Initial Developer of the Original Code is Denim Group, Ltd.
// Portions created by Denim Group, Ltd. are Copyright (C)
// Denim Group, Ltd. All Rights Reserved.
//
// Contributor(s): Denim Group, Ltd.
//
////////////////////////////////////////////////////////////////////////
package com.denimgroup.threadfix.selenium.pages;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.StaleElementReferenceException;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.UnhandledAlertException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.Select;
public class TeamIndexPage extends BasePage {
// private List<WebElement> names = new ArrayList<WebElement>();
private List<WebElement> apps = new ArrayList<WebElement>();
public int modalNum;
public String appModalId;
public TeamIndexPage(WebDriver webdriver) {
super(webdriver);
modalNum = 0;
appModalId = "";
// for (int i = 1; i <= getNumTeamRows(); i++) {
// names.add(driver.findElementById("teamName" + i));
// }
}
public int getNumTeamRows() {
if (!(driver.findElementById("teamTable").getText().equals("Add Team"))) {
return driver.findElementsByClassName("pointer").size();
}
return 0;
}
public int getNumAppRows(String teamName) {
if (!(driver.findElementById("teamAppTableDiv" + (getIndex(teamName) + 1))
.getText().contains("No applications found."))) {
return driver.findElementById("teamAppTable" + (getIndex(teamName) + 1)).findElements(By.className("app-row")).size();
}
return 0;
}
public int getIndex(String teamName) {
int i = -1;
List<WebElement> names = new ArrayList<WebElement>();
for (int j = 1; j <= getNumTeamRows(); j++) {
names.add(driver.findElementById("teamName" + j));
}
for (WebElement name : names) {
i++;
String text = name.getText().trim();
if (text.equals(teamName.trim())) {
return i;
}
}
names = new ArrayList<WebElement>();
for (int j = 1; j <= getNumTeamRows(); j++) {
names.add(driver.findElementById("teamName" + j));
}
for (WebElement name : names) {
i++;
String text = name.getText().trim();
if (text.equals(teamName.trim())) {
return i;
}
}
return -1;
}
public int getAppIndex(String appName){
int i = -1;
for(WebElement app : apps){
i++;
String text = app.getText().trim();
if(text.equals(appName.trim())){
return i;
}
}
return -1;
}
public TeamIndexPage clickAddTeamButton() {
driver.findElementById("addTeamModalButton").click();
waitForElement(driver.findElementById("myTeamModal"));
return setPage();
}
public TeamIndexPage setTeamName(String name) {
driver.findElementById("teamNameInput").clear();
driver.findElementById("teamNameInput").sendKeys(name);
return setPage();
}
public TeamIndexPage addNewTeam() {
int cnt = getNumTeamRows() + 1;
driver.findElementById("submitTeamModal").click();
waitForElement(driver.findElementById("teamName"+cnt));
waitForElement(driver.findElementByClassName("alert-success"));
sleep(1000);
return setPage();
}
public TeamIndexPage addNewTeamInvalid() {
driver.findElementById("submitTeamModal").click();
sleep(1000);
return setPage();
}
public TeamIndexPage expandTeamRowByName(String name) {
driver.findElementById("teamName" + (getIndex(name) + 1)).click();
try{
populateAppList(name);
}catch(NoSuchElementException e){
}
return setPage();
}
public void populateAppList(String teamName){
apps = new ArrayList<WebElement>();
if (!driver.findElementById("teamAppTable" + (getIndex(teamName) + 1))
.getText().contains("No applications found.")) {
for (int j = 0; j < getNumAppRows(teamName); j++) {
apps.add(
driver.findElementById(("applicationLink" + (getIndex(teamName) + 1))
+ "-" + (j + 1)));
}
}
}
public boolean teamAddedToTable(String name) {
return getIndex(name) != -1;
}
public ApplicationDetailPage clickViewAppLink(String appName, String teamName) {
populateAppList(teamName);
apps.get(getAppIndex(appName)).click();
return new ApplicationDetailPage(driver);
}
public TeamIndexPage clickAddNewApplication(String teamName) {
appModalId = getAppModalId(teamName);
driver.findElementsByLinkText("Add Application").get(getIndex(teamName)).click();
waitForElement(driver.findElementById(appModalId));
return setPage();
}
public String getAppModalId(String teamName){
String s = driver.findElementsByLinkText("Add Application").get(getIndex(teamName)).getAttribute("href");
Pattern pattern = Pattern.compile("#(myAppModal[0-9]+)$");
Matcher matcher = pattern.matcher(s);
if(matcher.find()){
return matcher.group(1);
}
return "";
}
public TeamIndexPage setApplicationName(String appName, String teamName) {
driver.findElementsById("nameInput").get(getIndex(teamName)).clear();
driver.findElementsById("nameInput").get(getIndex(teamName)).sendKeys(appName);
return setPage();
}
public TeamIndexPage setApplicationUrl(String url, String teamName) {
driver.findElementsById("urlInput").get(getIndex(teamName)).clear();
driver.findElementsById("urlInput").get(getIndex(teamName))
.sendKeys(url);
return setPage();
}
public TeamIndexPage setApplicationCritic(String critic, String teamName) {
new Select(driver.findElementsById("criticalityId").get(
getIndex(teamName))).selectByVisibleText(critic);
return setPage();
}
public TeamIndexPage saveApplication(String teamName) {
driver.findElementsByClassName("modalSubmit").get(getIndex(teamName)).click();
sleep(1000);
// waitForInvisibleElement(driver.findElementById(appModalId));
appModalId = "";
return setPage();
}
public TeamIndexPage saveApplicationInvalid(String teamName) {
driver.findElementsByClassName("modalSubmit").get(getIndex(teamName)).click();
return setPage();
}
public TeamIndexPage addNewApplication(String teamName, String appName,
String url, String critic) {
clickAddNewApplication(teamName);
setApplicationName(appName, teamName);
setApplicationUrl(url, teamName);
setApplicationCritic(critic, teamName);
return setPage();
}
public String getNameErrorMessage() {
return driver.findElementById("name.errors").getText();
}
public String getUrlErrorMessage() {
return driver.findElementById("url.errors").getText();
}
public boolean isAppPresent(String appName) {
return driver.findElementByLinkText(appName).isDisplayed();
}
public TeamIndexPage clickUploadScan(String appName,String teamName) {
modalNum = modalNumber(teamName,appName);
driver.findElementById("uploadScanModalLink"+(getIndex(teamName)+1)+"-"+(getAppIndex(appName)+1)).click();
waitForElement(driver.findElementById("uploadScan"+modalNum));
return setPage();
}
public TeamIndexPage setPage(){
TeamIndexPage page = new TeamIndexPage(driver);
page.modalNum = modalNum;
page.appModalId = appModalId;
return page;
}
public TeamIndexPage setFileInput(String file, String teamName, String appName) {
//driver.findElementById("fileInput"+modalNumber()).click();
driver.findElementById("fileInput"+modalNum).sendKeys(file);
/*for (int i = 1; i <= driver.findElementsByClassName("right-align")
.size(); i++)
if (driver.findElementById("applicationLink" + i).getText()
.equals(appName)) {
driver.findElementById("fileInput" + i).clear();
driver.findElementById("fileInput" + i).sendKeys(file);
break;
}*/
return setPage();
}
public ApplicationDetailPage clickUploadScanButton(String teamName, String appName) {
driver.findElementById("submitScanModal"+modalNum).click();
try{
waitForInvisibleElement(driver.findElementById("uploadScan"+modalNum));
}catch(StaleElementReferenceException e){
}
waitForElement(driver.findElementById("nameText"));
waitForInvisibleElement(driver.findElementByClassName("alert-success"));
//waitForElement(driver.findElementById("anyid"));
return new ApplicationDetailPage(driver);
}
public ApplicationDetailPage clickUploadScanButton(String teamName, String appName,int cnt) {
driver.findElementById("submitScanModal"+modalNum).click();
int i = 0;
try{
waitForInvisibleElement(driver.findElementById("uploadScan"+modalNum));
}catch(StaleElementReferenceException e){
}
waitForElement(driver.findElementById("nameText"));
// waitForInvisibleElement(driver.findElementByClassName("alert-success"));
try{
while(!driver.findElementById("scanTabLink").getText().contains(Integer.toString(cnt))){
if(i==10){
break;
}
i++;
sleep(500);
}
}catch(StaleElementReferenceException e){
}catch(UnhandledAlertException e){
}
//waitForElement(driver.findElementById("anyid"));
return new ApplicationDetailPage(driver);
}
public TeamIndexPage clickUploadScanButtonInvalid(String teamName, String appName) {
driver.findElementById("submitScanModal"+modalNum).click();
/*for (int i = 1; i <= driver.findElementsByClassName("right-align")
.size(); i++)
if (driver.findElementById("applicationLink" + i).getText()
.equals(appName)) {
driver.findElementById("submitScanModal" + i).click();
break;
}*/
return setPage();
}
public boolean isTeamPresent(String teamName) {
return getIndex(teamName) != -1;
}
public boolean isCreateValidtionPresent(String teamName) {
return driver
.findElementByClassName("alert-success")
.getText()
.contains(
"Team " + teamName + " has been created successfully.");
}
public BasePage closeModal() {
driver.findElementByClassName("modal-footer").findElement(By.className("btn")).click();
return setPage();
}
public TeamDetailPage clickViewTeamLink(String teamName) {
driver.findElementsByLinkText("View Team").get(getIndex(teamName)).click();
return new TeamDetailPage(driver);
}
public int modalNumber(String teamName, String appName){
String s = driver.findElementById("uploadScanModalLink"+(getIndex(teamName)+1)+"-"+(getAppIndex(appName)+1)).getAttribute("href");
Pattern pattern = Pattern.compile("#uploadScan([0-9]+)$");
Matcher matcher = pattern.matcher(s);
if(matcher.find()){
return Integer.parseInt(matcher.group(1));
}
return -1;
}
}