From 8a84c2d6e3cb46217a8bb5121a1c80a55895889e Mon Sep 17 00:00:00 2001 From: Madawa Soysa Date: Sun, 4 Mar 2018 13:02:04 +0530 Subject: [PATCH] Add UI testcase to test policy view This commit adds testcases to test UI functionalities of adding a simple android policy and viewing it from the user interface. --- .../ui/pages/home/IOTAdminDashboard.java | 13 +++ .../ui/pages/policy/PolicyAddPage.java | 85 +++++++++++++++++++ .../ui/pages/policy/PolicyPage.java | 68 +++++++++++++++ .../ui/pages/policy/PolicyViewPage.java | 55 ++++++++++++ .../src/main/resources/mapper.properties | 17 ++++ .../web/ui/test/policy/PolicyTest.java | 63 ++++++++++++++ .../src/test/resources/testng.xml | 1 + 7 files changed, 302 insertions(+) create mode 100644 modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/policy/PolicyAddPage.java create mode 100644 modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/policy/PolicyPage.java create mode 100644 modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/policy/PolicyViewPage.java create mode 100644 modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/policy/PolicyTest.java diff --git a/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/home/IOTAdminDashboard.java b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/home/IOTAdminDashboard.java index f0ed3a50..bb986338 100644 --- a/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/home/IOTAdminDashboard.java +++ b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/home/IOTAdminDashboard.java @@ -31,6 +31,8 @@ import org.wso2.iot.integration.ui.pages.devices.EnrollDevicePage; import org.wso2.iot.integration.ui.pages.groups.DeviceAddGroupPage; import org.wso2.iot.integration.ui.pages.groups.DeviceGroupsPage; import org.wso2.iot.integration.ui.pages.login.LoginPage; +import org.wso2.iot.integration.ui.pages.policy.PolicyAddPage; +import org.wso2.iot.integration.ui.pages.policy.PolicyPage; import org.wso2.iot.integration.ui.pages.uesr.AddUserPage; import org.wso2.iot.integration.ui.pages.uesr.UserListingPage; @@ -97,6 +99,17 @@ public class IOTAdminDashboard { return new DeviceGroupsPage(driver); } + /** + * Performs the navigation to policy management page. + * + * @return {@link PolicyPage} which includes functionality which can be done in policy management page + * @throws IOException If error occurs when getting the {@link PolicyPage} + */ + public PolicyPage getPolicyManagementPage() throws IOException { + driver.findElement(By.xpath(uiElementMapper.getElement("iot.policy.viewButton.xpath"))).click(); + return new PolicyPage(driver); + } + /** * Navigates to the Add User page. * @return : Add user page. diff --git a/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/policy/PolicyAddPage.java b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/policy/PolicyAddPage.java new file mode 100644 index 00000000..eb991fb1 --- /dev/null +++ b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/policy/PolicyAddPage.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2018, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you 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 org.wso2.iot.integration.ui.pages.policy; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; +import org.wso2.iot.integration.ui.pages.UIElementMapper; +import org.wso2.iot.integration.ui.pages.UIUtils; + +import java.io.IOException; + +public class PolicyAddPage { + + private WebDriver driver; + private UIElementMapper uiElementMapper; + + public PolicyAddPage(WebDriver driver) throws IOException { + this.driver = driver; + this.uiElementMapper = UIElementMapper.getInstance(); + WebDriverWait webDriverWait = new WebDriverWait(driver, UIUtils.webDriverTimeOut); + + if (!webDriverWait + .until(ExpectedConditions.titleContains(uiElementMapper.getElement("cdmf.policy.add.page")))) { + throw new IllegalStateException("This is not the Add Group page"); + } + } + + /** + * Adds an android policy. + * + * @param name name of the policy + * @param description description of the policy + * @return {@link PolicyPage} + * @throws IOException If error occurred when adding a policy + */ + public PolicyPage addAndroidSamplePolicy(String name, String description) throws IOException { + WebElement androidPolicyCreateButton = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.policy.add.android.policy.xpath"))); + androidPolicyCreateButton.click(); + WebElement androidPasscodePolicy = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.policy.android.passcode.policy.button"))); + androidPasscodePolicy.click(); + WebElement androidPasscodePolicyEnableButton = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.policy.android.passcode.policy.enable.button"))); + androidPasscodePolicyEnableButton.click(); + WebElement androidPolicyConfigContinueButton = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.policy.android.policy.configuration.continue.button"))); + androidPolicyConfigContinueButton.click(); + WebElement androidPolicyAssignGroupsContinueButton = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.policy.android.assignGroups.continue.button"))); + androidPolicyAssignGroupsContinueButton.click(); + WebElement androidPolicyNameInput = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.policy.android.name.input"))); + WebElement androidPolicyDescriptionInput = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.policy.android.description.input"))); + WebElement androidPolicyPublishButton = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.policy.android.publish.button"))); + + androidPolicyNameInput.sendKeys(name); + androidPolicyDescriptionInput.sendKeys(description); + androidPolicyPublishButton.click(); + + return new PolicyPage(driver); + } +} diff --git a/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/policy/PolicyPage.java b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/policy/PolicyPage.java new file mode 100644 index 00000000..3feb75ef --- /dev/null +++ b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/policy/PolicyPage.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2018, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you 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 org.wso2.iot.integration.ui.pages.policy; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; +import org.wso2.iot.integration.ui.pages.UIElementMapper; +import org.wso2.iot.integration.ui.pages.UIUtils; + +import java.io.IOException; + +public class PolicyPage { + + private WebDriver driver; + private UIElementMapper uiElementMapper; + + public PolicyPage(WebDriver driver) throws IOException { + this.driver = driver; + this.uiElementMapper = UIElementMapper.getInstance(); + WebDriverWait webDriverWait = new WebDriverWait(driver, UIUtils.webDriverTimeOut); + + if (!webDriverWait.until(ExpectedConditions.titleContains(uiElementMapper.getElement("cdmf.policy.page")))) { + throw new IllegalStateException("This is not the Policy page"); + } + } + + /** + * Method to go to the add policy page, by clicking the Add policy button. + * @return {@link PolicyAddPage} add policy page + */ + public PolicyAddPage addNewPolicy() throws IOException { + WebElement addPolicyButton = driver.findElement(By.xpath( + uiElementMapper.getElement("iot.policy.add.button.xpath"))); + addPolicyButton.click(); + return new PolicyAddPage(driver); + } + + /** + * Method to go to the view policy page, by clicking a policy + * @return {@link PolicyViewPage} view policy page + * @throws IOException If unable to navigate to view policy page + */ + public PolicyViewPage viewPolicy() throws IOException { + WebElement policyViewIcon = driver.findElement(By.xpath(uiElementMapper.getElement("iot.policy.view.icon"))); + policyViewIcon.click(); + return new PolicyViewPage(driver); + } +} diff --git a/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/policy/PolicyViewPage.java b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/policy/PolicyViewPage.java new file mode 100644 index 00000000..09e72845 --- /dev/null +++ b/modules/integration/tests-common/web-ui-pages/src/main/java/org/wso2/iot/integration/ui/pages/policy/PolicyViewPage.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2018, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you 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 org.wso2.iot.integration.ui.pages.policy; + +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; +import org.wso2.iot.integration.ui.pages.UIElementMapper; +import org.wso2.iot.integration.ui.pages.UIUtils; + +import java.io.IOException; + +public class PolicyViewPage { + + private WebDriver driver; + private UIElementMapper uiElementMapper; + + public PolicyViewPage(WebDriver driver) throws IOException { + this.driver = driver; + this.uiElementMapper = UIElementMapper.getInstance(); + WebDriverWait webDriverWait = new WebDriverWait(driver, UIUtils.webDriverTimeOut); + + if (!webDriverWait + .until(ExpectedConditions.titleContains(uiElementMapper.getElement("cdmf.policy.view.page")))) { + throw new IllegalStateException("This is not the Add Group page"); + } + } + + /** + * Tests if the policy is viewable + * @return {@code true} if policy is viewable + */ + public boolean isPolicyViewable() { + return driver.findElements(By.xpath(uiElementMapper.getElement("iot.policy.view.passcode.element"))).size() + != 0; + } +} diff --git a/modules/integration/tests-common/web-ui-pages/src/main/resources/mapper.properties b/modules/integration/tests-common/web-ui-pages/src/main/resources/mapper.properties index edba2fed..30752722 100644 --- a/modules/integration/tests-common/web-ui-pages/src/main/resources/mapper.properties +++ b/modules/integration/tests-common/web-ui-pages/src/main/resources/mapper.properties @@ -24,6 +24,9 @@ cdmf.error.page=Error | CDMF cdmf.user.home.page=Device Management | CDMF cdmf.groups.page=Group Management | CDMF cdmf.user.add.page=User Management | Add User | CDMF +cdmf.policy.page=Policy Management | WSO2 IoT Server +cdmf.policy.add.page=Policy Management | Add Policy | WSO2 IoT Server +cdmf.policy.view.page=Policy Management | View Policy | WSO2 IoT Server # User registration and login details----------------------------------------------------------------------------------- @@ -103,6 +106,20 @@ iot.device.group.addGroupForm.addButton.id=add-group-btn iot.device.groups.view.header.xpath=/html/body/div[3]/div[2]/div/h1[1] +#Policy Page Elements +iot.policy.viewButton.xpath=/html/body/div[3]/div[2]/div/div[3]/div[4]/div/div[2]/div[2]/span[2]/a[1] +iot.policy.add.button.xpath=//*[@id="ast-container"]/div/h3[3]/a +iot.policy.add.android.policy.xpath=/html/body/div[3]/div[2]/div/div[3]/div/div[6]/div/div[2]/div/div[2]/div/ul/li[1]/a +iot.policy.android.passcode.policy.button=//*[@id="device-type-policy-operations"]/div/div[1]/a[1] +iot.policy.android.passcode.policy.enable.button=//*[@id="passcode-policy-lbl"]/input +iot.policy.android.policy.configuration.continue.button=/html/body/div[3]/div[2]/div/div[3]/div/div[5]/div/div[2]/div/div[3]/a[2] +iot.policy.android.assignGroups.continue.button=/html/body/div[3]/div[2]/div/div[3]/div/div[4]/div/div[2]/div/div[3]/a[2] +iot.policy.android.name.input=//*[@id="policy-name-input"] +iot.policy.android.description.input=//*[@id="policy-description-input"] +iot.policy.android.publish.button=/html/body/div[3]/div[2]/div/div[3]/div/div[3]/div/div[2]/div/div[3]/a[2] +iot.policy.view.icon=//*[@id="policy-grid"]/tbody/tr/td[1] +iot.policy.view.passcode.element=//*[@id="device-type-policy-operations"]/div/div[1]/a[1] + #/html/body/div[3]/div[2]/div/div[3]/div/div/div[1]/label iot.device.groups.add.emptyfrom.error=/html/body/div[3]/div[2]/div/div[3]/div/div/div[1]/label diff --git a/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/policy/PolicyTest.java b/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/policy/PolicyTest.java new file mode 100644 index 00000000..f5859656 --- /dev/null +++ b/modules/integration/tests-iot-web-ui/src/test/java/org/wso2/carbon/iot/integration/web/ui/test/policy/PolicyTest.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2018, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. licenses this file to you 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 org.wso2.carbon.iot.integration.web.ui.test.policy; + +import org.openqa.selenium.WebDriver; +import org.testng.Assert; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; +import org.wso2.carbon.automation.extensions.selenium.BrowserManager; +import org.wso2.carbon.iot.integration.web.ui.test.common.IOTIntegrationUIBaseTestCase; +import org.wso2.carbon.iot.integration.web.ui.test.common.LoginUtils; +import org.wso2.iot.integration.ui.pages.home.IOTAdminDashboard; +import org.wso2.iot.integration.ui.pages.policy.PolicyAddPage; +import org.wso2.iot.integration.ui.pages.policy.PolicyPage; +import org.wso2.iot.integration.ui.pages.policy.PolicyViewPage; + +import java.io.IOException; + +public class PolicyTest extends IOTIntegrationUIBaseTestCase { + + private WebDriver driver; + private IOTAdminDashboard adminDashboard; + + @BeforeClass(alwaysRun = true) + public void setup() throws Exception { + super.init(); + driver = BrowserManager.getWebDriver(); + LoginUtils.login(driver, automationContext, getWebAppURL()); + adminDashboard = new IOTAdminDashboard(driver); + } + + @Test(description = "Test for adding a new policy.") + public void addNewPolicyTest() throws IOException { + PolicyPage policyPage = adminDashboard.getPolicyManagementPage(); + PolicyAddPage policyAddPage = policyPage.addNewPolicy(); + policyAddPage.addAndroidSamplePolicy("TestPolicy", "This is a sample policy"); + } + + @Test(description = "Test for adding a new policy.", dependsOnMethods = "addNewPolicyTest") + public void policyViewTest() throws IOException { + PolicyPage policyPage = adminDashboard.getPolicyManagementPage(); + PolicyViewPage policyViewPage = policyPage.viewPolicy(); + Assert.assertTrue(policyViewPage.isPolicyViewable()); + } + +} diff --git a/modules/integration/tests-iot-web-ui/src/test/resources/testng.xml b/modules/integration/tests-iot-web-ui/src/test/resources/testng.xml index 73139933..fd2532f2 100644 --- a/modules/integration/tests-iot-web-ui/src/test/resources/testng.xml +++ b/modules/integration/tests-iot-web-ui/src/test/resources/testng.xml @@ -35,6 +35,7 @@ +