////////////////////////////////////////////////////////////////////////
//
// 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.util.ArrayList;
import java.util.List;
import org.openqa.selenium.StaleElementReferenceException;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.Select;
public class WafIndexPage extends BasePage {
private WebElement addWafLink;
private List<WebElement> names = new ArrayList<WebElement>();
public WafIndexPage(WebDriver webdriver) {
super(webdriver);
addWafLink = driver.findElementById("addWafModalButton");
//for (int i = 1; i <= getNumRows(); i++) {
// names.add(driver.findElementById("wafName" + i));
//}
}
public int getNumRows() {
List<WebElement> bodyRows = driver.findElementsByClassName("bodyRow");
if (bodyRows != null && bodyRows.size() == 1 && bodyRows.get(0).getText().trim().contains("No WAFs found.")) {
return 0;
}
return driver.findElementsByClassName("bodyRow").size();
}
public int getIndex(String roleName) {
int i = -1;
for (int j = 1; j <= getNumRows(); j++) {
names.add(driver.findElementById("wafName" + j));
}
for (WebElement name : names) {
i++;
String text = name.getText().trim();
if (text.equals(roleName.trim())) {
return i;
}
}
return -1;
}
public WafRulesPage clickRules(String wafName){
driver.findElementsByLinkText("Rules").get(getIndex(wafName)).click();
return new WafRulesPage(driver);
}
/*
public WafIndexPage clickDeleteWaf(int i){
driver.findElementById("deleteWaf"+i).click();
handleAlert();
return new WafIndexPage(driver);
}
*/
public WafIndexPage clickDeleteWaf(String wafName){
//System.out.println("Wafname = " + wafName);
//System.out.println("Index is " + getIndex(wafName));
clickEditWaf(wafName);
driver.findElementById("deleteWaf"+ (getIndex(wafName) + 1)).click();
handleAlert();
sleep(1000);
return new WafIndexPage(driver);
}
public WafIndexPage clickAddWafLink() {
addWafLink.click();
waitForElement(driver.findElementById("createWaf"));
return new WafIndexPage(driver);
}
public WafIndexPage createNewWaf(String name,String Type){
setNewNameInput(name);
setType(null,Type);
return this;
}
public WafIndexPage clickCreateWaf(){
driver.findElementById("submitWafModal").click();
try{
waitForInvisibleElement(driver.findElementById("createWaf"));
}catch(TimeoutException e){
driver.findElementById("submitWafModal").click();
waitForInvisibleElement(driver.findElementById("createWaf"));
}catch(StaleElementReferenceException e){
}
return new WafIndexPage(driver);
}
public WafIndexPage clickCreateWafInvalid(){
driver.findElementById("submitWafModal").click();
return new WafIndexPage(driver);
}
public boolean isTextPresentInWafTableBody(String text) {
return driver.findElementById("wafTableBody").getText().contains(text);
}
public boolean isNamePresent(String wafName){
for (int j = 1; j <= getNumRows(); j++) {
if(driver.findElementById("wafName" + j).getText().trim().equals(wafName.trim())){
return true;
}
}
return false;
}
public boolean isSuccessPresent(String wafName){
return driver.findElementByClassName("alert-success").getText().contains(wafName);
}
/* public WafIndexPage clickEditWaf(int i){
driver.findElementById("editWafModalButton"+i).click();
waitForElement(driver.findElementByClassName("modal"));
return new WafIndexPage(driver);
}*/
public WafIndexPage clickEditWaf(String wafName){
driver.findElementById("editWafModalButton"+(getIndex(wafName)+1)).click();
waitForElement(driver.findElementById("deleteWaf"+ (getIndex(wafName) + 1)));
return new WafIndexPage(driver);
}
public WafIndexPage editWaf(String wafName, String newName, String type){
driver.findElementsById("nameInput").get(getIndex(wafName)).clear();
driver.findElementsById("nameInput").get(getIndex(wafName)).sendKeys(newName);
new Select(driver.findElementsById("typeSelect").get(getIndex(wafName))).selectByVisibleText(type);
return new WafIndexPage(driver);
}
public WafIndexPage clickUpdateWaf(String oldWafName){
driver.findElementByLinkText("Update WAF").click();
try{
waitForInvisibleElement(driver.findElementById("deleteWaf"+(getIndex(oldWafName)+1)));
}catch(StaleElementReferenceException e){
}
return new WafIndexPage(driver);
}
public WafIndexPage clickUpdateWafInvalid(){
driver.findElementByLinkText("Update WAF").click();
return new WafIndexPage(driver);
}
public String getWafName(int row){
return driver.findElementById("wafName" + row).getText();
}
public WafIndexPage setNewNameInput(String name){
driver.findElementById("wafCreateNameInput").clear();
driver.findElementById("wafCreateNameInput").sendKeys(name);
return new WafIndexPage(driver);
}
public WafIndexPage setNameInput(String oldName,String newName){
driver.findElementsById("nameInput").get(getIndex(oldName)).clear();
driver.findElementsById("nameInput").get(getIndex(oldName)).sendKeys(newName);
return new WafIndexPage(driver);
}
public WafIndexPage setType(String oldName,String type){
if(oldName==null){
new Select(driver.findElementsById("typeSelect").get(getNumRows())).selectByVisibleText(type);
}else{
new Select(driver.findElementsById("typeSelect").get(getIndex(oldName))).selectByVisibleText(type);
}
return new WafIndexPage(driver);
}
public String getNameErrorsText(){
return driver.findElementById("name.errors").getText();
}
public String getNameText(int row){
return driver.findElementById("wafName" + row).getText();
}
}