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.
merge-requests/1/head
Madawa Soysa 7 years ago
parent 7f2f03608a
commit 8a84c2d6e3

@ -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.DeviceAddGroupPage;
import org.wso2.iot.integration.ui.pages.groups.DeviceGroupsPage; 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.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.AddUserPage;
import org.wso2.iot.integration.ui.pages.uesr.UserListingPage; import org.wso2.iot.integration.ui.pages.uesr.UserListingPage;
@ -97,6 +99,17 @@ public class IOTAdminDashboard {
return new DeviceGroupsPage(driver); 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. * Navigates to the Add User page.
* @return : Add user page. * @return : Add user page.

@ -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);
}
}

@ -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);
}
}

@ -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;
}
}

@ -24,6 +24,9 @@ cdmf.error.page=Error | CDMF
cdmf.user.home.page=Device Management | CDMF cdmf.user.home.page=Device Management | CDMF
cdmf.groups.page=Group Management | CDMF cdmf.groups.page=Group Management | CDMF
cdmf.user.add.page=User Management | Add User | 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----------------------------------------------------------------------------------- # 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] 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 #/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 iot.device.groups.add.emptyfrom.error=/html/body/div[3]/div[2]/div/div[3]/div/div/div[1]/label

@ -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());
}
}

@ -35,6 +35,7 @@
<class name="org.wso2.carbon.iot.integration.web.ui.test.group.DeviceGroupFailTest"/> <class name="org.wso2.carbon.iot.integration.web.ui.test.group.DeviceGroupFailTest"/>
<class name="org.wso2.carbon.iot.integration.web.ui.test.user.AddUserFormValidationTest"/> <class name="org.wso2.carbon.iot.integration.web.ui.test.user.AddUserFormValidationTest"/>
<class name="org.wso2.carbon.iot.integration.web.ui.test.user.AdminFunctionsTest"/> <class name="org.wso2.carbon.iot.integration.web.ui.test.user.AdminFunctionsTest"/>
<class name="org.wso2.carbon.iot.integration.web.ui.test.policy.PolicyTest"/>
<!-- <!--
<class name="org.wso2.carbon.iot.integration.web.ui.test.samples.SampleInstallationTest"/> <class name="org.wso2.carbon.iot.integration.web.ui.test.samples.SampleInstallationTest"/>
<class name="org.wso2.carbon.iot.integration.web.ui.test.samples.SampleInstallationVerification"/> <class name="org.wso2.carbon.iot.integration.web.ui.test.samples.SampleInstallationVerification"/>

Loading…
Cancel
Save