diff options
author | Ofir Sonsino <os0695@intl.att.com> | 2018-08-12 12:20:55 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@onap.org> | 2018-08-12 12:20:55 +0000 |
commit | 91b057331b92ecf7f3c2d495681b05295dc8346c (patch) | |
tree | 0ce3f821ada8ad518784f7f9869db4b537ba3237 /vid-automation/src/main/java/vid/automation/test/sections/DrawingBoardPage.java | |
parent | 9152b2ae03c4751b492a219993d85d522c58b383 (diff) | |
parent | 4a4dcc5185f8ba5a28c7f9fef509f32c0c2389e6 (diff) |
Merge "vid-automation selenium tests"
Diffstat (limited to 'vid-automation/src/main/java/vid/automation/test/sections/DrawingBoardPage.java')
-rw-r--r-- | vid-automation/src/main/java/vid/automation/test/sections/DrawingBoardPage.java | 257 |
1 files changed, 257 insertions, 0 deletions
diff --git a/vid-automation/src/main/java/vid/automation/test/sections/DrawingBoardPage.java b/vid-automation/src/main/java/vid/automation/test/sections/DrawingBoardPage.java new file mode 100644 index 00000000..7cffd37b --- /dev/null +++ b/vid-automation/src/main/java/vid/automation/test/sections/DrawingBoardPage.java @@ -0,0 +1,257 @@ +package vid.automation.test.sections; + +import com.google.common.collect.ImmutableList; +import org.openecomp.sdc.ci.tests.utilities.GeneralUIUtils; +import org.openqa.selenium.By; +import org.openqa.selenium.JavascriptExecutor; +import org.openqa.selenium.NoSuchElementException; +import org.openqa.selenium.WebElement; +import org.testng.Assert; +import vid.automation.test.Constants; +import vid.automation.test.infra.Click; +import vid.automation.test.infra.Get; +import vid.automation.test.infra.Wait; + +import java.util.Collection; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.collection.IsEmptyCollection.empty; +import static vid.automation.test.Constants.DrawingBoard.*; + +public class DrawingBoardPage extends VidBasePage { + + public DrawingBoardPage(){ + super(); + } + + public void expandTreeByClickingNode(String nodeName, String... children) { + checkNodesVisible(children, false); + clickNode(nodeName); + checkNodesVisible(children, true); + } + + public void clickNode(String nodeName) { + Click.byTestId(Constants.DrawingBoard.NODE_PREFIX + nodeName); + } + + public void expandFirstItemInTreeByExpanderIcon(String treeDataTestId, String... children) { + checkNodesVisible(children, false); + Click.byXpath("//tree-root[@data-tests-id='" + treeDataTestId + "']//span[@class='" + Constants.DrawingBoard.TOGGLE_CHILDREN + "']"); + checkNodesVisible(children, true); + } + + public void checkLeafNodeHasNoExpander(String nodeName){ + WebElement webElement = Get.byXpath("//div[contains(@class, '" + Constants.DrawingBoard.TREE_NODE_LEAF + "') and .//div[@data-tests-id='" + Constants.DrawingBoard.NODE_PREFIX + nodeName + "']]"); + Assert.assertNotNull(webElement, "There is an expander to node " + nodeName + " without children"); + } + + public void verifyNonCollapsableTreeByClickingNode(String nodeName, String... children) { + checkNodesVisible(children, true); + clickNode(nodeName); + checkNodesVisible(children, true); + } + + public void collapseFirstItemInTreeByCollapseIcon(String treeDataTestId, String... children) { + checkNodesVisible(children, true); + Click.byXpath("//tree-root[@data-tests-id='" + treeDataTestId + "']//span[@class='" + Constants.DrawingBoard.TOGGLE_CHILDREN + "']"); + checkNodesVisible(children, false); + } + + public void RefreshPage(){ + GeneralUIUtils.getDriver().navigate().refresh(); + } + + public void assertInitalTextOfTree(String treeDataTestId, String[] initialElements) { + WebElement webElement = Get.byTestId(treeDataTestId); + String expected = String.join("\n", initialElements); + Wait.byText(expected); + Assert.assertEquals(webElement.getText(), expected); + } + + public void checkAddButton(String[] rootElements){ + String previousAddButton = null; + for (String root : rootElements) { + String currentButton = Constants.DrawingBoard.NODE_PREFIX + root + Constants.DrawingBoard.ADD_BUTTON; + checkThatButtonNotExist(currentButton); + GeneralUIUtils.hoverOnAreaByTestId(Constants.DrawingBoard.NODE_PREFIX + root); + checkThatButtonExist(currentButton); + if (previousAddButton != null) { + checkThatButtonNotExist(previousAddButton); + } + Click.byTestId(currentButton); + previousAddButton = currentButton; + } + } + + public void clickAddButtonByNodeName(String treeNodeId) { + String nodeElement = "node-"+ treeNodeId; + String addButtonTestId = Constants.DrawingBoard.NODE_PREFIX + treeNodeId + Constants.DrawingBoard.ADD_BUTTON; + GeneralUIUtils.hoverOnAreaByTestId(nodeElement); + GeneralUIUtils.hoverOnAreaByTestId(addButtonTestId); + Click.byTestId(addButtonTestId); + } + + private void checkThatButtonNotExist(String dataTestId){ +// Assert.assertFalse(GeneralUIUtils.isElementVisibleByTestId(dataTestId),"button " + dataTestId + " should not exist"); + } + + private void checkThatButtonExist(String dataTestId){ +// Assert.assertTrue(GeneralUIUtils.isElementVisibleByTestId(dataTestId), "button " + dataTestId + " should exist"); + } + + private void checkThatPseudoElementNotExist(String dataTestId) { + assertPseudoElementDisplayProp(dataTestId, "none"); + } + + private void assertPseudoElementDisplayProp(String dataTestId, String expectedCssDisplayProp){ + final JavascriptExecutor javascriptExecutor = (JavascriptExecutor) GeneralUIUtils.getDriver(); + final Object cssDisplayProp = javascriptExecutor.executeScript("" + + "return window.getComputedStyle(" + + " document.querySelector('[data-tests-id=\""+dataTestId+"\"]'),':before'" + + ").getPropertyValue('display')" + ); + assertThat("button " + dataTestId + " should exist", cssDisplayProp, is(expectedCssDisplayProp)); + } + + private void checkThatPseudoElementExist(String dataTestId) { + assertPseudoElementDisplayProp(dataTestId, "inline-block"); + } + + public void checkThatContextMenuExist(String contextMenu){ + Assert.assertTrue(GeneralUIUtils.isWebElementExistByTestId(contextMenu), "context menu should appear"); + } + + public void checkThatContextMenuNotExist(String contextMenu){ + Assert.assertFalse(GeneralUIUtils.isWebElementExistByTestId(contextMenu), "context menu should not appear"); + } + + public void checkNodesVisible(String[] children, boolean shouldExist) { + checkElements(ImmutableList.copyOf(children), + childName -> GeneralUIUtils.isWebElementExistByTestId(Constants.DrawingBoard.NODE_PREFIX + childName) ? "exists" : "absent", + shouldExist ? "exists" : "absent", "visibility"); + } + + public void checkNodesHighlighted(String[] children) { + checkElements(ImmutableList.copyOf(children), + childName -> { + final WebElement webElement = Get.byTestId(Constants.DrawingBoard.NODE_PREFIX + childName); + final String color = webElement.getCssValue("color"); + return color; + }, + HIGHLIGHTED_COLOR, "highlightning"); + } + + public void checkNodesVisibleAndMatchIsHighlighted(String searchString, String... children) { + checkElements(ImmutableList.copyOf(children), + childName -> { + final WebElement webElement = Get.byTestId(Constants.DrawingBoard.NODE_PREFIX + childName); + String visible = webElement.isDisplayed() ? "visible" : "hidden"; + String highlightedText; + String bgColor; + try { + final WebElement highlighted = webElement.findElement(By.cssSelector(".highlight")); + highlightedText = highlighted.getText(); + bgColor = highlighted.getCssValue("background-color"); + } catch (NoSuchElementException e) { + highlightedText = ""; + bgColor = "none"; + } + return String.join("", visible, " and '", highlightedText, "' in ", bgColor); + }, + "visible and '" + searchString + "' in rgb(157, 217, 239)", "match highlightning"); + } + + private void checkElements(Collection<String> elements, Function<String, String> predicate, String expected, final String description) { + final Map<String, String> expectedMap = elements.stream().collect(Collectors.toMap( + childName -> childName, + child -> expected + )); + final Map<String, String> actual = elements.stream().collect(Collectors.toMap( + childName -> childName, + predicate + )); + + assertThat("There was an error in " + description + " of elements", actual, equalTo(expectedMap)); + } + + public void navigateToServicePlanningPage() { + navigateTo("/vid/app/ui/#/servicePlanning"); + } + + public void navigateToEmptyServicePlanningPage() { + navigateTo("/vid/app/ui/#/servicePlanningEmpty"); + } + + public void checkContextMenu(String node){ + String contextMenuButton = Constants.DrawingBoard.NODE_PREFIX + node + Constants.DrawingBoard.CONTEXT_MENU_BUTTON; + final String contextMenu = Constants.DrawingBoard.CONTEXT_MENU_ITEM; + + checkThatPseudoElementNotExist(contextMenuButton); + checkThatContextMenuNotExist(contextMenu); + + GeneralUIUtils.hoverOnAreaByTestId(Constants.DrawingBoard.NODE_PREFIX + node); + checkThatPseudoElementExist(contextMenuButton); + Click.byTestId(contextMenuButton); + + checkThatContextMenuExist(contextMenu); + } + + public void checkSearch(){ + String searchElement = Constants.DrawingBoard.SEARCH_LEFT_TREE;// TODO - should add that it is on the left tree and should create the id of the search element??? + Assert.assertTrue(GeneralUIUtils.isWebElementExistByTestId(searchElement), "search " + searchElement + " should exist"); + } + + public void showTooltipByHoverAboveAlertIcon(String element){ + assertThat("tooltip should not appear before click", + GeneralUIUtils.getDriver().findElements(By.xpath("//*[contains(@class, '" + "tooltip-inner" + "')]")), + is(empty()) + ); + + GeneralUIUtils.hoverOnAreaByTestId(Constants.DrawingBoard.NODE_PREFIX + element + Constants.DrawingBoard.ALERT_ICON); + + final WebElement webElement = GeneralUIUtils.getWebElementByContainsClassName("tooltip-inner"); + assertThat(webElement.getText(), is("Missing required information. Please open and fill in the details.")); + } + + public void clickDeployButton(){ + GeneralUIUtils.ultimateWait(); + + try { + GeneralUIUtils.clickOnElementByTestId(DEPLOY_BUTTON); + } catch (org.openqa.selenium.WebDriverException e) { + // "deploy" replaces the iframe, so "TypeError: can't access dead object" exception is eventually thrown + if (!e.getMessage().startsWith("TypeError: can't access dead object")) { + throw e; + } + } + + } + + public void checkDeployButtonDisabled(){ + Assert.assertFalse(Get.byTestId(DEPLOY_BUTTON).isEnabled(),"Deploy button is enabled and should be disabled"); + } + + public void checkExistsAndEnabled(String dataTestId){ + Assert.assertFalse(GeneralUIUtils.isElementDisabled(dataTestId),"Element " + dataTestId + " should exist and be enabled"); + } + + public void checkServiceInstanceName(String expectedServiceName){ + Assert.assertEquals(SERVICE_INSTANCE_VALUE, Get.byTestId(SERVICE_INSTANCE_TEST_ID).getText()); + Assert.assertEquals(Get.byTestId(SERVICE_NAME).getText(),expectedServiceName); + } + + public void checkServiceStatus() { + Assert.assertEquals(Get.byTestId(SERVICE_STATUS).getText(),STATUS_TEXT); + } + + public void checkQuantityNumberIsCorrect(int expectedQuantity) { + Assert.assertEquals(Get.byTestId(QUANTITY_LABEL_TEST_ID).getText(), (String.valueOf(QUANTITY_LABEL_VALUE))); + Assert.assertEquals(Get.byTestId(SERVICE_QUANTITY).getText(), (String.valueOf(expectedQuantity))); + } + +} |