/**
* Copyright (C) 2015 Orange
* Licensed under the Apache 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.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.francetelecom.clara.cloud.webapp.acceptancetest.pages;
import com.francetelecom.clara.cloud.webapp.acceptancetest.utils.SeleniumUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.ui.Select;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
public class EnvironmentCreationPage extends BasePage {
@FindBy(name = "release")
// this is a combo box
private WebElement applicationReleaseInput;
@FindBy(name = "label")
private WebElement labelInput;
@FindBy(name = "type")
// this is a combo box
private WebElement typeInput;
@FindBy(name = "addEnvButton")
private WebElement submitButton;
Logger logger = LoggerFactory.getLogger(EnvironmentCreationPage.class);
public EnvironmentCreationPage(WebDriver wd) throws InterruptedException {
super(wd);
logger.debug("current url is : " + wd.getCurrentUrl());
logger.debug("page title : " + wd.getTitle());
// assert that we are on the right page create environment
SeleniumUtils.waitForElement(wd, "addEnvButton", DEFAULT_AJAX_TIMEOUT);
if (!wd.findElement(By.tagName("html")).getText().contains("create environment")) {
logger.error("This should contains 'create environment'" + wd.findElement(By.tagName("html")).getText());
throw new IllegalStateException("this is not the new environment page");
}
logger.debug("you are in create environment page");
}
public EnvironmentDetailsPage createEnvironment(String releaseName, String environmentLabel, String environmentType) {
// select release name
selectReleaseName(releaseName);
// enter environment label
labelInput.sendKeys(environmentLabel);
// select environment type
selectEnvironmentType(environmentType);
// submit environment creation
submitButton.click();
logger.debug("create environment button has been clicked");
return PageFactory.initElements(getWd(), EnvironmentDetailsPageSeleniumImpl.class);
}
private void selectReleaseName(String releaseName) {
Select releaseNames = new Select(applicationReleaseInput);
try {
releaseNames.selectByVisibleText(releaseName);
} catch (org.openqa.selenium.NoSuchElementException e) {
throw new NoSuchElementException("Cannot select application release name " + releaseName
+ ". application release names available for selection are : " + getOptions(releaseNames));
}
}
private void selectEnvironmentType(String environmentType) {
Select typeInputs = new Select(typeInput);
try {
typeInputs.selectByVisibleText(environmentType);
} catch (org.openqa.selenium.NoSuchElementException e) {
throw new NoSuchElementException("Cannot select environment type " + environmentType + ". environment types available for selection are : "
+ getOptions(typeInputs));
}
}
private List<String> getOptions(Select select) {
List<String> options = new ArrayList<String>();
for (WebElement element : select.getOptions()) {
options.add(element.getText());
}
return options;
}
}