diff options
Diffstat (limited to 'integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/pages/HomePage.java')
-rw-r--r-- | integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/pages/HomePage.java | 231 |
1 files changed, 231 insertions, 0 deletions
diff --git a/integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/pages/HomePage.java b/integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/pages/HomePage.java new file mode 100644 index 0000000000..4f270cf751 --- /dev/null +++ b/integration-tests/src/test/java/org/onap/sdc/frontend/ci/tests/pages/HomePage.java @@ -0,0 +1,231 @@ +/*- + * ============LICENSE_START======================================================= + * SDC + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ + +package org.onap.sdc.frontend.ci.tests.pages; + +import com.aventstack.extentreports.Status; +import org.onap.sdc.frontend.ci.tests.datatypes.DataTestIdEnum; +import org.onap.sdc.frontend.ci.tests.exception.HomePageRuntimeException; +import org.onap.sdc.frontend.ci.tests.execute.setup.ExtentTestActions; +import org.onap.sdc.frontend.ci.tests.utilities.DownloadManager; +import org.onap.sdc.frontend.ci.tests.utilities.FileHandling; +import org.onap.sdc.frontend.ci.tests.utilities.GeneralUIUtils; +import org.openqa.selenium.By; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.List; +import java.util.UUID; + +import static org.onap.sdc.frontend.ci.tests.execute.setup.SetupCDTest.getExtendTest; +import static org.onap.sdc.frontend.ci.tests.pages.HomePage.PageElement.REPOSITORY_ICON; + +public class HomePage { + + private static final Logger LOGGER = LoggerFactory.getLogger(HomePage.class); + + private static final int WAIT_FOR_ELEMENT_TIME_OUT = 30; + private static final int WAIT_FOR_LOADER_TIME_OUT = 600; + + private HomePage() { + + } + + public static void showVspRepository() { + GeneralUIUtils.waitForElementInVisibilityBy(By.className("ui-notification"), WAIT_FOR_ELEMENT_TIME_OUT); + GeneralUIUtils.clickOnElementByTestId(DataTestIdEnum.MainMenuButtons.REPOSITORY_ICON.getValue()); + } + + public static boolean searchForVSP(String vspName) { + GeneralUIUtils.getWebElementByTestID(DataTestIdEnum.ImportVfRepository.SEARCH.getValue()).clear(); + GeneralUIUtils.getWebElementByTestID(DataTestIdEnum.ImportVfRepository.SEARCH.getValue()).sendKeys(vspName); + GeneralUIUtils.ultimateWait(); + return true; + } + + public static void importVSP(String vspName) { + HomePage.showVspRepository(); + boolean vspFound = HomePage.searchForVSP(vspName); + if (vspFound) { + List<WebElement> elementsFromTable = GeneralPageElements.getElementsFromTable(); + WebDriverWait wait = new WebDriverWait(GeneralUIUtils.getDriver(), WAIT_FOR_ELEMENT_TIME_OUT); + WebElement findElement = wait.until(ExpectedConditions.visibilityOf(elementsFromTable.get(1))); + findElement.click(); + GeneralUIUtils.waitForLoader(); + GeneralUIUtils.clickOnElementByTestId(DataTestIdEnum.ImportVfRepository.IMPORT_VSP.getValue()); + GeneralUIUtils.clickOnElementByTestId(DataTestIdEnum.GeneralElementsEnum.CREATE_BUTTON.getValue()); + GeneralUIUtils.waitForLoader(WAIT_FOR_LOADER_TIME_OUT); + GeneralUIUtils.getWebElementByTestID(DataTestIdEnum.GeneralElementsEnum.CHECKIN_BUTTON.getValue()); + } + } + + public static boolean navigateToHomePage() { + try { + LOGGER.debug("Searching for repository icon"); + final WebElement repositoryIcon = GeneralUIUtils.getInputElement(REPOSITORY_ICON.getTestId()); + if (repositoryIcon != null) { + return true; + } + GeneralUIUtils.ultimateWait(); + final List<WebElement> homeButtons = GeneralUIUtils + .getElementsByLocator(By.xpath("//a[contains(.,'HOME')]")); + if (!homeButtons.isEmpty()) { + homeButtons.stream().filter(WebElement::isDisplayed).findFirst().ifPresent(webElement -> { + webElement.click(); + LOGGER.debug("Clicked on home button"); + }); + } + + GeneralUIUtils.closeErrorMessage(); + WebElement homeButton = GeneralUIUtils + .getInputElement(DataTestIdEnum.MainMenuButtons.HOME_BUTTON.getValue()); + return homeButton != null && homeButton.isDisplayed(); + + } catch (final Exception e) { + final String msg = "Could not click on home button"; + getExtendTest() + .log(Status.WARNING, msg); + LOGGER.warn(msg, e); + return false; + } + } + + public static File downloadVspCsarToDefaultDirectory(String vspName) throws Exception { + GeneralUIUtils.getWebElementByTestID(DataTestIdEnum.MainMenuButtonsFromInsideFrame.HOME_BUTTON.getValue()).click(); + DownloadManager.downloadCsarByNameFromVSPRepository(vspName, ""); + return FileHandling.getLastModifiedFileNameFromDir(); + } + + public static void findComponentAndClick(final String resourceName) { + findComponent(resourceName); + clickComponent(resourceName); + } + + public static void findComponent(final String resourceName) { + LOGGER.debug("Searching for component '{}'", resourceName); + getExtendTest().log(Status.INFO, "Searching for " + resourceName + " in home tab"); + clearSearchResults(getSearchInput()); + searchForComponent(resourceName); + } + + private static WebElement getSearchInput() { + WebElement searchTextbox; + try { + searchTextbox = TopSearchComponent.getComponentInput(); + LOGGER.debug("Search textbox '{}' selected", TopSearchComponent.SEARCH_INPUT_TEST_ID); + } catch (final Exception e) { + final String errorMsg = "Top Search bar was not visible"; + getExtendTest().log(Status.ERROR, errorMsg); + throw new HomePageRuntimeException(errorMsg, e); + } + return searchTextbox; + } + + private static void clearSearchResults(final WebElement searchTextbox) { + try { + LOGGER.debug("Clearing search results before searching"); + TopSearchComponent.replaceSearchValue(searchTextbox, UUID.randomUUID().toString()); + MainRightContainer.isEmptyResult(); + } catch (final Exception e) { + final String errorMsg = "Could not clean up the search result"; + getExtendTest().log(Status.ERROR, errorMsg); + throw new HomePageRuntimeException(errorMsg, e); + } + } + + private static void searchForComponent(final String resourceName) { + try { + LOGGER.debug("Searching for '{}'", resourceName); + TopSearchComponent.replaceSearchValue(resourceName); + MainRightContainer.isResultVisible(resourceName); + } catch (final Exception e) { + final String errorMsg = String.format("Could not find the component '%s' after search", resourceName); + getExtendTest().log(Status.ERROR, errorMsg); + throw new HomePageRuntimeException(errorMsg, e); + } + } + + public static void clickComponent(final String resourceName) { + LOGGER.debug("Clicking on the component " + resourceName); + try { + getExtendTest() + .log(Status.INFO, String.format("Clicking on the '%s' component from home tab", resourceName)); + GeneralUIUtils.clickOnElementByTestId(resourceName); + } catch (final Exception e) { + final String errorMsg = String.format("Could not click on home tab component '%s' ", resourceName); + getExtendTest().log(Status.ERROR, e.getMessage()); + throw new HomePageRuntimeException(errorMsg, e); + } + final String datetimeString = + new SimpleDateFormat("yyyy.MM.dd.HH.mm.ss.SSS").format(Calendar.getInstance().getTime()); + try { + ExtentTestActions + .addScreenshot(Status.INFO, + String.format("after-click-resource-%s-%s", resourceName, datetimeString), + String.format("Clicked on resource '%s'", resourceName) + ); + } catch (final IOException e) { + LOGGER.warn("Could take screenshot after resource {} click", resourceName, e); + } + try { + GeneralUIUtils.getWebElementByTestID(DataTestIdEnum.GeneralElementsEnum.LIFECYCLE_STATE.getValue()); + } catch (final Exception e) { + final String errorMsg = String.format("Expecting to be inside component '%s' screen", resourceName); + getExtendTest().log(Status.ERROR, e.getMessage()); + throw new HomePageRuntimeException(errorMsg, e); + } + } + + public static void waitForElement(PageElement homePageElement) { + final String cssClass = homePageElement.getCssClass(); + LOGGER.debug("Waiting for{} visibility", cssClass); + GeneralUIUtils.getWebElementByClassName(cssClass); + LOGGER.debug("{} is visible", cssClass); + } + + public enum PageElement { + COMPONENT_PANEL("w-sdc-main-right-container", null), + REPOSITORY_ICON(null, "repository-icon"); + + private final String cssClass; + private final String testId; + + PageElement(String cssClass, String testId) { + this.cssClass = cssClass; + this.testId = testId; + } + + public String getCssClass() { + return cssClass; + } + + public String getTestId() { + return testId; + } + } + +} |