forked from community/product-iots
commit
07ebc9f783
@ -0,0 +1,116 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
~ Copyright (c) 2015, 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.
|
||||
-->
|
||||
|
||||
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
|
||||
<parent>
|
||||
<groupId>org.wso2.iot</groupId>
|
||||
<artifactId>tests-common</artifactId>
|
||||
<version>1.0.0-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>org.wso2.carbon.iot.integration.ui.pages</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<name>WSO2 IoT Server - Integration Test Common Web UI Pages</name>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.automationutils</groupId>
|
||||
<artifactId>org.wso2.carbon.integration.common.admin.client</artifactId>
|
||||
<scope>compile</scope>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>org.wso2.carbon</groupId>
|
||||
<artifactId>org.wso2.carbon.user.mgt.stub</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.wso2.carbon</groupId>
|
||||
<artifactId>org.wso2.carbon.logging.view.stub</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.wso2.carbon</groupId>
|
||||
<artifactId>org.wso2.carbon.ndatasource.stub</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.wso2.carbon</groupId>
|
||||
<artifactId>org.wso2.carbon.server.admin.stub</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.wso2.carbon</groupId>
|
||||
<artifactId>org.wso2.carbon.throttle.stub</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.wso2.carbon</groupId>
|
||||
<artifactId>org.wso2.carbon.tenant.mgt.stub</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.wso2.carbon</groupId>
|
||||
<artifactId>org.wso2.carbon.application.mgt.stub</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.wso2.carbon</groupId>
|
||||
<artifactId>org.wso2.carbon.security.mgt.stub</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.wso2.carbon</groupId>
|
||||
<artifactId>org.wso2.carbon.identity.user.profile.stub</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.wso2.carbon</groupId>
|
||||
<artifactId>org.wso2.carbon.identity.user.profile.stub</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.automation</groupId>
|
||||
<artifactId>org.wso2.carbon.automation.extensions</artifactId>
|
||||
<scope>compile</scope>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>org.slf4j</groupId>
|
||||
<artifactId>slf4j-api</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.testng</groupId>
|
||||
<artifactId>testng</artifactId>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.automation</groupId>
|
||||
<artifactId>org.wso2.carbon.automation.test.utils</artifactId>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.automation</groupId>
|
||||
<artifactId>org.wso2.carbon.automation.engine</artifactId>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
@ -0,0 +1,61 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.Properties;
|
||||
|
||||
/**
|
||||
* Read the mapper file and load the UI elements into Properties object.
|
||||
*/
|
||||
public class UIElementMapper {
|
||||
|
||||
public static final Properties uiProperties = new Properties();
|
||||
private static UIElementMapper instance;
|
||||
|
||||
private UIElementMapper(){
|
||||
}
|
||||
|
||||
public static synchronized UIElementMapper getInstance() throws IOException {
|
||||
if (instance == null) {
|
||||
setStream();
|
||||
instance = new UIElementMapper();
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
public static Properties setStream() throws IOException {
|
||||
|
||||
InputStream inputStream = UIElementMapper.class.getResourceAsStream("/mapper.properties");
|
||||
|
||||
if (inputStream.available() > 0) {
|
||||
uiProperties.load(inputStream);
|
||||
inputStream.close();
|
||||
return uiProperties;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public String getElement (String key) {
|
||||
if (!uiProperties.isEmpty()) {
|
||||
return uiProperties.getProperty(key);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.NoSuchElementException;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
/**
|
||||
* This class contains the constants and common methods used in pages.
|
||||
*/
|
||||
public class UIUtils {
|
||||
|
||||
public static long webDriverTimeOut = 10;
|
||||
public static long webDriverTime = 60;
|
||||
public static int threadTimeout = 1000;
|
||||
|
||||
public static boolean isElementPresent(Log log, WebDriver driver, By by) {
|
||||
try {
|
||||
WebDriverWait wait = new WebDriverWait(driver, webDriverTime);
|
||||
wait.until(ExpectedConditions.presenceOfElementLocated(by));
|
||||
driver.findElement(by);
|
||||
return true;
|
||||
} catch (NoSuchElementException e) {
|
||||
log.error(by.toString() + " is not present");
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,111 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.devices;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
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.UIUtils;
|
||||
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||
import org.wso2.iot.integration.ui.pages.samples.ConnectedCupDeviceViewPage;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Class to represent the IOT devices page. In this page, all the enrolled devices are listed.
|
||||
* User can perform following functions on the enrolled devices.
|
||||
* 1. View the device.
|
||||
* 2. View device analytics.
|
||||
* 3. Edit the device.
|
||||
* 4. Delete the device.
|
||||
*/
|
||||
public class DevicesPage {
|
||||
|
||||
Log log = LogFactory.getLog(DevicesPage.class);
|
||||
private WebDriver driver;
|
||||
private UIElementMapper uiElementMapper;
|
||||
|
||||
public DevicesPage(WebDriver driver) throws IOException {
|
||||
|
||||
this.driver = driver;
|
||||
this.uiElementMapper = UIElementMapper.getInstance();
|
||||
WebDriverWait webDriverWait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
|
||||
if (!webDriverWait.until(ExpectedConditions.titleContains("Device Management | IoT Server"))) {
|
||||
throw new IllegalStateException("This is not the Device Management page");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method checks whether the given device is enrolled and visible in the UI of the IOT server.
|
||||
* @param name : The name of the device to be checked.
|
||||
* @return : True if the device is enrolled and visible. False otherwise.
|
||||
*/
|
||||
public boolean isDeviceEnrolled(String name) {
|
||||
List<WebElement> deviceNames = driver.findElements(By.tagName("h4"));
|
||||
if (!deviceNames.isEmpty()) {
|
||||
for (WebElement deviceName : deviceNames) {
|
||||
if (deviceName.getText().contains(name)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method performs the navigation to the Device view of the given device.
|
||||
* Here the navigation happens to the Connected cup device.
|
||||
* @param deviceName : Name of the device.
|
||||
* @return : The corresponding device view page. Null if not visible.
|
||||
*/
|
||||
public ConnectedCupDeviceViewPage viewDevice(String deviceName) throws IOException {
|
||||
WebElement deviceTable = driver.findElement(By.xpath(uiElementMapper.getElement("iot.devices.table.xpath")));
|
||||
List<WebElement> data = deviceTable.findElements(By.cssSelector("a"));
|
||||
for (WebElement e : data) {
|
||||
String s = getLink(e, "/device/connectedcup?id=");
|
||||
if (s != null) {
|
||||
driver.get(s);
|
||||
return new ConnectedCupDeviceViewPage(driver, deviceName);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to extract the URL, which matches with the given parameters from an HTML element.
|
||||
* @param element : WebElement, from which the URL should be extracted.
|
||||
* @param lookupText : The parameters to be contained in the URL.
|
||||
* @return : The URL String found. NULL if the URL is not found.
|
||||
*/
|
||||
private String getLink(WebElement element, String... lookupText) {
|
||||
String link = element.getAttribute("href");
|
||||
boolean check = true;
|
||||
for (String s : lookupText) {
|
||||
if (!link.contains(s)) {
|
||||
check = false;
|
||||
}
|
||||
}
|
||||
return check ? link : null;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,89 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.devices;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
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.UIUtils;
|
||||
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||
import org.wso2.iot.integration.ui.pages.samples.ConnectedCupDeviceTypeViewPage;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Device Enrollment page.
|
||||
* This page lists the all device types which are currently installed in the IOT server.
|
||||
*/
|
||||
public class EnrollDevicePage {
|
||||
|
||||
private WebDriver driver;
|
||||
private UIElementMapper uiElementMapper;
|
||||
private Log log = LogFactory.getLog(EnrollDevicePage.class);
|
||||
|
||||
public EnrollDevicePage(WebDriver driver) throws IOException {
|
||||
this.driver = driver;
|
||||
this.uiElementMapper = UIElementMapper.getInstance();
|
||||
|
||||
WebDriverWait webDriverWait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
|
||||
if (!webDriverWait.until(ExpectedConditions.titleContains("Device Types | IoT Server"))) {
|
||||
throw new IllegalStateException("This is not the Device Enrollment page");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method checks whether the Connected cup device is installed. If the device is installed correctly, it is
|
||||
* displayed in this page.
|
||||
* @return : True if the device is visible in the page. False otherwise.
|
||||
*/
|
||||
public boolean isInstalled() {
|
||||
boolean check = UIUtils.isElementPresent(log, driver, By.xpath(
|
||||
uiElementMapper.getElement("iot.sample.connectedcup.xpath")));
|
||||
if (check) {
|
||||
WebElement deviceDiv = driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.sample.connectedcup.xpath")));
|
||||
WebElement tryBtn = deviceDiv.findElement(By.tagName("button"));
|
||||
return tryBtn.isDisplayed();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to perform the navigation to Device type view page of the Connected cup.
|
||||
* @return : The corresponding Device type view page. Null, if the element is not visible.
|
||||
*/
|
||||
public ConnectedCupDeviceTypeViewPage gotoConnectedCupDeviceTypeViewPage() throws IOException {
|
||||
boolean check = UIUtils.isElementPresent(log, driver, By.xpath(
|
||||
uiElementMapper.getElement("iot.sample.connectedcup.xpath")));
|
||||
if (check){
|
||||
WebElement deviceDiv = driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.sample.connectedcup.xpath")));
|
||||
WebElement tryBtn = deviceDiv.findElement(By.tagName("button"));
|
||||
tryBtn.click();
|
||||
return new ConnectedCupDeviceTypeViewPage(driver);
|
||||
} else {
|
||||
log.error("Element not found...........................");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,64 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.graphs;
|
||||
|
||||
/**
|
||||
* Class to store graph data
|
||||
*/
|
||||
public class Graph {
|
||||
|
||||
private String graphId;
|
||||
private String yAxis;
|
||||
private String xAxis;
|
||||
private String legend;
|
||||
|
||||
public void setGraphId(String graphId) {
|
||||
this.graphId = graphId;
|
||||
}
|
||||
|
||||
public String getyAxis() {
|
||||
return yAxis;
|
||||
}
|
||||
|
||||
public void setyAxis(String yAxis) {
|
||||
this.yAxis = yAxis;
|
||||
}
|
||||
|
||||
public String getxAxis() {
|
||||
return xAxis;
|
||||
}
|
||||
|
||||
public void setxAxis(String xAxis) {
|
||||
this.xAxis = xAxis;
|
||||
}
|
||||
|
||||
public String getLegend() {
|
||||
return legend;
|
||||
}
|
||||
|
||||
public void setLegend(String legend) {
|
||||
this.legend = legend;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString(){
|
||||
return String.format("The graph for graph id : %s, X - axis : %s, Y - axis : %s, legend : %s ", graphId,
|
||||
xAxis, yAxis, legend);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,170 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.graphs;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
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.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;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* Graphs should also be tested in UI tests. So, this class contains methods to extract various properties of graphs..
|
||||
* Such as,
|
||||
* - Legend
|
||||
* - Tool Tips
|
||||
* - X, Y axis properties
|
||||
* - get the graph path values etc.
|
||||
* Works with IOT server device view graphs and analytics graphs.
|
||||
*/
|
||||
public class GraphHandler {
|
||||
private UIElementMapper uiElementMapper;
|
||||
private Log log = LogFactory.getLog(GraphHandler.class);
|
||||
private WebElement graphDiv;
|
||||
private WebDriver driver;
|
||||
private List<WebElement> graphs;
|
||||
|
||||
public GraphHandler(WebDriver driver) throws IOException {
|
||||
this.driver = driver;
|
||||
uiElementMapper = UIElementMapper.getInstance();
|
||||
graphDiv = driver.findElement(By.xpath(uiElementMapper.getElement("iot.stats.graph.container.xpath")));
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is to get all the elements of graphs and store in a Hash map.
|
||||
* This simplifies iterating through the DOM every time finding for an element when having multiple graphs.
|
||||
*/
|
||||
public Map<String, Graph> getGraphMap() {
|
||||
HashMap<String, Graph> graphMap = new HashMap<>();
|
||||
WebDriverWait wait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
|
||||
wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.stat.graph.wrapper.xpath")))));
|
||||
List<WebElement> graphs = driver.findElements(By.xpath(
|
||||
uiElementMapper.getElement("iot.stat.graph.wrapper.xpath")));
|
||||
for (WebElement e : graphs) {
|
||||
Graph g = new Graph();
|
||||
String key = e.getAttribute("id").split("-")[1];
|
||||
g.setGraphId(key.toLowerCase().replace(" ", ""));
|
||||
String xAxis = e.findElement(By.xpath(uiElementMapper.getElement("iot.stat.graph.xAxis.xpath"))).getText();
|
||||
g.setxAxis(xAxis);
|
||||
String yAxis = e.findElement(By.xpath("//*[contains(@id, \"y_axis-" + key + "\")]")).getText();
|
||||
g.setyAxis(yAxis);
|
||||
String legend = e.findElement(By.xpath("//*[contains(@id, \"legend-" + key + "\")]")).findElement(
|
||||
By.tagName("span")).getText();
|
||||
g.setLegend(legend);
|
||||
graphMap.put(key, g);
|
||||
}
|
||||
return graphMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the number of graphs in the UI
|
||||
*/
|
||||
public int getGraphCount() {
|
||||
try {
|
||||
graphs = this.graphDiv.findElements(By.xpath("//*[contains(@class, \"chartWrapper\")]"));
|
||||
} catch (NoSuchElementException e) {
|
||||
log.error(String.format("Graph element is not found. \n %s", e.getMessage()));
|
||||
}
|
||||
return graphs.size();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Web Element corresponds to the given graph id
|
||||
*
|
||||
* @param graphId : the id of the graph.
|
||||
* @return Web Element of the graph
|
||||
*/
|
||||
public WebElement getGraphById(String graphId) {
|
||||
graphs = this.graphDiv.findElements(By.xpath(uiElementMapper.getElement("iot.stat.graph.wrapper.xpath")));
|
||||
for (int i = 0; i < graphs.size() && graphs.size() > 0; i++) {
|
||||
WebElement element = graphs.get(i);
|
||||
if (element.getAttribute("id").toLowerCase().replace(" ", "").contains(graphId.toLowerCase())) {
|
||||
return element;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check the graph path is visible or not.
|
||||
*
|
||||
* @param graph : web element of the graph
|
||||
* @return : True if the path is visible. False otherwise
|
||||
*/
|
||||
public boolean isPathAvailable(WebElement graph) {
|
||||
try {
|
||||
WebElement graphContainer = getGraph(graph, uiElementMapper.getElement("iot.stat.graph.class.name"));
|
||||
return graphContainer != null && graphContainer.findElement(By.tagName("path")).isDisplayed();
|
||||
} catch (NoSuchElementException e) {
|
||||
log.error(String.format("No element found. \n %s", e.getMessage()));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check the path of the graph draws the values pushed by the device. As it takes some time, explicit wait of 10
|
||||
* seconds is added.
|
||||
*
|
||||
* @param graph : Web element of the graph
|
||||
* @param val : Value which pushed by the device
|
||||
* @return : True if the path is drawn to the values. False otherwise.
|
||||
*/
|
||||
public boolean isPathGetValues(WebElement graph, String val) {
|
||||
WebElement graphContainer = getGraph(graph, uiElementMapper.getElement("iot.stat.graph.class.name"));
|
||||
driver.manage().timeouts().implicitlyWait(UIUtils.webDriverTimeOut, TimeUnit.SECONDS);
|
||||
String[] values;
|
||||
if (graphContainer != null) {
|
||||
values = graphContainer.findElement(By.tagName("path")).getAttribute("d").split(",");
|
||||
for (String value : values) {
|
||||
if (value.contains(val)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method returns the WebElement for graph with the given class name.
|
||||
*
|
||||
* @param graph : Outer container of the graphs
|
||||
* @param className : Class name of the graph needed.
|
||||
* @return the WebElement which defined by the given class name. Null if no element is found.
|
||||
*/
|
||||
private WebElement getGraph(WebElement graph, String className) {
|
||||
List<WebElement> elements = graph.findElements(By.tagName("div"));
|
||||
for (WebElement e : elements) {
|
||||
if (e.getAttribute("class").contains(className)) {
|
||||
return e;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
@ -0,0 +1,92 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.groups;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Add group page of iot server. This class contains methods to,
|
||||
* 1. Create a new group
|
||||
* 2. Submit an empty form
|
||||
*/
|
||||
public class DeviceAddGroupPage {
|
||||
|
||||
private WebDriver driver;
|
||||
private UIElementMapper uiElementMapper;
|
||||
|
||||
public DeviceAddGroupPage(WebDriver driver) throws IOException {
|
||||
this.driver = driver;
|
||||
this.uiElementMapper = UIElementMapper.getInstance();
|
||||
|
||||
if (!driver.findElement(By.xpath
|
||||
(uiElementMapper.getElement("iot.device.group.addNewGroup.xpath"))).getText().contains("ADD NEW GROUP")) {
|
||||
throw new IllegalStateException("This is not the Add Group page");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This method performs creation of a new device group.
|
||||
* @param name : The group name that is need to be created.
|
||||
* @param description : the description for the group
|
||||
* @return The resultant page.
|
||||
*/
|
||||
public DeviceGroupsPage addNewGroup(String name, String description) throws IOException {
|
||||
|
||||
WebElement nameField = driver.findElement(By.id(
|
||||
uiElementMapper.getElement("iot.device.group.addGroupForm.name.id")));
|
||||
WebElement descriptionField = driver.findElement(By.id(
|
||||
uiElementMapper.getElement("iot.device.group.addGroupForm.description.id")));
|
||||
WebElement addGroupButton = driver.findElement(By.id(
|
||||
uiElementMapper.getElement("iot.device.group.addGroupForm.addButton.id")));
|
||||
|
||||
nameField.sendKeys(name);
|
||||
descriptionField.sendKeys(description);
|
||||
|
||||
addGroupButton.click();
|
||||
|
||||
return new DeviceGroupsPage(driver);
|
||||
}
|
||||
|
||||
/**
|
||||
* This method submits an empty form and returns the error message.
|
||||
* @return The error string when trying to submit an empty form.
|
||||
*/
|
||||
public String submitEmptyForm() {
|
||||
WebElement nameField = driver.findElement(By.id(
|
||||
uiElementMapper.getElement("iot.device.group.addGroupForm.name.id")));
|
||||
WebElement descriptionField = driver.findElement(By.id(
|
||||
uiElementMapper.getElement("iot.device.group.addGroupForm.description.id")));
|
||||
WebElement addGroupButton = driver.findElement(By.id(
|
||||
uiElementMapper.getElement("iot.device.group.addGroupForm.addButton.id")));
|
||||
|
||||
nameField.sendKeys("");
|
||||
descriptionField.sendKeys("");
|
||||
|
||||
addGroupButton.click();
|
||||
|
||||
return driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.device.groups.add.emptyfrom.error"))).getText();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,78 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.groups;
|
||||
|
||||
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.UIUtils;
|
||||
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* This class represents the Groups page.
|
||||
*/
|
||||
public class DeviceGroupsPage {
|
||||
|
||||
private WebDriver driver;
|
||||
private UIElementMapper uiElementMapper;
|
||||
|
||||
public DeviceGroupsPage(WebDriver driver) throws IOException {
|
||||
this.driver = driver;
|
||||
this.uiElementMapper = UIElementMapper.getInstance();
|
||||
WebDriverWait webDriverWait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
|
||||
|
||||
if (!webDriverWait.until(ExpectedConditions.textToBePresentInElement(driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.device.groups.view.header.xpath"))), "GROUPS"))) {
|
||||
throw new IllegalStateException("This is not the Groups page");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to go to the Add device group page, by clicking the Add group button.
|
||||
* @return : Add device groups page.
|
||||
*/
|
||||
public DeviceAddGroupPage addNewGroup() throws IOException {
|
||||
WebElement addNewGroupBtn = driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.device.viewGroup.empty.addGroup.xpath")));
|
||||
addNewGroupBtn.click();
|
||||
return new DeviceAddGroupPage(driver);
|
||||
}
|
||||
|
||||
/**
|
||||
* This method checks whether the created group is visible in the UI.
|
||||
* @param groupName : Name of the group created.
|
||||
* @return : True if the group is visible. False otherwise.
|
||||
*/
|
||||
public boolean isGroupCreated(String groupName) {
|
||||
WebElement table = driver.findElement(By.id(uiElementMapper.getElement("iot.device.table.id")));
|
||||
List<WebElement> allGroupNames = table.findElements(By.tagName("h4"));
|
||||
|
||||
for (WebElement name : allGroupNames) {
|
||||
if (name.getText().contains(groupName)){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,136 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.home;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||
import org.wso2.iot.integration.ui.pages.devices.DevicesPage;
|
||||
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.uesr.AddUserPage;
|
||||
import org.wso2.iot.integration.ui.pages.uesr.UserListingPage;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* This class represents the Admin Dashboard of the IOT server.
|
||||
* Server dashboard has following sections and functions.
|
||||
* 1. User Management
|
||||
* - View users.
|
||||
* - Add a new user
|
||||
* 2. Group Management.
|
||||
* - View Groups.
|
||||
* - Add a new group.
|
||||
* 3. Device Management.
|
||||
* - View enrolled devices.
|
||||
* - Enroll a device.
|
||||
* 3. Policy Management.
|
||||
* - View Policies.
|
||||
* - Create a policy.
|
||||
*/
|
||||
public class IOTAdminDashboard {
|
||||
|
||||
private static final Log log = LogFactory.getLog(IOTHomePage.class);
|
||||
private WebDriver driver;
|
||||
private UIElementMapper uiElementMapper;
|
||||
|
||||
public IOTAdminDashboard(WebDriver driver) throws IOException {
|
||||
this.driver = driver;
|
||||
this.uiElementMapper = UIElementMapper.getInstance();
|
||||
log.info(driver.findElement(By.xpath(uiElementMapper.getElement("iot.admin.dashboard.title.xpath"))).
|
||||
getText());
|
||||
// Check that we're on the right page.
|
||||
if (!driver.findElement(By.xpath(uiElementMapper.getElement("iot.admin.dashboard.title.xpath"))).
|
||||
getText().contains("DASHBOARD")) {
|
||||
throw new IllegalStateException("This is not the home page");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs the logout action.
|
||||
* @return : The IOT login page
|
||||
*/
|
||||
public LoginPage logout() throws IOException {
|
||||
driver.findElement(By.xpath(uiElementMapper.getElement("iot.user.registered.name"))).click();
|
||||
WebElement logout = driver.findElement(By.xpath(uiElementMapper.getElement("iot.user.logout.link.xpath")));
|
||||
logout.click();
|
||||
return new LoginPage(driver);
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs the navigation to Add device group page.
|
||||
* @return : Add Device Group page.
|
||||
*/
|
||||
public DeviceAddGroupPage addGroup() throws IOException {
|
||||
driver.findElement(By.xpath(uiElementMapper.getElement("iot.device.group.addButton.xpath"))).click();
|
||||
return new DeviceAddGroupPage(driver);
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs the navigation to Group listing page.
|
||||
* @return : Groups page.
|
||||
*/
|
||||
public DeviceGroupsPage viewGroups() throws IOException {
|
||||
driver.findElement(By.xpath(uiElementMapper.getElement("iot.device.group.viewButton.xpath"))).click();
|
||||
return new DeviceGroupsPage(driver);
|
||||
}
|
||||
|
||||
/**
|
||||
* Navigates to the Add User page.
|
||||
* @return : Add user page.
|
||||
*/
|
||||
public AddUserPage addUser() throws IOException {
|
||||
driver.findElement(By.xpath(uiElementMapper.getElement("iot.admin.user.addButton.xpath"))).click();
|
||||
return new AddUserPage(driver);
|
||||
}
|
||||
|
||||
/**
|
||||
* Navigates to the User Listing page.
|
||||
* @return : User Listing page.
|
||||
*/
|
||||
public UserListingPage viewUser() throws IOException {
|
||||
driver.findElement(By.xpath(uiElementMapper.getElement("iot.admin.user.viewButton.xpath"))).click();
|
||||
return new UserListingPage(driver);
|
||||
}
|
||||
|
||||
/**
|
||||
* Navigates to the New device enrollment page.
|
||||
* @return : Enroll Device page.
|
||||
*/
|
||||
public EnrollDevicePage enrollNewDevice() throws IOException {
|
||||
driver.findElement(By.xpath(uiElementMapper.getElement("iot.admin.device.addBtn.xpath"))).click();
|
||||
return new EnrollDevicePage(driver);
|
||||
}
|
||||
|
||||
/**
|
||||
* Navigates to the Devices listing page.
|
||||
* @return : devices listing page.
|
||||
*/
|
||||
public DevicesPage viewDevices() throws IOException {
|
||||
driver.findElement(By.xpath(uiElementMapper.getElement("iot.admin.device.viewBtn.xpath"))).click();
|
||||
return new DevicesPage(driver);
|
||||
}
|
||||
|
||||
//ToDo : Need to add policy methods
|
||||
}
|
@ -0,0 +1,96 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.home;
|
||||
|
||||
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.UIUtils;
|
||||
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||
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.login.LoginPage;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* This class represents the IOT server home page.
|
||||
*/
|
||||
public class IOTHomePage {
|
||||
|
||||
private WebDriver driver;
|
||||
private UIElementMapper uiElementMapper;
|
||||
|
||||
public IOTHomePage(WebDriver driver) throws IOException {
|
||||
this.driver = driver;
|
||||
this.uiElementMapper = UIElementMapper.getInstance();
|
||||
// Check that we're on the right page.
|
||||
WebDriverWait wait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
|
||||
if (!wait.until(ExpectedConditions.titleIs("Device Management | IoT Server"))) {
|
||||
throw new IllegalStateException("This is not the home page");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to check the current User name
|
||||
* @return : True if the user name matches the logged in user. False otherwise.
|
||||
*/
|
||||
public boolean checkUserName() {
|
||||
String name = driver.findElement(By.xpath(uiElementMapper.getElement("iot.user.registered.name"))).getText();
|
||||
return name.contains(uiElementMapper.getElement("iot.user.login.username"));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Performs the logout function.
|
||||
* @return : IOT login page.
|
||||
*/
|
||||
public LoginPage logout() throws IOException {
|
||||
driver.findElement(By.xpath(uiElementMapper.getElement("iot.user.registered.name"))).click();
|
||||
WebElement logout = driver.findElement(By.xpath(uiElementMapper.getElement("iot.user.logout.link.xpath")));
|
||||
logout.click();
|
||||
return new LoginPage(driver);
|
||||
}
|
||||
|
||||
/**
|
||||
* Navigates to the New device enrollment page.
|
||||
* @return : Enroll Device page.
|
||||
*/
|
||||
public EnrollDevicePage enrollNewDevice() throws IOException {
|
||||
driver.findElement(By.xpath("iot.home.page.uuf-menu.xpath")).click();
|
||||
driver.findElement(By.xpath("iot.home.page.uuf-menu.devicemgt.xpath")).click();
|
||||
driver.findElement(By.xpath("iot.home.enrollDevice.xpath")).click();
|
||||
return new EnrollDevicePage(driver);
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs the navigation to Add device group page.
|
||||
* @return : Add Device Group page.
|
||||
*/
|
||||
public DeviceAddGroupPage addNewGroup() throws IOException {
|
||||
driver.findElement(By.xpath("iot.home.page.uuf-menu.xpath")).click();
|
||||
driver.findElement(By.xpath("iot.home.page.uuf-menu.groupmgt.xpath")).click();
|
||||
driver.findElement(By.xpath("iot.device.viewGroup.empty.addGroup.xpath")).click();
|
||||
return new DeviceAddGroupPage(driver);
|
||||
}
|
||||
|
||||
//ToDo : To add policies
|
||||
|
||||
}
|
@ -0,0 +1,105 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.login;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
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.UIUtils;
|
||||
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||
import org.wso2.iot.integration.ui.pages.home.IOTAdminDashboard;
|
||||
import org.wso2.iot.integration.ui.pages.home.IOTHomePage;
|
||||
import org.wso2.iot.integration.ui.pages.uesr.NewUserRegisterPage;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Represents the Login page of the iot server.
|
||||
*
|
||||
*/
|
||||
public class LoginPage {
|
||||
|
||||
private static final Log log = LogFactory.getLog(LoginPage.class);
|
||||
private WebDriver driver;
|
||||
private UIElementMapper uiElementMapper;
|
||||
private WebElement userNameField;
|
||||
private WebElement passwordField;
|
||||
private WebElement loginButton;
|
||||
|
||||
public LoginPage(WebDriver driver) throws IOException {
|
||||
this.driver = driver;
|
||||
this.uiElementMapper = UIElementMapper.getInstance();
|
||||
WebDriverWait webDriverWait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
|
||||
|
||||
if (!webDriverWait.until(ExpectedConditions.titleContains("Login | IoT Server"))) {
|
||||
throw new IllegalStateException("This is not the Login page");
|
||||
}
|
||||
userNameField = driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.user.login.input.username.xpath")));
|
||||
passwordField = driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.user.login.input.password.xpath")));
|
||||
loginButton = driver.findElement(By.xpath(uiElementMapper.getElement("iot.user.login.button.xpath")));
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to login as a registered user.
|
||||
* @param username Username of the user.
|
||||
* @param password Password of the user.
|
||||
* @return After a user is logged in, it will redirect to the IOT Server Home page.
|
||||
* @throws IOException
|
||||
*/
|
||||
public IOTHomePage loginAsUser(String username, String password) throws IOException {
|
||||
log.info("Login as " + username);
|
||||
userNameField.sendKeys(username);
|
||||
passwordField.sendKeys(password);
|
||||
loginButton.click();
|
||||
return new IOTHomePage(driver);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to login as the server admin.
|
||||
* @param username The admin user name (admin).
|
||||
* @param password The admin password (admin).
|
||||
* @return After admin logged in, it will redirect to the IOT Server dashboard.
|
||||
* @throws IOException
|
||||
*/
|
||||
public IOTAdminDashboard loginAsAdmin(String username, String password) throws IOException {
|
||||
log.info("Login as " + username);
|
||||
userNameField.sendKeys(username);
|
||||
passwordField.sendKeys(password);
|
||||
loginButton.click();
|
||||
return new IOTAdminDashboard(driver);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method for new user registration.
|
||||
* @return After clicking the Register link, it will navigate to the User Registration page.
|
||||
* @throws IOException
|
||||
*/
|
||||
public NewUserRegisterPage registerNewUser() throws IOException {
|
||||
WebElement registerLink = driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.user.register.link.xpath")));
|
||||
registerLink.click();
|
||||
return new NewUserRegisterPage(driver);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,114 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.samples;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.interactions.Action;
|
||||
import org.openqa.selenium.interactions.Actions;
|
||||
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
import org.wso2.iot.integration.ui.pages.UIUtils;
|
||||
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* Class to represent the Connected cup device interface.
|
||||
* This device is a virtual device, which allows users to change Temperature and Level values and put an order.
|
||||
*/
|
||||
public class ConnectedCupDeviceInterface {
|
||||
|
||||
private Log log = LogFactory.getLog(ConnectedCupDeviceInterface.class);
|
||||
private WebDriver driver;
|
||||
private UIElementMapper uiElementMapper;
|
||||
|
||||
public ConnectedCupDeviceInterface(WebDriver driver) throws IOException {
|
||||
this.driver = driver;
|
||||
this.uiElementMapper = UIElementMapper.getInstance();
|
||||
WebDriverWait webDriverWait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
|
||||
if (!webDriverWait.until(ExpectedConditions.titleContains("Connected Coffee Cup"))) {
|
||||
throw new IllegalStateException("This is not the Connected cup device page");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to perform the order coffee functionality.
|
||||
* @return : True if the element is present and action is performed. False otherwise.
|
||||
*/
|
||||
public boolean orderCoffee() {
|
||||
if (UIUtils.isElementPresent(log, driver, By.xpath(
|
||||
uiElementMapper.getElement("iot.sample.orderCoffee.xpath")))) {
|
||||
WebElement orderBtn = driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.sample.orderCoffee.xpath")));
|
||||
orderBtn.click();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to change the temperature level.
|
||||
* @param temp : The value to be set.
|
||||
* @return : True if the element is present and value is set. False otherwise.
|
||||
*/
|
||||
public boolean changeTemperature(String temp) {
|
||||
if (UIUtils.isElementPresent(log, driver, By.xpath(
|
||||
uiElementMapper.getElement("iot.sample.temperature.xpath")))) {
|
||||
WebElement tempSlider = driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.sample.temperature.xpath")));
|
||||
moveSlider(tempSlider, Integer.parseInt(temp));
|
||||
driver.manage().timeouts().implicitlyWait(UIUtils.webDriverTime, TimeUnit.SECONDS);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to change the Coffee level.
|
||||
* @param level : The value to be set.
|
||||
* @return : True if the element is present and value is set. False otherwise.
|
||||
*/
|
||||
public boolean changeCoffeeLevel(String level) {
|
||||
if (UIUtils.isElementPresent(log, driver, By.xpath(
|
||||
uiElementMapper.getElement("iot.sample.coffee.level.xpath")))) {
|
||||
WebElement lvlSlider = driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.sample.coffee.level.xpath")));
|
||||
moveSlider(lvlSlider, Integer.parseInt(level));
|
||||
driver.manage().timeouts().implicitlyWait(UIUtils.webDriverTime, TimeUnit.SECONDS);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method performs the slider change action of the web interface.
|
||||
* @param slider : The element of the slider to be changed.
|
||||
* @param val : Value to be set.
|
||||
*/
|
||||
private void moveSlider(WebElement slider, int val) {
|
||||
Actions move = new Actions(driver);
|
||||
Action action = move.dragAndDropBy(slider, 0, val).build();
|
||||
action.perform();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,83 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.samples;
|
||||
|
||||
|
||||
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.UIUtils;
|
||||
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* This class represents the Device Type View page of the Connected cup device, which has the functionality for
|
||||
* download the device agent.
|
||||
*/
|
||||
public class ConnectedCupDeviceTypeViewPage {
|
||||
|
||||
private WebDriver driver;
|
||||
private UIElementMapper uiElementMapper;
|
||||
|
||||
public ConnectedCupDeviceTypeViewPage(WebDriver driver) throws IOException {
|
||||
this.driver = driver;
|
||||
this.uiElementMapper = UIElementMapper.getInstance();
|
||||
if (!driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.sample.connectedcup.page.title"))).getText().
|
||||
contains("Connected Cup")) {
|
||||
throw new IllegalStateException("This is not the Connected cup device type view page");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This method verifies that the pop up modal for inserting a name for device is present.
|
||||
* @return : True if the Modal pop up is displayed. False otherwise.
|
||||
*/
|
||||
public boolean isPopUpPresent() throws InterruptedException {
|
||||
WebElement createInstanceBtn = driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.sample.connectedcup.createInstanceBtn.xpath")));
|
||||
createInstanceBtn.click();
|
||||
WebDriverWait wait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
|
||||
wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.sample.modal.popup.xpath")))));
|
||||
|
||||
return driver.findElement(By.xpath(uiElementMapper.getElement("iot.sample.modal.popup.xpath"))).isDisplayed();
|
||||
}
|
||||
|
||||
/**
|
||||
* This method performs the enrolment process of the connected cup device. After clicking the Download button in
|
||||
* the popup, user should be navigated to the device type view page again.
|
||||
* This method checks the navigation and return true if navigation is correct.
|
||||
* @param name : Name for the device.
|
||||
* @return : True if navigates to the Device type view page without errors. False otherwise.
|
||||
*/
|
||||
public boolean enrollDevice(String name) {
|
||||
WebElement nameField = driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.sample.connectedcup.createInstance.nameField.xpath")));
|
||||
WebElement createButton = driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.sample.connectedcup.createInstance.downloadBtn.xpath")));
|
||||
nameField.sendKeys(name);
|
||||
createButton.click();
|
||||
return driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.sample.connectedcup.page.title"))).getText().contains("Connected Cup");
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,174 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.samples;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
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.UIUtils;
|
||||
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||
import org.wso2.iot.integration.ui.pages.graphs.Graph;
|
||||
import org.wso2.iot.integration.ui.pages.graphs.GraphHandler;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* This class represents the Connected cup device view page.
|
||||
* In this page, there are following elements.
|
||||
* 1. Device overview. (Whether the device is active or not)
|
||||
* 2. Device operations. (Operations which are performed on the device)
|
||||
* 3. Device Stats
|
||||
*
|
||||
* In this class, device operations and device stats are validated.
|
||||
*/
|
||||
public class ConnectedCupDeviceViewPage {
|
||||
|
||||
private Map<String, Graph> graphMap = new HashMap<>();
|
||||
private Log log = LogFactory.getLog(ConnectedCupDeviceViewPage.class);
|
||||
private WebDriver driverServer;
|
||||
private WebDriver driverDevice;
|
||||
private UIElementMapper uiElementMapper;
|
||||
private GraphHandler handler;
|
||||
|
||||
public ConnectedCupDeviceViewPage(WebDriver driver, String name) throws IOException {
|
||||
this.driverServer = driver;
|
||||
this.driverDevice = driver;
|
||||
this.uiElementMapper = UIElementMapper.getInstance();
|
||||
this.handler = new GraphHandler(driverServer);
|
||||
|
||||
if (!driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.sample.connectedcup.view.page.title"))).getText().
|
||||
contains(name)) {
|
||||
throw new IllegalStateException("This is not the Connected cup device type view page");
|
||||
}
|
||||
handler = new GraphHandler(driverServer);
|
||||
graphMap = handler.getGraphMap();
|
||||
}
|
||||
|
||||
/**
|
||||
* This method executes Connected cup sample web app.
|
||||
* @return : The Connected cup web page.
|
||||
*/
|
||||
public ConnectedCupDeviceInterface gotoDevice() throws IOException {
|
||||
WebDriverWait wait = new WebDriverWait(driverServer, UIUtils.webDriverTime);
|
||||
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(
|
||||
uiElementMapper.getElement("iot.sample.connectedcup.gotodevice.xpath"))));
|
||||
String link = driverServer.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.sample.connectedcup.gotodevice.xpath"))).getAttribute("href");
|
||||
driverDevice.get(link);
|
||||
return new ConnectedCupDeviceInterface(driverDevice);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the connected cup device web app URL.
|
||||
* @return : Link of the connected cup device web app.
|
||||
*/
|
||||
public String getDeviceLink() {
|
||||
WebDriverWait wait = new WebDriverWait(driverServer, UIUtils.webDriverTime);
|
||||
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(
|
||||
uiElementMapper.getElement("iot.sample.connectedcup.gotodevice.xpath"))));
|
||||
return driverServer.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.sample.connectedcup.gotodevice.xpath"))).getAttribute("href");
|
||||
}
|
||||
|
||||
/**
|
||||
* This method checks whether there are expected number of graphs are available in the UI.
|
||||
* @param count : Number of graphs expected.
|
||||
* @return : True if there are count number of graphs. False otherwise.
|
||||
*/
|
||||
public boolean isGraphsAvailable(int count) {
|
||||
return handler.getGraphCount() == count;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the selected graph axes represent the given values.
|
||||
* @param axis : Graph axis. X or Y
|
||||
* @param graphId : Id of the graph
|
||||
* @param axisName : Name which is expected to be displayed.
|
||||
* @return : True if given axis contains the expected title. False otherwise or, there are no graphs present.
|
||||
*/
|
||||
public boolean graphAxisName(String axis, String graphId, String axisName) {
|
||||
if (graphMap.size() != 0) {
|
||||
if (axis.toLowerCase().contains("x")) {
|
||||
return graphMap.get(graphId).getxAxis().contains(axisName);
|
||||
} else {
|
||||
return graphMap.get(graphId).getyAxis().contains(axisName);
|
||||
}
|
||||
}
|
||||
log.error("There are no graphs found.");
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check the legend of the selected graph have the expected title.
|
||||
* @param graphId : Id of the graph.
|
||||
* @param legend : Expected value to be displayed in the legend.
|
||||
* @return : True if legend contains the expected value. False otherwise or there are no graphs present.
|
||||
*/
|
||||
public boolean graphLegendName(String graphId, String legend) {
|
||||
if (graphMap.size() != 0) {
|
||||
if (graphMap.get(graphId) != null){
|
||||
return graphMap.get(graphId).getLegend().contains(legend);
|
||||
}
|
||||
log.error(String.format("Graph for %s is not found.", graphId));
|
||||
return false;
|
||||
}
|
||||
log.error("There are no graphs found.");
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to check the graph path is displayed in the UI for given graph.
|
||||
* @param graphId : Id of the graph.
|
||||
* @return : True of path is displayed. False otherwise or no graphs are present.
|
||||
*/
|
||||
public boolean checkGraphPath(String graphId) {
|
||||
WebElement graph = handler.getGraphById(graphId);
|
||||
if (graph != null) {
|
||||
return handler.isPathAvailable(graph);
|
||||
} else {
|
||||
log.error(String.format("Graph for Id %s is not present.", graphId));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to verify that the graphs get readings from the device.
|
||||
* @param graphId : Id of the graph.
|
||||
* @param value : Value which is expected to be displayed in the graph.
|
||||
* @return : True if the value is displayed in the graph. False otherwise or graph is null.
|
||||
*/
|
||||
public boolean checkGraphValues(String graphId, String value) {
|
||||
WebElement graph = handler.getGraphById(graphId);
|
||||
driverServer.manage().timeouts().implicitlyWait(UIUtils.webDriverTime, TimeUnit.SECONDS);
|
||||
if (graph != null) {
|
||||
return handler.isPathGetValues(graph, value);
|
||||
} else {
|
||||
log.error(String.format("Graph for Id %s is not present.", graphId));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,80 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.uesr;
|
||||
|
||||
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.UIUtils;
|
||||
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
|
||||
/**
|
||||
* This class represents the add user page of the IOT server.
|
||||
*/
|
||||
public class AddUserPage {
|
||||
|
||||
private WebDriver driver;
|
||||
private UIElementMapper uiElementMapper;
|
||||
|
||||
public AddUserPage(WebDriver driver) throws IOException {
|
||||
this.driver = driver;
|
||||
this.uiElementMapper = UIElementMapper.getInstance();
|
||||
|
||||
WebDriverWait webDriverWait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
|
||||
if (!webDriverWait.until(ExpectedConditions.titleContains("User Management | IoT Server"))) {
|
||||
throw new IllegalStateException("This is not the Add User page");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to create a new user.
|
||||
*
|
||||
* @param userName The username for the user.
|
||||
* @param firstName The user's first name.
|
||||
* @param lastName The user's last name.
|
||||
* @param email Email address of the user.
|
||||
* @return The user added confirmation page.
|
||||
*/
|
||||
public UserAddedConfirmationPage createNewUser(String userName, String firstName, String lastName, String email)
|
||||
throws IOException {
|
||||
|
||||
WebElement userNameField = driver.findElement(By.id(
|
||||
uiElementMapper.getElement("iot.admin.addUser.username.id")));
|
||||
WebElement firstNameField = driver.findElement(By.id(
|
||||
uiElementMapper.getElement("iot.admin.addUser.firstName.id")));
|
||||
WebElement lastNameField = driver.findElement(By.id(
|
||||
uiElementMapper.getElement("iot.admin.addUser.lastName.id")));
|
||||
WebElement emailField = driver.findElement(By.id(
|
||||
uiElementMapper.getElement("iot.admin.addUser.email.id")));
|
||||
|
||||
userNameField.sendKeys(userName);
|
||||
firstNameField.sendKeys(firstName);
|
||||
lastNameField.sendKeys(lastName);
|
||||
emailField.sendKeys(email);
|
||||
|
||||
driver.findElement(By.xpath(uiElementMapper.getElement("iot.admin.addUser.add.btn.xpath"))).click();
|
||||
|
||||
return new UserAddedConfirmationPage(driver);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.uesr;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
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.UIUtils;
|
||||
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||
|
||||
/**
|
||||
* This class represents the Edit user page of the IOT server
|
||||
*/
|
||||
public class EditUserPage {
|
||||
|
||||
private static final Log log = LogFactory.getLog(EditUserPage.class);
|
||||
private WebDriver driver;
|
||||
private UIElementMapper uiElementMapper;
|
||||
|
||||
public EditUserPage(WebDriver driver) throws Exception {
|
||||
this.driver = driver;
|
||||
this.uiElementMapper = UIElementMapper.getInstance();
|
||||
|
||||
WebDriverWait webDriverWait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
|
||||
if (!webDriverWait.until(ExpectedConditions.titleContains("User Management | IoT Server"))){
|
||||
throw new IllegalStateException("This is not the Edit User page");
|
||||
}
|
||||
}
|
||||
|
||||
public void editUser(String password, String firstName, String lastName) {
|
||||
driver.findElement(By.xpath(uiElementMapper.getElement("iot.user.add.input.password.xpath")));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,131 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.uesr;
|
||||
|
||||
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.UIUtils;
|
||||
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||
import org.wso2.iot.integration.ui.pages.login.LoginPage;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* This class represents the new user registration page.
|
||||
* User registration page has the registration form for new users to enter the required data and the submit button.
|
||||
*/
|
||||
public class NewUserRegisterPage {
|
||||
|
||||
private WebDriver driver;
|
||||
private WebElement firstNameField;
|
||||
private WebElement lastNameField;
|
||||
private WebElement emailField;
|
||||
private WebElement userNameField;
|
||||
private WebElement passwordField;
|
||||
private WebElement passwordConfirmationField;
|
||||
private WebElement registerButton;
|
||||
|
||||
public NewUserRegisterPage(WebDriver driver) throws IOException {
|
||||
this.driver = driver;
|
||||
UIElementMapper uiElementMapper = UIElementMapper.getInstance();
|
||||
|
||||
// Check that we're on the right page.
|
||||
WebDriverWait webDriverWait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
|
||||
if (!webDriverWait.until(ExpectedConditions.titleContains("Register | IoT Server"))) {
|
||||
throw new IllegalStateException("This is not the Register page");
|
||||
}
|
||||
|
||||
firstNameField = driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.user.add.input.firstname.xpath")));
|
||||
lastNameField = driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.user.add.input.lastname.xpath")));
|
||||
emailField = driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.user.add.input.email.xpath")));
|
||||
userNameField = driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.user.add.input.username.xpath")));
|
||||
passwordField = driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.user.add.input.password.xpath")));
|
||||
passwordConfirmationField = driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.user.add.input.confirmpassword.xpath")));
|
||||
registerButton = driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.user.add.register.button.xpath")));
|
||||
}
|
||||
|
||||
/**
|
||||
* The method to register a new user.
|
||||
*
|
||||
* @param firstName First name of the user.
|
||||
* @param lastName Last name of the user.
|
||||
* @param email Email address of the user.
|
||||
* @param userName User name for the user. This will be used to login to the server.
|
||||
* @param password The password for the user.
|
||||
* @param confirmPassword Password confirmation.
|
||||
* @return After the user is created it navigates back to the login page.
|
||||
* @throws IOException
|
||||
*/
|
||||
public LoginPage registerUser(String firstName, String lastName, String email, String userName, String password,
|
||||
String confirmPassword) throws IOException {
|
||||
handleAction(firstName, lastName, email, userName, password, confirmPassword);
|
||||
return new LoginPage(driver);
|
||||
}
|
||||
|
||||
/**
|
||||
* Following method is to validate the user registration form.
|
||||
* */
|
||||
public void validateForm(String firstName, String lastName, String email, String userName,
|
||||
String password, String confirmPassword) {
|
||||
handleAction(firstName, lastName, email, userName, password, confirmPassword);
|
||||
}
|
||||
|
||||
/**
|
||||
* Support method to populate the User registration form.
|
||||
* @param firstName : First name of the user.
|
||||
* @param lastName : Last name of the user.
|
||||
* @param email : E mail of the user.
|
||||
* @param userName : User name of the user.
|
||||
* @param password : Password for the user.
|
||||
* @param confirmPassword : Confirmation password.
|
||||
*/
|
||||
private void handleAction(String firstName, String lastName, String email, String userName, String password,
|
||||
String confirmPassword) {
|
||||
clearForm();
|
||||
firstNameField.sendKeys(firstName);
|
||||
lastNameField.sendKeys(lastName);
|
||||
emailField.sendKeys(email);
|
||||
userNameField.sendKeys(userName);
|
||||
passwordField.sendKeys(password);
|
||||
passwordConfirmationField.sendKeys(confirmPassword);
|
||||
registerButton.click();
|
||||
}
|
||||
|
||||
/**
|
||||
* Support method to clear the Registration form.
|
||||
*/
|
||||
private void clearForm() {
|
||||
firstNameField.clear();
|
||||
lastNameField.clear();
|
||||
emailField.clear();
|
||||
userNameField.clear();
|
||||
passwordField.clear();
|
||||
passwordConfirmationField.clear();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.uesr;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* This class represents the confirmation page for adding a new user.
|
||||
*/
|
||||
public class UserAddedConfirmationPage {
|
||||
|
||||
public UserAddedConfirmationPage(WebDriver driver) throws IOException {
|
||||
UIElementMapper uiElementMapper = UIElementMapper.getInstance();
|
||||
|
||||
driver.findElement(By.xpath(uiElementMapper.getElement("iot.admin.addUser.view.btn.xpath"))).click();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,68 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.uesr;
|
||||
|
||||
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.UIUtils;
|
||||
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Class to represent the user listing page.
|
||||
*/
|
||||
public class UserListingPage {
|
||||
|
||||
private WebDriver driver;
|
||||
private UIElementMapper uiElementMapper;
|
||||
|
||||
public UserListingPage(WebDriver driver) throws IOException {
|
||||
this.driver = driver;
|
||||
this.uiElementMapper = UIElementMapper.getInstance();
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs the delete user action.
|
||||
* @return After deleting a user, returns back to the user listing page.
|
||||
*/
|
||||
public UserListingPage deleteUser() throws IOException, InterruptedException {
|
||||
WebElement deleteBtn = driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.admin.deleteUser.btn.xpath")));
|
||||
|
||||
WebDriverWait wait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
|
||||
wait.until(ExpectedConditions.visibilityOf(deleteBtn));
|
||||
deleteBtn.click();
|
||||
|
||||
WebElement deleteConfirmationBtn = driver.findElement(
|
||||
By.xpath(uiElementMapper.getElement("iot.admin.deleteUser.yes.link.xpath")));
|
||||
wait.until(ExpectedConditions.visibilityOf(deleteConfirmationBtn));
|
||||
deleteConfirmationBtn.click();
|
||||
|
||||
Thread.sleep(UIUtils.threadTimeout);
|
||||
WebElement deleteSuccessBtn = driver.findElement(
|
||||
By.xpath(uiElementMapper.getElement("iot.admin.deleteUser.success.link.xpath")));
|
||||
deleteSuccessBtn.click();
|
||||
|
||||
return new UserListingPage(driver);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.uesr;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
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.UIUtils;
|
||||
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||
|
||||
/**
|
||||
* Class to represent the user view.
|
||||
*/
|
||||
public class ViewUserPage {
|
||||
|
||||
private static final Log log = LogFactory.getLog(ViewUserPage.class);
|
||||
private WebDriver driver;
|
||||
private UIElementMapper uiElementMapper;
|
||||
|
||||
public ViewUserPage (WebDriver driver) throws Exception {
|
||||
this.driver = driver;
|
||||
this.uiElementMapper = UIElementMapper.getInstance();
|
||||
|
||||
WebDriverWait webDriverWait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
|
||||
if (!webDriverWait.until(ExpectedConditions.titleContains("User Management | IoT Server"))){
|
||||
throw new IllegalStateException("This is not the User view page");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,654 @@
|
||||
#
|
||||
# Copyright (c) 2016, 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.
|
||||
#
|
||||
|
||||
# User registration and login details-----------------------------------------------------------------------------------
|
||||
|
||||
iot.user.add.firstname=firstname
|
||||
iot.user.add.lastname=lastname
|
||||
iot.user.add.username=testUser
|
||||
iot.user.add.password=testPassword
|
||||
iot.user.add.email=username@wso2.com
|
||||
|
||||
iot.user.login.username=testUser
|
||||
iot.user.login.password=testPassword
|
||||
|
||||
# User registration and login ui----------------------------------------------------------------------------------------
|
||||
|
||||
iot.user.registered.name=/html/body/header/div/div[2]/a/span[1]
|
||||
|
||||
iot.user.add.input.firstname.xpath=//*[@id="first_name"]
|
||||
iot.user.add.input.lastname.xpath=//*[@id="last_name"]
|
||||
iot.user.add.input.username.xpath=//*[@id="user_name"]
|
||||
iot.user.add.input.password.xpath=//*[@id="password"]
|
||||
iot.user.add.input.confirmpassword.xpath=//*[@id="password_confirmation"]
|
||||
iot.user.add.input.email.xpath=//*[@id="email"]
|
||||
iot.user.add.register.button.xpath=//*[@id="add-user-btn"]
|
||||
|
||||
|
||||
iot.user.login.input.username.xpath=//*[@id="signInForm"]/div[1]/input
|
||||
iot.user.login.input.password.xpath=//*[@id="signInForm"]/div[2]/input
|
||||
iot.user.login.button.xpath=//*[@id="signInForm"]/div[3]/button
|
||||
|
||||
iot.user.register.link.xpath=//*[@id="register-link-wrapper"]/a
|
||||
|
||||
# Devices page elements ------------------------------------------------------------------------------------------------
|
||||
|
||||
iot.home.page.uuf-menu.xpath=//*[@id="_uuf-navmenu-button"]
|
||||
|
||||
iot.home.page.uuf-menu.devicemgt.xpath=//*[@id="_uuf-navmenu-items"]/ul/li[1]/a
|
||||
iot.home.page.uuf-menu.groupmgt.xpath=//*[@id="_uuf-navmenu-items"]/ul/li[2]/a
|
||||
iot.home.page.uuf-menu.policymgt.xpath=//*[@id="_uuf-navmenu-items"]/ul/li[3]/a
|
||||
|
||||
iot.home.page.title.xpath=/html/body/div[3]/div[1]/div/span
|
||||
iot.admin.dashboard.title.xpath=/html/body/div[3]/div[1]/div/span
|
||||
|
||||
iot.home.enrollDevice.xpath=//*[@id="ast-container"]/div/p/a
|
||||
iot.user.logout.link.xpath=/html/body/header/div/div[2]/ul/li[3]/a
|
||||
|
||||
iot.devices.table.xpath=//*[@id="device-grid"]
|
||||
|
||||
# Register page error elements -----------------------------------------------------------------------------------------
|
||||
|
||||
iot.user.register.firstname.error=first_name-error
|
||||
iot.user.register.lastname.error=last_name-error
|
||||
iot.user.register.username.error=user_name-error
|
||||
iot.user.register.email.error=email-error
|
||||
iot.user.register.password.error=password-error
|
||||
iot.user.register.confirmPassword.error=password_confirmation-error
|
||||
|
||||
# Admin dashboard Device -----------------------------------------------------------------------------------------------
|
||||
iot.admin.device.viewBtn.xpath=//a[@href='/devicemgt/devices']
|
||||
iot.admin.device.addBtn.xpath=//a[@href='/devicemgt/device/enroll']
|
||||
|
||||
# Incorrect login Credentials ------------------------------------------------------------------------------------------
|
||||
iot.user.login.username.error=username-error
|
||||
iot.user.login.password.error=password-error
|
||||
iot.user.login.incorrect.xpath=/html/body/div/div/div/div[1]
|
||||
iot.user.login.shortPassword=password-error
|
||||
|
||||
|
||||
iot.dashboard.device.div.xpath=/html/body/div[3]/div[7]/div[1]/div/div/div[1]
|
||||
|
||||
#Grouping --------------------------------------------------------------------------------------------------------------
|
||||
|
||||
iot.device.group.addButton.xpath=/html/body/div[3]/div[2]/div[1]/div[2]/div/div/div[2]/div[2]/span[2]/a[2]
|
||||
iot.device.group.viewButton.xpath=/html/body/div[3]/div[2]/div[1]/div[2]/div/div/div[2]/div[2]/span[2]/a[1]
|
||||
|
||||
iot.device.group.addNewGroup.xpath=/html/body/div[3]/div/div[1]/div/p[1]
|
||||
|
||||
iot.device.viewGroup.empty.addGroup.xpath=//*[@id="ast-container"]/div/p/a
|
||||
|
||||
iot.device.group.addGroupForm.name.id=name
|
||||
iot.device.group.addGroupForm.description.id=description
|
||||
iot.device.group.addGroupForm.addButton.id=add-group-btn
|
||||
|
||||
iot.device.groups.view.header.xpath=/html/body/div[3]/div[1]/div/span
|
||||
|
||||
iot.device.groups.add.emptyfrom.error=/html/body/div[3]/div/div[1]/div/span/strong
|
||||
|
||||
iot.device.table.id=group-grid
|
||||
|
||||
#Add user --------------------------------------------------------------------------------------------------------------
|
||||
iot.admin.user.addButton.xpath=/html/body/div[3]/div[2]/div[1]/div[3]/div/div/div[2]/div[2]/span[2]/a[2]/span/i[2]
|
||||
iot.admin.user.viewButton.xpath=/html/body/div[3]/div[2]/div[1]/div[3]/div/div/div[2]/div[2]/span[2]/a[1]/span/i[2]
|
||||
|
||||
iot.admin.user.added.page.subtitle.xpath="//p[@class='page-sub-title']"
|
||||
iot.admin.user.listing.page.subtitle.xpath="//span[@class='page-sub-title']"
|
||||
|
||||
iot.admin.addUser.username.id=username
|
||||
iot.admin.addUser.firstName.id=firstname
|
||||
iot.admin.addUser.lastName.id=lastname
|
||||
iot.admin.addUser.email.id=emailAddress
|
||||
iot.admin.addUser.roles.id=roles
|
||||
|
||||
iot.admin.addUser.add.btn.xpath=//*[@id="add-user-btn"]
|
||||
iot.admin.addUser.view.btn.xpath=//*[@id="user-created-msg"]/div/button
|
||||
|
||||
iot.admin.deleteUser.btn.xpath=//*[@id="user1"]/td[5]/a[3]/span[1]/i[2]
|
||||
iot.admin.deleteUser.yes.link.xpath=//a[@id="remove-user-yes-link"]
|
||||
iot.admin.deleteUser.success.link.xpath=//a[@id="remove-user-success-link"]
|
||||
|
||||
iot.admin.addUser.formError.xpath=//*[@id="user-create-error-msg"]
|
||||
|
||||
#----- User view page heading ------------------------------------------------------------------------------------------
|
||||
|
||||
iot.user.view.page.heading.xpath=/html/body/div[3]/div[1]/div/label
|
||||
|
||||
#----- Editing a user---------------------------------------------------------------------------------------------------
|
||||
|
||||
iot.admin.viewUser.btn.xpath=//*[@id="user1"]/td[5]/a[1]/span[1]/i[2]
|
||||
iot.admin.editUser.btn.xpath=//*[@id="userEditBtn"]
|
||||
iot.admin.editUser.edit.btn.xpath=//*[@id="add-user-btn"]
|
||||
|
||||
#---------------------------Testing the samples ------------------------------------------------------------------------
|
||||
iot.sample.connectedcup.xpath=//*[@id="connectedcup"]
|
||||
iot.sample.connectedcup.try.btn.xpath=//button[contains(@id,'connectedcup_btn')]
|
||||
iot.sample.connectedcup.try.btn.id=connectedcup_btn
|
||||
iot.sample.connectedcup.page.title=//h1[@class='grey ']
|
||||
iot.sample.connectedcup.view.page.title=//label[@class='device-id device-select']
|
||||
iot.sample.connectedcup.createInstanceBtn.xpath=//a[@class='download-link btn-operations']
|
||||
iot.sample.connectedcup.createInstance.nameField.xpath=//input[@class='connectedCupName']
|
||||
iot.sample.connectedcup.createInstance.downloadBtn.xpath=//a[contains(@class,'btn-operations')]
|
||||
iot.sample.modal.popup.xpath=//div[@class='modalpopup-content']
|
||||
|
||||
iot.sample.connectedcup.gotodevice.xpath=//a[@class='btn-operations']
|
||||
iot.sample.connectedcup.device.title.xpath=/html/body/div[4]/h1
|
||||
|
||||
iot.sample.orderCoffee.xpath=//*[@id="order-cup"]
|
||||
iot.sample.coffee.level.xpath=//*[@id="amount_coffee"]
|
||||
iot.sample.temperature.xpath=//*[@id="amount_temp"]
|
||||
|
||||
iot.sample.analytics.link.xpath=//*[@id="device_statistics"]/a
|
||||
|
||||
iot.sample.coffeelevel.graph.path=//*[@id="chart-Coffee Level"]/svg/path[1]
|
||||
iot.sample.temperature.graph.path=//*[@id="chart-Temperature"]/svg/path[1]
|
||||
|
||||
|
||||
iot.try.devices.div.classname=//div[@class='try-device-container']
|
||||
iot.try.device.text.xpath=//p[contains(@class,'try-device-text')]
|
||||
|
||||
|
||||
#------------------ Graphs (Device View) -------------------------------------------------------------------------------
|
||||
iot.stats.graph.container.xpath=//*[@id="div-chart"]
|
||||
iot.stat.graph.wrapper.xpath=//*[contains(@class, "chartWrapper")]
|
||||
iot.stat.graph.xAxis.xpath=//*[contains(@class, "custom_x_axis")]
|
||||
iot.stat.graph.class.name=custom_rickshaw_graph rickshaw_graph
|
||||
|
||||
#-----------------------------------------------------------------------------------------------------------------------
|
||||
#iot.user.delete.button=//*[@id="inosh"]/td[5]/a[3]
|
||||
#iot.user.delete.button.confirm=remove-user-yes-link
|
||||
#iot.user.delete.button.success=remove-user-success-link
|
||||
#iot.roles.add.button=appbar-btn-
|
||||
#iot.roles.add.rolename.input=rolename
|
||||
#iot.roles.add.role.button=add-role-btn
|
||||
#iot.roles.add.role.created.msg.div=role-created-msg
|
||||
#iot.roles.update.rolename.input=rolename
|
||||
#iot.roles.update.role.button=add-role-btn
|
||||
#iot.roles.update.role.created.msg.div=role-created-msg
|
||||
#iot.roles.update.role.created.success.msg=ROLE WAS UPDATED SUCCESSFULLY
|
||||
#iot.configuration.android.tab.identifier=id('androidConfigLink')
|
||||
#iot.configuration.widows.tab.identifier=id('windowsConfigLink')
|
||||
#iot.configuration.ios.tab.identifier=id('iosConfigLink')
|
||||
#iot.configuration.general.tab.identifier=id('generalConfigLink')
|
||||
#iot.configuration.general.input.monitoringFr.identifier=id('monitoring-config-frequency')
|
||||
#iot.configuration.general.button.save.identifier=id('monitoring-config-frequency')
|
||||
#iot.configuration.saved.lable.identifier=id('record-created-msg')
|
||||
#iot.configuration.saved.lable.val=Please click "Go back to configurations", if you wish to save another configuration or click "Exit" to complete the process and go back to the dashboard.
|
||||
#iot.configuration.saved.button.back.identifier=id('btnBack')
|
||||
#iot.configuration.saved.button.back.val=Go back to configurations
|
||||
#iot.configuration.saved.button.exit.identifier=id('btnExit')
|
||||
#iot.configuration.saved.button.exit.val=Exit
|
||||
#iot.configuration.android.select.identifier=id('android-config-notifier')
|
||||
#iot.configuration.android.input.identifier=id('android-config-notifier-frequency')
|
||||
#iot.configuration.android.button.save.identifier=id('save-android-btn')
|
||||
#iot.configuration.windows.input.identifier=id('windows-config-notifier-frequency')
|
||||
#iot.configuration.windows.button.save.identifier=id('save-windows-btn')
|
||||
#iot.notification.bubble.identifier=notification-bubble
|
||||
#iot.notification.unread.identifier=unReadNotifications
|
||||
#iot.notification.all.identifier=allNotifications
|
||||
#
|
||||
#
|
||||
#
|
||||
#
|
||||
#app.sign.in.button=button.btn
|
||||
#app.redMine.login.button.name=login
|
||||
#app.redMine.issue.button=New issue
|
||||
#app.redMine.issue.subject=issue_subject
|
||||
#app.redMine.issue.description=issue_description
|
||||
#app.redMine.issue.submit=commit
|
||||
#app.AddNew.App.link=Add New Application
|
||||
#new.app.add.app.name=applicationName
|
||||
#new.app.add.app.key=applicationKey
|
||||
#new.app.add.app.icon=icon
|
||||
#new.app.add.app.Description=applicationDescription
|
||||
#new.app.add.app.edit.Description=appDescriptionEdit_textarea
|
||||
#new.app.add.app.type=applicationType
|
||||
#app.issue.version.id=issue_fixed_version_id
|
||||
#app.database.db.environment.id=rssInstances
|
||||
#app.database.db.environment.user=js_db_user
|
||||
#app.database.db.environment.template=js_db_template
|
||||
#new.app.add.repository.type=repositoryType
|
||||
#create.new.app.button=appcreation
|
||||
#app.homepage.search.textBox=search
|
||||
#app.first.element.of.home.page=/html/body/div/div/article/section/ul/li[2]/div/h2/a/b
|
||||
#app.overview.page.app.type.id=apptype
|
||||
#app.overview.page.app.description.id=description
|
||||
#app.overview.page.repository.type.id=repotype
|
||||
#app.overview.page.app.owner.id=appOwner
|
||||
#app.overview.page.app.key.xpath=/html/body/div/div/article/section[2]/div/div/div/p
|
||||
#app.add.member.link=Add Members
|
||||
#app.add.member.name=allUsersList
|
||||
#app.invite.users= btn_nvite_users
|
||||
#app.add.add.to.list.button=addToListBtn
|
||||
#app.add.branch.link=Create Branch
|
||||
#app.add.second.branch.xpath=(//a[contains(text(),'Branch')])[2]
|
||||
#app.add.branch.version=create_branchtrunk
|
||||
#app.add.branch.button.xpath=//input[@value='Create Branch']
|
||||
#app.add.branch.two.button.xpath=(//input[@value='Create Branch'])[2]
|
||||
#app.navigate.Link=Repos & Builds
|
||||
#app.navigate.Governance.page.link=menu_governance
|
||||
#app.navigate.isue.page.link.id=menu_trackIssues
|
||||
#app.trunk.overview.xpath=/html/body/div/div/article/section[3]/div/ul/li/p/strong
|
||||
#app.trunk.build.status.xpath=/html/body/div/div/article/section[3]/div/ul/li[2]/p/span/strong
|
||||
#governance.page.firstElement.xpath=/html/body/div/div[2]/article/section/div[2]/ul/li/ul/li/div/strong
|
||||
#governance.page.firstElement.date.xpath=/html/body/div/div[2]/article/section/div[2]/ul/li/ul/li[2]/div[2]/form/div/input
|
||||
#governance.page.date.save.xpath=/html/body/div/div[2]/article/section/div[2]/ul/li/ul/li[2]/div[2]/form/div/button
|
||||
#governance.page.promote.key.xpath=/html/body/div/div[2]/article/section/div[2]/ul/li/ul/li[3]/div/ul/li[2]/a/span
|
||||
#code.completed.status=(//input[@id='registry.custom_lifecycle.checklist.option.0.item'])[last()]
|
||||
#code.review.status=(//input[@id='registry.custom_lifecycle.checklist.option.1.item'])[last()]
|
||||
#design.review.status=(//input[@id='registry.custom_lifecycle.checklist.option.2.item'])[last()]
|
||||
#app.application.overview.page=Overview
|
||||
#app.overview.page.team.details.id=userCountList
|
||||
#app.team.page.id=menu_userAdmin
|
||||
#app.add.member.page.id=btnAddMembers
|
||||
#app.issue.redMine.tab.link=Track Issues
|
||||
#app.testing.first.element.xpath=/html/body/div/div[2]/article/section/div[2]/ul[2]/li/ul/li/div/strong
|
||||
#app.testing.date.save.xpath=/html/body/div/div[2]/article/section/div[2]/ul[2]/li/ul/li[2]/div/form/div/button
|
||||
#app.testing.first.element.arrow.xpath=/html/body/div/div[2]/article/section/div[2]/ul[2]/li/ul/li[3]/div/ul/li[2]/a
|
||||
#app.factory.issue.total.count.xpath=/html/body/div/div[2]/article/section/section/div/ul/li[2]
|
||||
#app.factory.issue.item.header.id=item_list
|
||||
#app.factory.database.configure.page.link=Database Configurations
|
||||
#app.factory.new.database.link=Database
|
||||
#app.factory.database.name.id=databaseName
|
||||
#app.factory.database.password=databaseUserPassword
|
||||
#app.factory.database.confirm.password=confirmDatabaseUserPassword
|
||||
#app.factory.database.submit.button=div.buttonrow > input[name="Submit"]
|
||||
#app.factory.database.advance.Checkbox=advancecheckbox
|
||||
#app.factory.database.user.CheckBox=Username
|
||||
#app.factory.database.user.password=Password
|
||||
#app.factory.database.user.Repeat.password=repeatPassword
|
||||
#app.factory.database.environment.id=rssInstances
|
||||
#app.factory.database.user.submit.name=Submit
|
||||
#app.factory.database.template.name=templateName
|
||||
#app.factory.database.template.submit.name=Submit
|
||||
#app.factory.db.admin.id=menu_dbAdmin
|
||||
#app.factory.db.dbUser.link=DB User
|
||||
#app.factory.db.template.link=DB Template
|
||||
#app.factory.db.resources.id=dbSection
|
||||
#app.db.link=Db
|
||||
#app.db.user=wso2usr
|
||||
#app.db.template=wso2Temp@Development
|
||||
#app.factory.delete.user=Delete User
|
||||
#app.factory.del.template=Delete Template
|
||||
#app.factory.delete.Ok=Ok
|
||||
#app.factory.delete.db=Delete DB
|
||||
#app.data.source.name=datasource_name
|
||||
#app.data.source.description=datasource_description
|
||||
#app.data.source.password=datasource_password_dev
|
||||
#app.data.source.username=datasource_username_text_dev
|
||||
#app.data.source.add.button=Submit
|
||||
#app.property.name=property_name
|
||||
#app.property.type=property_type
|
||||
#app.property.description=property_description
|
||||
#app.property.value=property_value
|
||||
#app.factory.registry.page.link=Endpoints & Registry
|
||||
#app.factory.data.source.page.link=Datasources
|
||||
#app.db.details.id=dbSection
|
||||
#app.db.user.id=dbUsrSection
|
||||
#app.db.template.id=dbTempSection
|
||||
#app.factory.new.data.source.page.button=//button[@type='button']
|
||||
#app.factory.api.panel.text=/html/body/div/div/article/section[3]
|
||||
#app.factory.sign.out.email=span.icon-chevron-down
|
||||
#app.factory.sing.out.text=Sign Out
|
||||
#app.factory.subscribe=Subscribe to APIs
|
||||
#app.factory.subscribe.api.element=li > div.thumbnail > a > img
|
||||
#app.api.select.app.name=application-list
|
||||
#app.api.subscribe.button=subscribe-button
|
||||
#app.api.api.manager.button=gotoApiManagerbtn
|
||||
#app.go.to.subscriptions.text=Go to My Subscriptions
|
||||
#app.api.manager.class.name.text=title-section
|
||||
#app.api.key.generate.text=Show Keys
|
||||
#app.api.sandbox.details.id=sandTable0
|
||||
#app.api.production.details.id=prodTable0
|
||||
#app.api.page.link.text=APIs
|
||||
#app.api.page.resource.list.id=keySection
|
||||
#app.factory.subscription.page=My Subscriptions
|
||||
#app.factory.list.view=a.icon-th-list.table_view
|
||||
#app.overview.link.css=/html/body/div/div[2]/article/nav/ul/li/a
|
||||
#
|
||||
#
|
||||
#
|
||||
#
|
||||
#login.username=username
|
||||
#login.password=password
|
||||
#login.sign.in.button=button
|
||||
#login.header.div=header-div
|
||||
#
|
||||
#home.dashboard.middle.text.xpath=/html/body/div[3]/div[1]/div/span
|
||||
#home.greg.sign.out.xpath=//*[@id="header-div"]/div[4]/div/ul/li[3]/a
|
||||
#home.logged.user.dev=logged-user
|
||||
#
|
||||
#jaggery.Main.tab=menu-panel-button1
|
||||
#jaggery.Region1.tab=region1_manage_menu
|
||||
#jaggery.dashboard.middle.text=middle
|
||||
#add.jaggery.href=Jaggery
|
||||
#jaggery.war.file.upload.name=warFileName
|
||||
#jaggery.upload.button.name=upload
|
||||
#jaggery.upload.successful.message=messagebox-info
|
||||
#jaggery.upload.successful.button=ui-dialog-titlebar-close
|
||||
#
|
||||
#
|
||||
#carbon.Main.tab=menu-panel-button1
|
||||
#carbon.Region1.tab=region1_manage_menu
|
||||
#carbon.add.href=Add
|
||||
#carbon.dashboard.middle.text=middle
|
||||
#carbon.file.upload.field=filename
|
||||
#carbon.upload.button=upload
|
||||
#carbon.upload.successful.message=messagebox-info
|
||||
#carbon.upload.successful.button=ui-dialog-titlebar-close
|
||||
#
|
||||
#
|
||||
#resource.Main.tab=menu-panel-button1
|
||||
#resource.Region3.tab=region3_registry_menu
|
||||
#resource.browse.link=Browse
|
||||
#resource.dashboard.middle.text=middle
|
||||
#resource.detailed.view=stdView
|
||||
#resource.add.resource.link=Add Resource
|
||||
#resource.add.collection.link=Add Collection
|
||||
#resource.add.resource.input.field=uResourceFile
|
||||
#resource.add.Collection.input.field=collectionName
|
||||
#resource.add.Url.input.id=irFetchURL
|
||||
#resource.add.collection.description=colDesc
|
||||
#resource.add.resource.name=uResourceName
|
||||
#Resource.add.resource.description=description
|
||||
#resource.add.button=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/table/tbody/tr/td/div[2]/div[3]/div[3]/div[5]/table/tbody/tr[2]/td/form/table/tbody/tr[6]/td/input
|
||||
#resource.add.Url.button.xpath=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/table/tbody/tr/td/div[2]/div[3]/div[3]/div[5]/table/tbody/tr[3]/td/form/table/tbody/tr[6]/td/input
|
||||
#resource.collection.add.button=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/table/tbody/tr/td/div[2]/div[3]/div[3]/div[7]/form/table/tbody/tr[5]/td/input
|
||||
#resource.upload.successful.message=messagebox-info
|
||||
#resource.upload.successful.collection.message=messagebox-info
|
||||
#resource.upload.successful.button=ui-dialog-titlebar-close
|
||||
#resource.upload.collection.successful.close.button=/html/body/div[5]/div/div/a
|
||||
#resource.add.Url.Successful.close=/html/body/div[4]/div/div/a
|
||||
#
|
||||
#
|
||||
#
|
||||
#service.add.link=Service
|
||||
#service.dashboard.middle.text=middle
|
||||
#service.list.dashboard.middle.text=middle
|
||||
#service.add.name.id=id_Overview_Name
|
||||
#service.add.namespace.id=id_Overview_Namespace
|
||||
#service.check.save.service=Services
|
||||
#
|
||||
#
|
||||
#wsdl.dashboard.middle.text=middle
|
||||
#wsdl.list.dashboard.middle.text=middle
|
||||
#wsdl.add.link=WSDL
|
||||
#wsdl.add.url=irFetchURL
|
||||
#wsdl.add.name=irResourceName
|
||||
#wsdl.add.file.id=uResourceFile
|
||||
#wsdl.add.file.name.id=uResourceName
|
||||
#
|
||||
#
|
||||
#schema.add.link=Schema
|
||||
#schema.dashboard.middle.text=middle
|
||||
#schema.list.dashboard.middle.text=middle
|
||||
#schema.add.url=irFetchURL
|
||||
#schema.add.name=irResourceName
|
||||
#schema.add.schema.name.id=uResourceName
|
||||
#
|
||||
#
|
||||
#wsPolicy.add.link=Policy
|
||||
#wsPolicy.dashboard.middle.text=middle
|
||||
#ws.policy.list.dashboard.middle.text=middle
|
||||
#wsPolicy.add.url=irFetchURL
|
||||
#wsPolicy.add.name=irResourceName
|
||||
#wsPolicy.add.file.id=uResourceFile
|
||||
#wsPolicy.add.schema.name.id=uResourceName
|
||||
#
|
||||
#
|
||||
#api.add.link=API
|
||||
#api.dashboard.middle.text=middle
|
||||
#api.provider.id=id_Overview_Provider
|
||||
#api.name.id=id_Overview_Name
|
||||
#api.context.id=id_Overview_Context
|
||||
#api.version.id=id_Overview_Version
|
||||
#api.list.link=APIs
|
||||
#
|
||||
#
|
||||
#uri.add.link=URI
|
||||
#uri.add.list.id=URIs
|
||||
#uri.dashboard.middle.text=middle
|
||||
#uri.add.uri=id_Overview_URI
|
||||
#uri.add.uri.name=id_Overview_Name
|
||||
#uri.list.link=URIs
|
||||
#
|
||||
#
|
||||
#my.profile.region.tab.id=region5_my_identity_menu
|
||||
#my.profile.add.page.link=My Profiles
|
||||
#my.profile.dashboard.middle.text=middle
|
||||
#my.profile.new.profile.add.link=Add New Profile
|
||||
#my.profile.name.id=profile
|
||||
#my.profile.first.name.id=http://wso2.org/claims/givenname
|
||||
#my.profile.last.name.id=http://wso2.org/claims/lastname
|
||||
#my.profile.email.id=http://wso2.org/claims/emailaddress
|
||||
#my.profile.successful.save.pane=/html/body/div[3]/div/div/a
|
||||
#
|
||||
#
|
||||
#search.activity.link=Activities
|
||||
#search.activity.id=user
|
||||
#search.activity.name.id=path
|
||||
#search.activity.exists.id=activityList
|
||||
#
|
||||
#
|
||||
#search.page.link=Search
|
||||
#search.resource.name=resourcePath
|
||||
#search.results.id=1
|
||||
#filter.search.button=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/form[3]/table/tbody/tr/td[8]/table/tbody/tr/td/a
|
||||
#
|
||||
#users.add.new.user.link.id=Add New User
|
||||
#users.and.roles.link.text=Users and Roles
|
||||
#users.adn.roles.add.page.middle.text=middle
|
||||
#users.add.link.id=Users
|
||||
#users.add.new.user.name.id=username
|
||||
#users.add.new.user.password.name=password
|
||||
#users.add.new.user.password.retype.name=retype
|
||||
#users.admin.tick.name=userRoles
|
||||
#users.save=//input[contains(@value,'Finish')]
|
||||
#users.page.next.id=2
|
||||
#
|
||||
#
|
||||
#
|
||||
#
|
||||
#roles.add.link.id=Roles
|
||||
#role.add.new.user.link.id=Add New Role
|
||||
#role.add.new.user.name.id=roleName
|
||||
#role.permission.id=ygtvspacer
|
||||
#role.add.user.to.role.name=org.wso2.carbon.role.assign.filter
|
||||
#role.search.button=td.buttonRow > input.button
|
||||
#role.add.ok.button.css=button[type="button"]
|
||||
#role.add.user.to.role.name.tick=selectedUsers
|
||||
#role.add.user.finish.button=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/form[2]/table/tbody/tr[2]/td/input[2]
|
||||
#
|
||||
#
|
||||
#pass.word.change.link=Change My Password
|
||||
#pass.word.current.name=currentPassword
|
||||
#pass.word.new.name=newPassword
|
||||
#pass.word.check.name=checkPassword
|
||||
#pass.word.change.save.xpath=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/form/table/tbody/tr[2]/td/input
|
||||
#password.change.dialog.xpath=/html/body/div[3]/div/div/a
|
||||
#
|
||||
#
|
||||
#
|
||||
#features.add.link=Features
|
||||
#repository.add.tab.text=Repository Management
|
||||
#repositories.table.id=_table_manage_repositories
|
||||
#repository.add.link.text=Add Repository
|
||||
#repository.url.name=_txt_repository_location_url
|
||||
#repository.save.id=_btn_add_repository
|
||||
#repository.name.id=_txt_repository_name
|
||||
#installed.features.tab.linkText=Installed Features
|
||||
#repositories.dashboard.text=middle
|
||||
#features.filter.id=_txt_IF_filterString
|
||||
#feature.checkbox.click.name=chkSelectFeaturesToUninstall
|
||||
#feature.uninstall.next.button.id=_btn_next_review_uninstall_features
|
||||
#feature.uninstall.finish.button.id=_btn_uc_finish
|
||||
#
|
||||
#
|
||||
#
|
||||
#server.shutdown.link.text=Shutdown/Restart
|
||||
#feature.revert.tab=Installation History
|
||||
#feature.find.feature.text=Available Features
|
||||
#feature.install.name.id=_txt_AF_filterString
|
||||
#feature.find.id=_btn_next_filter_repositories
|
||||
#feature.install.click=chkSelectFeaturesToInstall
|
||||
#feature.install.accept.button=_radio_af_accept_licenses
|
||||
#
|
||||
#
|
||||
#key.store.add.link=KeyStores
|
||||
#key.store.dashboard.middle.text=middle
|
||||
#key.store.add.new.link.text=Add New KeyStore
|
||||
#key.store.file.path.id=keystoreFile
|
||||
#key.store.password.name=ksPassword
|
||||
#key.store.provider.name=provider
|
||||
#key.store.next.button=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/form/table/tbody/tr[2]/td/input
|
||||
#key.store.pass.key=keyPass
|
||||
#key.store.successful.xpath=/html/body/div[3]/div/div/a
|
||||
#
|
||||
#
|
||||
#logging.add.link=Logging
|
||||
#logging.dashboard.middle.text=middle
|
||||
#logging.update.button.id=globalLog4jUpdate
|
||||
#log4j.appender.update.id=appenderUpdate
|
||||
#log4j.global.success.xpath=/html/body/div[3]/div[2]/button
|
||||
#log4j.appender.sucess.xpath=/html/body/div[4]/div[2]/button
|
||||
#
|
||||
#
|
||||
#log4j.logger.search.id=filterText
|
||||
#log4j.logger.successful.button.xpath=/html/body/div[3]/div/div/a
|
||||
#
|
||||
#
|
||||
#notification.adding.link=Notifications
|
||||
#notification.dashboard.middle.text=middle
|
||||
#notification.add.edit.link.text=Add Subscription to Resource/Collection
|
||||
#notification.add.email.id=subscriptionInput
|
||||
#
|
||||
#registry.subscription.middle.text=middle
|
||||
#registry.subscription.path.id=subscriptionPath
|
||||
#registry.subscription.event.id=eventList
|
||||
#registry.subscription.notification.id=notificationMethodList
|
||||
#registry.subscription.email.id=subscriptionInput
|
||||
#registry.subscription.digest.id=subscriptionDigestTypeInput
|
||||
#registry.subscription.hsmethod.id=hierarchicalSubscriptionList
|
||||
#registry.subscription.subscribe.button.id=subscribeButton
|
||||
#
|
||||
#
|
||||
#uri.configure.add.link=URIs
|
||||
#uri.configure.dashboard.middle.text=middle
|
||||
#
|
||||
#
|
||||
#
|
||||
#api.configure.add.link=APIs
|
||||
#api.configure.dashboard.middle.text=middle
|
||||
#
|
||||
#service.configure.add.link=Services
|
||||
#service.configure.dashboard.middle.text=middle
|
||||
#
|
||||
#server.role.add.link=Server Roles
|
||||
#server.role.dashboard.middle.text=middle
|
||||
#server.role.add.link.text=Add New Server Role
|
||||
#server.role.name.id=_serverRoleName
|
||||
#
|
||||
#
|
||||
#add.new.tenant.link.text=Add New Tenant
|
||||
#tenant.role.dashboard.middle.text=middle
|
||||
#tenant.domain=domain
|
||||
#tenant.first.name=admin-firstname
|
||||
#tenant.last.name=admin-lastname
|
||||
#tenant.admin.user.name=admin
|
||||
#tenant.admin.password=admin-password
|
||||
#tenant.admin.password.repeat=admin-password-repeat
|
||||
#tenant.admin.email.id=admin-email
|
||||
#add.new.tenant.success.button=/html/body/div[3]/div/div/a
|
||||
#view.tenant.link=View Tenants
|
||||
#
|
||||
#
|
||||
#
|
||||
#add.new.extension.dashboard.middle.text=middle
|
||||
#extension.tab.id=menu-panel-button5
|
||||
#extension.list.page.dashboard.middle.text=middle
|
||||
#extensions.add.link=Add
|
||||
#extension.add.text.box=uResourceFile
|
||||
#
|
||||
#life.cycle.tab.id=menu-panel-button5
|
||||
#life.cycle.add.link=Lifecycles
|
||||
#add.new.lifecycle.dashboard.middle.text=middle
|
||||
#add.new.lifecycle.link.text=Add New Lifecycle
|
||||
#add.new.lifecycle.text.area=//*[@id="textarea"]
|
||||
#add.new.lifecycle.save.css=input.button.registryWriteOperation
|
||||
#resource.lifecycle.minimized=//*[@id="lifecycleIconMinimized"]
|
||||
#resource.lifecycle.add=//*[@id="lifecycleExpanded"]/div[2]/a
|
||||
#resource.lifecycle.add.select=//*[@id="aspect"]
|
||||
#resource.lifecycle.add.select.id=aspect
|
||||
#resource.lifecycle.add.button.add=//*[@id="add-lifecycle-div"]/form/table/tbody/tr[2]/td/input[1]
|
||||
#resource.lifecycle.add.button.cancel=//*[@id="add-lifecycle-div"]/form/table/tbody/tr[2]/td/input[2]
|
||||
#
|
||||
#
|
||||
#
|
||||
#artifact.add.tab.id=menu-panel-button5
|
||||
#artifacts.add.link=Artifact Types
|
||||
#add.new.artifact.dashboard.middle.text=middle
|
||||
#add.new.artifact.type.link=Add new Artifact
|
||||
#add.new.artifact.text.area=textarea
|
||||
#add.new.artifact.save.xpath=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/form/table/tbody/tr[2]/td/input
|
||||
#
|
||||
#add.new.artifact.dialog.box=button[type="button"]
|
||||
#
|
||||
#
|
||||
#
|
||||
#handler.add.tab.id=menu-panel-button5
|
||||
#handler.add.link=Handlers
|
||||
#add.new.handler.dashboard.middle.text=middle
|
||||
#add.new.handler.link.text=Add New Handler
|
||||
#add.new.handler.text.area=textarea
|
||||
#add.new.handler.save.xpath=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/form/table/tbody/tr[2]/td/input
|
||||
#add.new.handler.dialog.box=button[type="button"]
|
||||
#configure.tab.id=menu-panel-button3
|
||||
#
|
||||
#
|
||||
#
|
||||
#manage.report.page.link=Reports
|
||||
#manage.report.list.dashboard.middle.text=middle
|
||||
#add.report.list.dashboard.middle.text=middle
|
||||
#add.report.name=reportName
|
||||
#add.report.template=reportTemplate
|
||||
#add.report.type=reportType
|
||||
#add.report.class=reportClass
|
||||
#report.add.link=Add Report
|
||||
#
|
||||
#life.cycle.expand.id=lifecycleIconMinimized
|
||||
#life.cycle.add=Add Lifecycle
|
||||
#life.cycle.add.option=option0
|
||||
#life.cycle.add.option1=option1
|
||||
#life.cycle.add.option2=option2
|
||||
#life.cycle.promote=Promote
|
||||
#life.cycle.publish=Publish
|
||||
#life.cycle.stage=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/table/tbody/tr/td[4]/div[14]/div[3]/div[2]/table/tbody/tr/td/div[2]/table/tbody/tr[2]/td
|
||||
#life.cycle.promote.ok.button=button[type="\button\"]
|
||||
#
|
||||
#webapp.list.xpath=.//*[@id='menu']/ul/li[7]/ul/li[2]/ul/li[1]/a
|
||||
#
|
||||
#webapp.list.page.middle=middle
|
||||
#webapp.add.xpath=//*[@id="menu"]/ul/li[5]/ul/li[2]/ul/li[3]/ul/li[1]/a
|
||||
#webapp.add.page.middle=middle
|
||||
#
|
||||
#endpoints.tab.id=//*[@id="menu"]/ul/li[5]/ul/li[4]/ul/li[4]/a
|
||||
#endpoints.page.middle=middle
|
||||
#
|
||||
#
|
||||
#bam.dashboard.tab.id=//*[@id="menu"]/ul/li[3]/ul/li/a
|
||||
#bam.dashboard.signin.xpath=//*[@id="wrap"]/div[2]/div/div/h1
|
@ -0,0 +1,266 @@
|
||||
<!--
|
||||
~ Copyright (c) 2015, 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.
|
||||
-->
|
||||
|
||||
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
|
||||
<parent>
|
||||
<groupId>org.wso2.iot</groupId>
|
||||
<artifactId>wso2iot-integration</artifactId>
|
||||
<version>1.0.0-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>tests-integration</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<name>WSO2 IoT Server Backend Integration Tests</name>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<inherited>false</inherited>
|
||||
<version>2.12.4</version>
|
||||
<configuration>
|
||||
<argLine>-Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m</argLine>
|
||||
<parallel>false</parallel>
|
||||
<suiteXmlFiles>
|
||||
<suiteXmlFile>src/test/resources/testng-server-mgt.xml</suiteXmlFile>
|
||||
<suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
|
||||
</suiteXmlFiles>
|
||||
|
||||
<systemProperties>
|
||||
<property>
|
||||
<name>maven.test.haltafterfailure</name>
|
||||
<value>false</value>
|
||||
</property>
|
||||
<property>
|
||||
<name>carbon.zip</name>
|
||||
<value>
|
||||
${basedir}/../../distribution/target/wso2iot-${carbon.iot.device.mgt.version}.zip
|
||||
</value>
|
||||
</property>
|
||||
<property>
|
||||
<name>framework.resource.location</name>
|
||||
<value>
|
||||
${basedir}/src/test/resources/
|
||||
</value>
|
||||
</property>
|
||||
<property>
|
||||
<name>usedefaultlisteners</name>
|
||||
<value>false</value>
|
||||
</property>
|
||||
<sec.verifier.dir>${basedir}/target/security-verifier/</sec.verifier.dir>
|
||||
<instr.file>${basedir}/src/test/resources/instrumentation.txt</instr.file>
|
||||
<filters.file>${basedir}/src/test/resources/filters.txt</filters.file>
|
||||
</systemProperties>
|
||||
<workingDirectory>${basedir}/target</workingDirectory>
|
||||
<testFailureIgnore>false</testFailureIgnore>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-dependency-plugin</artifactId>
|
||||
<executions>
|
||||
|
||||
|
||||
<execution>
|
||||
<id>copy-jacoco-dependencies</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>copy-dependencies</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${project.build.directory}/jacoco</outputDirectory>
|
||||
<includeTypes>jar</includeTypes>
|
||||
<includeArtifactIds>org.jacoco.agent</includeArtifactIds>
|
||||
</configuration>
|
||||
</execution>
|
||||
|
||||
|
||||
<execution>
|
||||
<id>copy-secVerifier</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>copy-dependencies</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${basedir}/target/security-verifier</outputDirectory>
|
||||
<includeTypes>aar</includeTypes>
|
||||
<includeArtifactIds>SecVerifier</includeArtifactIds>
|
||||
<stripVersion>true</stripVersion>
|
||||
</configuration>
|
||||
</execution>
|
||||
|
||||
<execution>
|
||||
<id>unpack-jks</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>unpack</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<artifactItems>
|
||||
<artifactItem>
|
||||
<groupId>org.wso2.iot</groupId>
|
||||
<artifactId>wso2iot</artifactId>
|
||||
<version>${carbon.iot.device.mgt.version}</version>
|
||||
<type>zip</type>
|
||||
<overWrite>true</overWrite>
|
||||
<outputDirectory>${basedir}/target/tobeCopied/</outputDirectory>
|
||||
<includes>**/*.jks</includes>
|
||||
</artifactItem>
|
||||
</artifactItems>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>2.4</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>test-jar</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-report-plugin</artifactId>
|
||||
<version>2.7.1</version>
|
||||
<configuration>
|
||||
<outputDirectory>${basedir}/target/report</outputDirectory>
|
||||
<outputName>registry-api-test</outputName>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>integration-test</phase>
|
||||
<goals>
|
||||
<goal>report-only</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
<plugin>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<version>2.6</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>copy-resources-jks</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>copy-resources</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${basedir}/src/test/resources/keystores/products
|
||||
</outputDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>
|
||||
${basedir}/target/tobeCopied/wso2iot-${carbon.iot.device.mgt.version}/repository/resources/security/
|
||||
</directory>
|
||||
<includes>
|
||||
<include>**/*.jks</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</resources>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>2.4</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>test-jar</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.automation</groupId>
|
||||
<artifactId>org.wso2.carbon.automation.engine</artifactId>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.automation</groupId>
|
||||
<artifactId>org.wso2.carbon.automation.extensions</artifactId>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.automation</groupId>
|
||||
<artifactId>org.wso2.carbon.automation.test.utils</artifactId>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.automationutils</groupId>
|
||||
<artifactId>org.wso2.carbon.integration.common.utils</artifactId>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.automationutils</groupId>
|
||||
<artifactId>org.wso2.carbon.integration.common.extensions</artifactId>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>org.wso2.carbon.device.mgt.core</artifactId>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>org.wso2.carbon.device.mgt.common</artifactId>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>org.wso2.carbon.policy.mgt.common</artifactId>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>org.wso2.carbon.policy.mgt.core</artifactId>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.devicemgt</groupId>
|
||||
<artifactId>org.wso2.carbon.certificate.mgt.core</artifactId>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
</project>
|
@ -0,0 +1,233 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
~ Copyright (c) 2015, 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.
|
||||
-->
|
||||
|
||||
<automation xmlns="automationSchema.xsd">
|
||||
<!-- ================================================= -->
|
||||
<!-- Parameters -->
|
||||
<!-- ================================================= -->
|
||||
<configurations>
|
||||
<!--
|
||||
Change this to edit wait time for test artifact deployment
|
||||
-->
|
||||
<deploymentDelay>60000</deploymentDelay>
|
||||
<!--
|
||||
Change this to product|platform/cloud to execute test on specific environment
|
||||
-->
|
||||
<executionEnvironment>standalone</executionEnvironment>
|
||||
<!--
|
||||
Change this to user/tenant to execute test with user mode or tenant mode
|
||||
-->
|
||||
<multiTenantMode>false</multiTenantMode>
|
||||
<!--
|
||||
Change this to true if you want to generate coverage statistics
|
||||
-->
|
||||
<coverage>false</coverage>
|
||||
<!--
|
||||
Change this to true if you want to enable framework dashboard
|
||||
-->
|
||||
<frameworkDashboard>false</frameworkDashboard>
|
||||
<!--
|
||||
Browser type with used by framework to execute UI test, supported types - chrome|firefox|opera|ie|htmlUnit
|
||||
-->
|
||||
</configurations>
|
||||
<tools>
|
||||
<selenium>
|
||||
<!-- Change to enable remote webDriver -->
|
||||
<!-- URL of remote webDriver server -->
|
||||
<remoteDriverUrl enable="true">http://10.100.2.51:4444/wd/hub/</remoteDriverUrl>
|
||||
|
||||
<!-- Type of the browser selenium tests are running" -->
|
||||
<browser>
|
||||
<browserType>firefox</browserType>
|
||||
<!-- path to webDriver executable - required only for chrome-->
|
||||
<webdriverPath enable="false">/home/test/name/webDriver</webdriverPath>
|
||||
</browser>
|
||||
</selenium>
|
||||
</tools>
|
||||
<!--
|
||||
Database configuration to be used for data service testing. DB configuration in dbs files will be replaced with
|
||||
below configuration at test run time
|
||||
-->
|
||||
<datasources>
|
||||
<datasource name="dataService">
|
||||
<url>jdbc:h2:testDB</url>
|
||||
<username>wso2carbon</username>
|
||||
<password>wso2carbon</password>
|
||||
<driverClassName>org.h2.Driver</driverClassName>
|
||||
</datasource>
|
||||
<datasource name="dataService1">
|
||||
<url>jdbc:h2:testDB</url>
|
||||
<username>wso2carbon</username>
|
||||
<password>wso2carbon</password>
|
||||
<driverClassName>org.h2.Driver</driverClassName>
|
||||
</datasource>
|
||||
</datasources>
|
||||
<security>
|
||||
<!--
|
||||
KeyStore which will be used for encrypting/decrypting passwords
|
||||
and other sensitive information.
|
||||
-->
|
||||
<keystore name="wso2">
|
||||
<!-- Keystore file location -->
|
||||
<fileName>keystores/products/wso2carbon.jks</fileName>
|
||||
<!-- Keystore type (JKS/PKCS12 etc.) -->
|
||||
<type>JKS</type>
|
||||
<!-- Keystore password -->
|
||||
<password>wso2carbon</password>
|
||||
<!-- Private Key alias -->
|
||||
<keyAlias>wso2carbon</keyAlias>
|
||||
<!-- Private Key password -->
|
||||
<keyPassword>wso2carbon</keyPassword>
|
||||
</keystore>
|
||||
<!--
|
||||
System wide trust-store which is used to maintain the certificates of all
|
||||
the trusted parties.
|
||||
-->
|
||||
<truststore name="wso2">
|
||||
<!-- trust-store file location -->
|
||||
<fileName>client-truststore.jks</fileName>
|
||||
<!-- trust-store type (JKS/PKCS12 etc.) -->
|
||||
<type>JKS</type>
|
||||
<!-- trust-store password -->
|
||||
<password>wso2carbon</password>
|
||||
</truststore>
|
||||
</security>
|
||||
<featureManagement>
|
||||
<p2Repositories>
|
||||
<repository name="localDefault">
|
||||
<repository repo-id="online-repository">https://wso2.org/repo</repository>
|
||||
<repository repo-id="file-repository">file:///home/krishantha/test</repository>
|
||||
</repository>
|
||||
</p2Repositories>
|
||||
</featureManagement>
|
||||
<!--
|
||||
System wide users who to be registered at the test initiation
|
||||
-->
|
||||
<userManagement>
|
||||
<superTenant>
|
||||
<tenant domain="carbon.super" key="superTenant">
|
||||
<admin>
|
||||
<user key="superAdmin">
|
||||
<userName>admin</userName>
|
||||
<password>admin</password>
|
||||
</user>
|
||||
</admin>
|
||||
<users>
|
||||
<user key="user1">
|
||||
<userName>testuser11</userName>
|
||||
<password>testuser11</password>
|
||||
</user>
|
||||
<user key="user2">
|
||||
<userName>testuser21</userName>
|
||||
<password>testuser21</password>
|
||||
</user>
|
||||
</users>
|
||||
</tenant>
|
||||
</superTenant>
|
||||
<tenants>
|
||||
<tenant domain="wso2.com" key="wso2">
|
||||
<admin>
|
||||
<user key="admin">
|
||||
<userName>admin</userName>
|
||||
<password>admin</password>
|
||||
</user>
|
||||
</admin>
|
||||
<users>
|
||||
<user key="user1">
|
||||
<userName>testuser11</userName>
|
||||
<password>testuser11</password>
|
||||
</user>
|
||||
<user key="user2">
|
||||
<userName>testuser21</userName>
|
||||
<password>testuser21</password>
|
||||
</user>
|
||||
</users>
|
||||
</tenant>
|
||||
</tenants>
|
||||
</userManagement>
|
||||
<!--
|
||||
This section will initiate the initial deployment of the platform required by
|
||||
the test suites.
|
||||
-->
|
||||
<platform>
|
||||
<!--
|
||||
cluster instance details to be used to platform test execution
|
||||
-->
|
||||
<productGroup name="MDM" clusteringEnabled="false" default="true">
|
||||
|
||||
<instance name="mdm" type="standalone" nonBlockingTransportEnabled="false">
|
||||
<hosts>
|
||||
<host type="default">localhost</host>
|
||||
</hosts>
|
||||
<ports>
|
||||
<port type="http">10863</port>
|
||||
<port type="https">10543</port>
|
||||
</ports>
|
||||
<properties>
|
||||
|
||||
</properties>
|
||||
</instance>
|
||||
</productGroup>
|
||||
</platform>
|
||||
|
||||
<listenerExtensions>
|
||||
|
||||
<!--<className>org.wso2.carbon.automation.extentions.servers.wso2server.Wso2ServerExtention</className>-->
|
||||
<platformExecutionManager>
|
||||
<extentionClasses>
|
||||
<class>
|
||||
<name>
|
||||
org.wso2.carbon.automation.extensions.servers.carbonserver.CarbonServerExtension
|
||||
</name>
|
||||
<parameter name="-DportOffset" value="1100"/>
|
||||
<!--<parameter name="cmdArg" value="debug 5005" />-->
|
||||
</class>
|
||||
<class>
|
||||
<name>
|
||||
org.wso2.carbon.integration.common.extensions.usermgt.UserPopulateExtension
|
||||
</name>
|
||||
</class>
|
||||
</extentionClasses>
|
||||
</platformExecutionManager>
|
||||
|
||||
|
||||
<PlatformSuiteManager>
|
||||
<extentionClasses>
|
||||
<!--<className>org.wso2.carbon.automation.extentions.servers.wso2server.Wso2ServerExtention</className>-->
|
||||
</extentionClasses>
|
||||
</PlatformSuiteManager>
|
||||
|
||||
<PlatformAnnotationTransferManager>
|
||||
<extentionClasses>
|
||||
<!--<className>org.wso2.carbon.automation.extentions.servers.wso2server.Wso2ServerExtention</className>-->
|
||||
</extentionClasses>
|
||||
</PlatformAnnotationTransferManager>
|
||||
|
||||
<PlatformTestManager>
|
||||
<extentionClasses>
|
||||
</extentionClasses>
|
||||
</PlatformTestManager>
|
||||
|
||||
<PlatformReportManager>
|
||||
<extentionClasses>
|
||||
</extentionClasses>
|
||||
</PlatformReportManager>
|
||||
|
||||
</listenerExtensions>
|
||||
</automation>
|
@ -0,0 +1,23 @@
|
||||
-org.wso2.carbon.caching.core.identity.*
|
||||
-org.wso2.carbon.caching.core.permissiontree.*
|
||||
-org.wso2.carbon.caching.infinispan.*
|
||||
-org.wso2.carbon.event.core.internal.delivery.jms.*
|
||||
-org.wso2.carbon.event.core.qpid.*
|
||||
-org.wso2.carbon.registry.synchronization.*
|
||||
-*.stub*
|
||||
-*.stub_
|
||||
-*.stub_4.0.0
|
||||
-*.stub-
|
||||
-org.eclipse.*
|
||||
-*.equinox.*
|
||||
-org.wso2.carbon.user.core.*
|
||||
-samples.*
|
||||
-*.log4j*
|
||||
-*.axis2*
|
||||
-*.ui*
|
||||
-*.tenant*
|
||||
-*.stratos*
|
||||
-*.eventing*
|
||||
-*tests-transports*
|
||||
-org.wso2.carbon.mediation.statistics*
|
||||
-*startup*
|
@ -0,0 +1,41 @@
|
||||
org.wso2.carbon.caching.core_
|
||||
org.wso2.carbon.discovery.core_
|
||||
org.wso2.carbon.discovery.proxy_
|
||||
org.wso2.carbon.email.verification_
|
||||
org.wso2.carbon.event.core_
|
||||
org.wso2.carbon.governance.custom.lifecycles.checklist_
|
||||
org.wso2.carbon.governance.gadgets.impactanalysis_
|
||||
org.wso2.carbon.governance.gadgetsource_
|
||||
org.wso2.carbon.governance.gadgets.resourceimpact_
|
||||
org.wso2.carbon.governance.generic_
|
||||
org.wso2.carbon.governance.lcm_
|
||||
org.wso2.carbon.governance.list_
|
||||
org.wso2.carbon.governance.platform.extensions_
|
||||
org.wso2.carbon.governance.registry.eventing_
|
||||
org.wso2.carbon.governance.registry.extensions_
|
||||
org.wso2.carbon.governance.services_
|
||||
org.wso2.carbon.identity.user.profile_
|
||||
org.wso2.carbon.mashup.javascript.hostobjects.registry_
|
||||
org.wso2.carbon.registry.activities_
|
||||
org.wso2.carbon.registry.common_
|
||||
org.wso2.carbon.registry.core_
|
||||
org.wso2.carbon.registry.eventing_
|
||||
org.wso2.carbon.registry.extensions_
|
||||
org.wso2.carbon.registry.handler_
|
||||
org.wso2.carbon.registry.indexing_
|
||||
org.wso2.carbon.registry.info_
|
||||
org.wso2.carbon.registry.profiles_
|
||||
org.wso2.carbon.registry.properties_
|
||||
org.wso2.carbon.registry.relations_
|
||||
org.wso2.carbon.registry.reporting_
|
||||
org.wso2.carbon.registry.resource_
|
||||
org.wso2.carbon.registry.search_
|
||||
org.wso2.carbon.registry.server_
|
||||
org.wso2.carbon.registry.servlet_
|
||||
org.wso2.carbon.registry.task_
|
||||
org.wso2.carbon.registry.uddi_
|
||||
org.wso2.carbon.registry.webdav_
|
||||
org.wso2.carbon.registry.ws.api_
|
||||
org.wso2.carbon.reporting.api_
|
||||
org.wso2.carbon.reporting.core_
|
||||
org.wso2.carbon.reporting.util_
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,45 @@
|
||||
#
|
||||
# Copyright (c) 2015, 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.
|
||||
#
|
||||
|
||||
#
|
||||
# This is the log4j configuration file used by WSO2 Carbon
|
||||
#
|
||||
# IMPORTANT : Please do not remove or change the names of any
|
||||
# of the Appenders defined here. The layout pattern & log file
|
||||
# can be changed using the WSO2 Carbon Management Console, and those
|
||||
# settings will override the settings in this file.
|
||||
#
|
||||
|
||||
log4j.rootLogger=INFO, console, Default
|
||||
|
||||
log4j.logger.org.wso2=INFO
|
||||
log4j.logger.org.apache.axis2.deployment.ModuleDeployer=ERROR
|
||||
#Automation file apender
|
||||
log4j.appender.Default=org.apache.log4j.RollingFileAppender
|
||||
log4j.appender.Default.File=logs/automation.log
|
||||
log4j.appender.Default.Append=true
|
||||
log4j.appender.Default.MaxFileSize=10MB
|
||||
log4j.appender.Default.MaxBackupIndex=10
|
||||
log4j.appender.Default.layout=org.apache.log4j.PatternLayout
|
||||
log4j.appender.Default.layout.ConversionPattern=%d{ISO8601} %-5p [%c] - %m%n
|
||||
|
||||
|
||||
#Automation console apender
|
||||
log4j.appender.console=org.apache.log4j.ConsoleAppender
|
||||
log4j.appender.console.layout=org.apache.log4j.PatternLayout
|
||||
log4j.appender.console.layout.ConversionPattern=%-5p [%c] - %m%n
|
@ -0,0 +1,23 @@
|
||||
<!--
|
||||
~ Copyright (c) 2015, 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.
|
||||
-->
|
||||
|
||||
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
|
||||
|
||||
<suite name="mdm-suite">
|
||||
|
||||
</suite>
|
@ -0,0 +1,112 @@
|
||||
<!--
|
||||
~ Copyright (c) 2015, 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.
|
||||
-->
|
||||
|
||||
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
|
||||
|
||||
<suite name="mdm-suite-initializer">
|
||||
<parameter name="useDefaultListeners" value="false"/>
|
||||
<listeners>
|
||||
<listener
|
||||
class-name="org.wso2.carbon.automation.engine.testlisteners.TestExecutionListener"/>
|
||||
<listener class-name="org.wso2.carbon.automation.engine.testlisteners.TestManagerListener"/>
|
||||
<listener class-name="org.wso2.carbon.automation.engine.testlisteners.TestReportListener"/>
|
||||
<listener class-name="org.wso2.carbon.automation.engine.testlisteners.TestSuiteListener"/>
|
||||
<listener
|
||||
class-name="org.wso2.carbon.automation.engine.testlisteners.TestTransformerListener"/>
|
||||
</listeners>
|
||||
<test name="mobile-device-mgt-no-devices" preserve-order="true" parallel="false">
|
||||
<classes>
|
||||
<class name="org.wso2.mdm.integration.mobileDevice.MobileDeviceManagementWithNoDevices"/>
|
||||
</classes>
|
||||
</test>
|
||||
<test name="android-enrollment" preserve-order="true" parallel="false">
|
||||
<classes>
|
||||
<class name="org.wso2.mdm.integration.device.enrollment.AndroidEnrollment"/>
|
||||
</classes>
|
||||
</test>
|
||||
<test name="android-operation" preserve-order="false" parallel="true">
|
||||
<classes>
|
||||
<class name="org.wso2.mdm.integration.device.operation.AndroidOperation"/>
|
||||
</classes>
|
||||
</test>
|
||||
<test name="windows-enrollment" preserve-order="true" parallel="false">
|
||||
<classes>
|
||||
<class name="org.wso2.mdm.integration.device.enrollment.WindowsEnrollment"/>
|
||||
</classes>
|
||||
</test>
|
||||
<test name="android-device-mgt" preserve-order="false" parallel="true">
|
||||
<classes>
|
||||
<class name="org.wso2.mdm.integration.device.mgt.AndroidDeviceManagement"/>
|
||||
</classes>
|
||||
</test>
|
||||
<test name="android-configuration" preserve-order="true" parallel="false">
|
||||
<classes>
|
||||
<class name="org.wso2.mdm.integration.device.configuration.AndroidConfigurationManagement"/>
|
||||
</classes>
|
||||
</test>
|
||||
<test name="android-policy" preserve-order="true" parallel="false">
|
||||
<classes>
|
||||
<class name="org.wso2.mdm.integration.device.policy.AndroidPolicy"/>
|
||||
</classes>
|
||||
</test>
|
||||
<test name="operation-mgt" preserve-order="true" parallel="false">
|
||||
<classes>
|
||||
<class name="org.wso2.mdm.integration.operation.OperationManagement"/>
|
||||
</classes>
|
||||
</test>
|
||||
<test name="mobile-device-mgt" preserve-order="true" parallel="false">
|
||||
<classes>
|
||||
<class name="org.wso2.mdm.integration.mobileDevice.MobileDeviceManagement"/>
|
||||
</classes>
|
||||
</test>
|
||||
<test name="user-mgt" preserve-order="true" parallel="false">
|
||||
<classes>
|
||||
<class name="org.wso2.mdm.integration.user.UserManagement"/>
|
||||
</classes>
|
||||
</test>
|
||||
<test name="role-mgt" preserve-order="true" parallel="false">
|
||||
<classes>
|
||||
<class name="org.wso2.mdm.integration.role.RoleManagement"/>
|
||||
</classes>
|
||||
</test>
|
||||
<test name="policy-mgt" preserve-order="true" parallel="false">
|
||||
<classes>
|
||||
<class name="org.wso2.mdm.integration.policy.PolicyManagement"/>
|
||||
</classes>
|
||||
</test>
|
||||
<test name="feature-mgt" preserve-order="true" parallel="false">
|
||||
<classes>
|
||||
<class name="org.wso2.mdm.integration.feature.FeatureManagement"/>
|
||||
</classes>
|
||||
</test>
|
||||
<test name="license-mgt" preserve-order="true" parallel="false">
|
||||
<classes>
|
||||
<class name="org.wso2.mdm.integration.license.LicenseManagement"/>
|
||||
</classes>
|
||||
</test>
|
||||
<test name="configuration-mgt" preserve-order="true" parallel="false">
|
||||
<classes>
|
||||
<class name="org.wso2.mdm.integration.configuration.ConfigurationManagement"/>
|
||||
</classes>
|
||||
</test>
|
||||
<test name="notification-mgt" preserve-order="true" parallel="false">
|
||||
<classes>
|
||||
<class name="org.wso2.mdm.integration.notification.NotificationManagement"/>
|
||||
</classes>
|
||||
</test>
|
||||
</suite>
|
@ -1,41 +1,11 @@
|
||||
org.wso2.carbon.caching.core_
|
||||
org.wso2.carbon.discovery.core_
|
||||
org.wso2.carbon.discovery.proxy_
|
||||
org.wso2.carbon.email.verification_
|
||||
org.wso2.carbon.event.core_
|
||||
org.wso2.carbon.governance.custom.lifecycles.checklist_
|
||||
org.wso2.carbon.governance.gadgets.impactanalysis_
|
||||
org.wso2.carbon.governance.gadgetsource_
|
||||
org.wso2.carbon.governance.gadgets.resourceimpact_
|
||||
org.wso2.carbon.governance.generic_
|
||||
org.wso2.carbon.governance.lcm_
|
||||
org.wso2.carbon.governance.list_
|
||||
org.wso2.carbon.governance.platform.extensions_
|
||||
org.wso2.carbon.governance.registry.eventing_
|
||||
org.wso2.carbon.governance.registry.extensions_
|
||||
org.wso2.carbon.governance.services_
|
||||
org.wso2.carbon.identity.user.profile_
|
||||
org.wso2.carbon.mashup.javascript.hostobjects.registry_
|
||||
org.wso2.carbon.registry.activities_
|
||||
org.wso2.carbon.registry.common_
|
||||
org.wso2.carbon.registry.core_
|
||||
org.wso2.carbon.registry.eventing_
|
||||
org.wso2.carbon.registry.extensions_
|
||||
org.wso2.carbon.registry.handler_
|
||||
org.wso2.carbon.registry.indexing_
|
||||
org.wso2.carbon.registry.info_
|
||||
org.wso2.carbon.registry.profiles_
|
||||
org.wso2.carbon.registry.properties_
|
||||
org.wso2.carbon.registry.relations_
|
||||
org.wso2.carbon.registry.reporting_
|
||||
org.wso2.carbon.registry.resource_
|
||||
org.wso2.carbon.registry.search_
|
||||
org.wso2.carbon.registry.server_
|
||||
org.wso2.carbon.registry.servlet_
|
||||
org.wso2.carbon.registry.task_
|
||||
org.wso2.carbon.registry.uddi_
|
||||
org.wso2.carbon.registry.webdav_
|
||||
org.wso2.carbon.registry.ws.api_
|
||||
org.wso2.carbon.reporting.api_
|
||||
org.wso2.carbon.reporting.core_
|
||||
org.wso2.carbon.reporting.util_
|
||||
org.wso2.carbon.datasource_
|
||||
org.wso2.carbon.dataservices.core_
|
||||
org.wso2.carbon.transaction.manager_
|
||||
org.wso2.carbon.dataservices.sql.driver_
|
||||
org.wso2.carbon.dataservices.task_
|
||||
org.wso2.carbon.ndatasource.common_
|
||||
org.wso2.carbon.ndatasource.core_
|
||||
org.wso2.carbon.ndatasource.rdbms_
|
||||
org.wso2.carbon.ntask.common_
|
||||
org.wso2.carbon.ntask.core_
|
||||
org.wso2.carbon.ntask.solutions_
|
||||
|
@ -0,0 +1,271 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
~ Copyright (c) 2014, 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.
|
||||
-->
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<groupId>org.wso2.iot</groupId>
|
||||
<artifactId>wso2iot-integration</artifactId>
|
||||
<version>1.0.0-SNAPSHOT</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<name>WSO2 IoT Server - Integration Test UI Module</name>
|
||||
<artifactId>org.wso2.carbon.iot.integration.test.web.ui.integration</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<inherited>false</inherited>
|
||||
<configuration>
|
||||
<!--argLine>-Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m -Xdebug -Xnoagent
|
||||
-Djava.compiler=NONE
|
||||
-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
|
||||
</argLine-->
|
||||
<argLine>-Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m</argLine>
|
||||
|
||||
<suiteXmlFiles>
|
||||
<suiteXmlFile>src/test/resources/testng-server-mgt.xml</suiteXmlFile>
|
||||
<suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
|
||||
</suiteXmlFiles>
|
||||
|
||||
|
||||
<systemProperties>
|
||||
<skipTests>true</skipTests>
|
||||
<property>
|
||||
<name>maven.test.haltafterfailure</name>
|
||||
<value>false</value>
|
||||
</property>
|
||||
<property>
|
||||
<name>java.io.tmpdir</name>
|
||||
<value>${basedir}/target/</value>
|
||||
</property>
|
||||
<property>
|
||||
<name>carbon.zip</name>
|
||||
<value>
|
||||
${basedir}/../../distribution/target/wso2iots-${project.version}.zip
|
||||
</value>
|
||||
</property>
|
||||
<property>
|
||||
<name>framework.resource.location</name>
|
||||
<value>
|
||||
${basedir}/src/test/resources/
|
||||
</value>
|
||||
</property>
|
||||
<property>
|
||||
<name>server.list</name>
|
||||
<value>
|
||||
IOT
|
||||
</value>
|
||||
</property>
|
||||
<property>
|
||||
<name>usedefaultlisteners</name>
|
||||
<value>false</value>
|
||||
</property>
|
||||
<sec.verifier.dir>${basedir}/target/security-verifier/</sec.verifier.dir>
|
||||
<eiot.home>${basedir}/target/iot</eiot.home>
|
||||
<instr.file>${basedir}/src/test/resources/instrumentation.txt</instr.file>
|
||||
<filters.file>${basedir}/src/test/resources/filters.txt</filters.file>
|
||||
<iot.output>${basedir}/target/iot</iot.output>
|
||||
</systemProperties>
|
||||
<workingDirectory>${basedir}/target</workingDirectory>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-dependency-plugin</artifactId>
|
||||
<executions>
|
||||
|
||||
<execution>
|
||||
<id>copy-emma-dependencies</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>copy-dependencies</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${project.build.directory}/emma</outputDirectory>
|
||||
<includeTypes>jar</includeTypes>
|
||||
<includeArtifactIds>emma</includeArtifactIds>
|
||||
</configuration>
|
||||
</execution>
|
||||
|
||||
<execution>
|
||||
<id>copy-secVerifier</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>copy-dependencies</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${basedir}/target/security-verifier</outputDirectory>
|
||||
<includeTypes>aar</includeTypes>
|
||||
<includeArtifactIds>SecVerifier</includeArtifactIds>
|
||||
<stripVersion>true</stripVersion>
|
||||
</configuration>
|
||||
</execution>
|
||||
|
||||
<execution>
|
||||
<id>unpack-mar-jks</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>unpack</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<artifactItems>
|
||||
<artifactItem>
|
||||
<groupId>org.wso2.iot</groupId>
|
||||
<artifactId>wso2iots</artifactId>
|
||||
<version>${project.version}</version>
|
||||
<type>zip</type>
|
||||
<overWrite>true</overWrite>
|
||||
<outputDirectory>${basedir}/target/tobeCopied/</outputDirectory>
|
||||
<includes>**/*.jks,**/*.mar,**/axis2_client.xml</includes>
|
||||
</artifactItem>
|
||||
</artifactItems>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>2.4</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>test-jar</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-resources-plugin</artifactId>
|
||||
<version>2.6</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>copy-resources-jks</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>copy-resources</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${basedir}/src/test/resources/keystores/products
|
||||
</outputDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>
|
||||
${basedir}/target/tobeCopied/wso2iots-${project.version}/repository/resources/security/
|
||||
</directory>
|
||||
<includes>
|
||||
<include>**/*.jks</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</resources>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>copy-stratos-jks</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>copy-resources</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${basedir}/src/test/resources/keystores/stratos
|
||||
</outputDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>
|
||||
${basedir}/target/tobeCopied/wso2iots-${project.version}/repository/resources/security/
|
||||
</directory>
|
||||
<includes>
|
||||
<include>**/*.jks</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</resources>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>copy-axis2files</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>copy-resources</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${basedir}/src/test/resources/axis2config
|
||||
</outputDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>
|
||||
${basedir}/target/tobeCopied/wso2iots-${project.version}/repository/conf/axis2/
|
||||
</directory>
|
||||
<includes>
|
||||
<include>**/*.xml</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</resources>
|
||||
</configuration>
|
||||
</execution>
|
||||
<execution>
|
||||
<id>copy-resources-mar</id>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>copy-resources</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<outputDirectory>${basedir}/src/test/resources/client/modules
|
||||
</outputDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>
|
||||
${basedir}/target/tobeCopied/wso2iot-${project.version}/repository/deployment/client/modules
|
||||
</directory>
|
||||
<includes>
|
||||
<include>**/*.mar</include>
|
||||
</includes>
|
||||
</resource>
|
||||
</resources>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.wso2.iot</groupId>
|
||||
<artifactId>org.wso2.carbon.iot.integration.ui.pages</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.automation</groupId>
|
||||
<artifactId>org.wso2.carbon.automation.engine</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.automation</groupId>
|
||||
<artifactId>org.wso2.carbon.automation.test.utils</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.wso2.carbon.automationutils</groupId>
|
||||
<artifactId>org.wso2.carbon.integration.common.extensions</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
||||
</project>
|
@ -0,0 +1,122 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.common;
|
||||
|
||||
public class Constants {
|
||||
public static final String IOT_LOGIN_PATH = "/devicemgt/login";
|
||||
public static final String IOT_USER_REGISTER_URL = "/devicemgt/register";
|
||||
public static final String IOT_USER_ADD_URL = "/devicemgt/user/add";
|
||||
public static final String IOT_GROUP_ADD_URL = "/devicemgt/group/add";
|
||||
public static final String IOT_HOME_URL = "/devicemgt/";
|
||||
public static final String IOT_ENROLL_CONNECTED_CUP = "/device/connectedcup/enroll";
|
||||
public static final String IOT_DEVICES_URL = "/devicemgt/devices";
|
||||
public static final String IOT_CONNECTED_CUP_NAME = "testDevice";
|
||||
|
||||
public static final String GROUP_NAME_FIELD_ERROR = "Group Name is a required field. It cannot be empty.";
|
||||
public static final String GROUP_NAME = "group1";
|
||||
public static final String GROUP_DESCRIPTION = "This is a test group";
|
||||
|
||||
public static final String ALERT_NOT_PRESENT = "Alert is not present.";
|
||||
|
||||
public static final String CARBON_HOME = "carbon.home";
|
||||
|
||||
public static final String OS_NAME = "os.name";
|
||||
public static final String BUILD_SUCCESS_MSG = "BUILD SUCCESS";
|
||||
|
||||
public static final int IOT_RESTART_THREAD_TIMEOUT = 30;
|
||||
|
||||
public static final String IOT_GRAPH_X_AXIS = "x";
|
||||
public static final String IOT_GRAPH_Y_AXIS = "y";
|
||||
|
||||
public static class ConnectedCup {
|
||||
|
||||
public static final String COFFEE_LEVEl = "35";
|
||||
|
||||
public static final String TEMPERATURE = "53";
|
||||
public static final String COFFEE_LEVEL_ID = "Coffee Level";
|
||||
|
||||
public static final String COFFEE_LEVEL_LEGEND = "Coffee Level";
|
||||
public static final String COFFEE_LEVEL_GRAPH_ID = "coffeelevel";
|
||||
public static final String COFFEE_LEVEL_Y_AXIS = "Coffeelevel";
|
||||
public static final String COFFEE_LEVEL_X_AXIS = "time";
|
||||
public static final String TEMPERATURE_ID = "Temperature";
|
||||
|
||||
public static final String TEMPERATURE_LEGEND = "Temperature";
|
||||
public static final String TEMPERATURE_GRAPH_ID = "temperature";
|
||||
public static final String TEMPERATURE_Y_AXIS = "Temperature";
|
||||
public static final String TEMPERATURE_X_AXIS = "time";
|
||||
|
||||
}
|
||||
|
||||
public static class User {
|
||||
|
||||
public static class Login {
|
||||
|
||||
public static final String USER_NAME_ERROR = "Please enter a username";
|
||||
public static final String PASSWORD_ERROR = "Please provide a password";
|
||||
public static final String FAILED_ERROR = "Incorrect username or password.!";
|
||||
public static final String SHORT_PASSWORD_ERROR = "Your password must be at least 3 characters long";
|
||||
public static final String WRONG_USER_NAME = "admnnn";
|
||||
public static final String WRONG_USER_PASSWORD = "admmmm";
|
||||
public static final String SHORT_PASSWORD = "ad";
|
||||
public static final String PAGE_TITLE = "Login | IoT Server";
|
||||
|
||||
}
|
||||
|
||||
public static class Add {
|
||||
|
||||
public static final String FIRST_NAME = "User";
|
||||
public static final String LAST_NAME = "User";
|
||||
public static final String EMAIL = "user@wso2.com";
|
||||
public static final String EMAIL_ERROR = "user.com";
|
||||
public static final String USER_NAME = "user";
|
||||
public static final String SHORT_USER_NAME = "us";
|
||||
public static final String SHORT_USER_NAME_ERROR_MSG = "Username must be between 3 and 30 characters long.";
|
||||
public static final String FIRST_NAME_ERROR_MSG = "Firstname is a required field. It cannot be empty.";
|
||||
public static final String LAST_NAME_ERROR_MSG = "Lastname is a required field. It cannot be empty.";
|
||||
public static final String NO_EMAIL_ERROR_MSG = "Email is a required field. It cannot be empty.";
|
||||
public static final String WRONG_EMAIL_ERROR_MSG = "Provided email is invalid. Please check.";
|
||||
|
||||
}
|
||||
|
||||
public static class Register {
|
||||
|
||||
public static final String FIRST_NAME = "Firstname";
|
||||
public static final String LAST_NAME = "Lastname";
|
||||
public static final String USER_NAME = "testUser";
|
||||
public static final String PASSWORD = "testPassword";
|
||||
public static final String CONFIRM_PASSWORD = "testPassword";
|
||||
public static final String EMAIL = "userName@wso2.com";
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class TestSample {
|
||||
|
||||
public static final String SAMPLE_INSTALL = "iot.sample";
|
||||
public static final String INSTALL_VERIFY = "iot.sample.install";
|
||||
public static final String VERIFY = "iot.sample.install.verify";
|
||||
public static final String ENROLL = "iot.sample.enroll";
|
||||
public static final String ENROLL_VERIFY = "iot.sample.enroll.verify";
|
||||
public static final String TEMPERATURE = "iot.sample.temp";
|
||||
public static final String COFFEE_LEVEL = "iot.sample.level";
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.common;
|
||||
|
||||
import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException;
|
||||
import org.wso2.carbon.automation.engine.context.AutomationContext;
|
||||
import org.wso2.carbon.automation.engine.context.TestUserMode;
|
||||
import org.wso2.carbon.automation.test.utils.common.HomePageGenerator;
|
||||
import org.wso2.carbon.integration.common.admin.client.AuthenticatorClient;
|
||||
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
import javax.xml.xpath.XPathExpressionException;
|
||||
import java.io.IOException;
|
||||
import java.rmi.RemoteException;
|
||||
|
||||
|
||||
public class IOTIntegrationUIBaseTestCase {
|
||||
|
||||
protected AutomationContext automationContext;
|
||||
|
||||
protected void init() throws IOException, XMLStreamException, XPathExpressionException {
|
||||
automationContext = new AutomationContext("IOT", "iot001", TestUserMode.SUPER_TENANT_ADMIN);
|
||||
}
|
||||
|
||||
protected String getBackendURL() throws XPathExpressionException {
|
||||
return automationContext.getContextUrls().getBackEndUrl();
|
||||
}
|
||||
|
||||
protected String getWebAppURL() throws XPathExpressionException {
|
||||
return automationContext.getContextUrls().getWebAppURL();
|
||||
}
|
||||
|
||||
protected String getSessionCookie(AutomationContext context)
|
||||
throws RemoteException, XPathExpressionException, LoginAuthenticationExceptionException {
|
||||
AuthenticatorClient authenticationAdminClient = new AuthenticatorClient(context.getContextUrls().getBackEndUrl());
|
||||
return authenticationAdminClient.login(automationContext.getSuperTenant().
|
||||
getTenantAdmin().getUserName(), automationContext.getSuperTenant().
|
||||
getTenantAdmin().getPassword(),
|
||||
automationContext.getDefaultInstance().getHosts().get("default"));
|
||||
}
|
||||
|
||||
protected String getServiceURL() throws XPathExpressionException {
|
||||
String serviceURL = automationContext.getContextUrls().getServiceUrl();
|
||||
return automationContext.getContextUrls().getServiceUrl();
|
||||
}
|
||||
|
||||
protected String getLoginURL() throws XPathExpressionException {
|
||||
return HomePageGenerator.getProductHomeURL(automationContext);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.common;
|
||||
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.wso2.carbon.automation.engine.context.AutomationContext;
|
||||
import org.wso2.iot.integration.ui.pages.login.LoginPage;
|
||||
|
||||
import javax.xml.xpath.XPathExpressionException;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* This class is used to login to the server as the Admin.
|
||||
*/
|
||||
public class LoginUtils {
|
||||
|
||||
/**
|
||||
* This method is used to login as admin.
|
||||
*
|
||||
* @param driver The selenium web driver
|
||||
* @param automationContext Test Automation context
|
||||
* @param webAppURL The server url
|
||||
*/
|
||||
public static void login(WebDriver driver, AutomationContext automationContext,
|
||||
String webAppURL) throws IOException, XPathExpressionException {
|
||||
driver.get(webAppURL + Constants.IOT_LOGIN_PATH);
|
||||
LoginPage test = new LoginPage(driver);
|
||||
test.loginAsAdmin(automationContext.getSuperTenant().getTenantAdmin().getUserName(),
|
||||
automationContext.getSuperTenant().getTenantAdmin().getPassword());
|
||||
}
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.group;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.testng.annotations.AfterClass;
|
||||
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.Constants;
|
||||
import org.wso2.carbon.iot.integration.web.ui.test.common.LoginUtils;
|
||||
import org.wso2.carbon.iot.integration.web.ui.test.common.IOTIntegrationUIBaseTestCase;
|
||||
import org.wso2.iot.integration.ui.pages.groups.DeviceAddGroupPage;
|
||||
|
||||
/**
|
||||
* This class contains methods to test the failing scenarios of Group creation.
|
||||
* There can be groups with same name.
|
||||
* So the failing scenario is sending the form with empty group name.
|
||||
*/
|
||||
public class DeviceGroupFailTest extends IOTIntegrationUIBaseTestCase {
|
||||
|
||||
private WebDriver driver;
|
||||
|
||||
@BeforeClass(alwaysRun = true)
|
||||
public void setup() throws Exception {
|
||||
super.init();
|
||||
driver = BrowserManager.getWebDriver();
|
||||
LoginUtils.login(driver, automationContext, getWebAppURL());
|
||||
}
|
||||
|
||||
@Test(description = "Test for empty group name.")
|
||||
public void addNewGroupFailTest() throws Exception {
|
||||
driver.get(getWebAppURL() + Constants.IOT_GROUP_ADD_URL);
|
||||
DeviceAddGroupPage addGroupPage = new DeviceAddGroupPage(driver);
|
||||
|
||||
Assert.assertEquals(addGroupPage.submitEmptyForm(), Constants.GROUP_NAME_FIELD_ERROR);
|
||||
}
|
||||
|
||||
@AfterClass(alwaysRun = true)
|
||||
public void tearDown() throws Exception {
|
||||
driver.quit();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,70 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.group;
|
||||
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.AfterClass;
|
||||
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.Constants;
|
||||
import org.wso2.carbon.iot.integration.web.ui.test.common.LoginUtils;
|
||||
import org.wso2.carbon.iot.integration.web.ui.test.common.IOTIntegrationUIBaseTestCase;
|
||||
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.home.IOTAdminDashboard;
|
||||
|
||||
import javax.xml.xpath.XPathExpressionException;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Test cases for grouping feature of IOT server.
|
||||
*/
|
||||
public class DeviceGroupTest 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 device group.")
|
||||
public void addNewGroupTest() throws IOException {
|
||||
DeviceAddGroupPage addGroupPage = adminDashboard.addGroup();
|
||||
addGroupPage.addNewGroup(Constants.GROUP_NAME, Constants.GROUP_DESCRIPTION);
|
||||
}
|
||||
|
||||
@Test(description = "Check whether the created group exists", dependsOnMethods = {"addNewGroupTest"})
|
||||
public void isGroupCreatedTest() throws IOException, XPathExpressionException {
|
||||
driver.get(getWebAppURL() + Constants.IOT_HOME_URL);
|
||||
DeviceGroupsPage groupsPage = adminDashboard.viewGroups();
|
||||
Assert.assertTrue(groupsPage.isGroupCreated(Constants.GROUP_NAME));
|
||||
}
|
||||
|
||||
@AfterClass(alwaysRun = true)
|
||||
public void tearDown() throws Exception {
|
||||
driver.quit();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,139 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.login;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.AfterClass;
|
||||
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.Constants;
|
||||
import org.wso2.carbon.iot.integration.web.ui.test.common.IOTIntegrationUIBaseTestCase;
|
||||
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||
|
||||
|
||||
/**
|
||||
* Test cases to test the incorrect login from submissions.
|
||||
* Ex:
|
||||
* 1. Empty form
|
||||
* 2. Incorrect username or password
|
||||
* 3. short password
|
||||
*/
|
||||
public class LoginFormValidationTest extends IOTIntegrationUIBaseTestCase {
|
||||
|
||||
private WebDriver driver;
|
||||
private UIElementMapper uiElementMapper;
|
||||
|
||||
WebElement userNameField;
|
||||
WebElement passwordField;
|
||||
WebElement loginButton;
|
||||
|
||||
@BeforeClass(alwaysRun = true)
|
||||
public void setup() throws Exception {
|
||||
super.init();
|
||||
driver = BrowserManager.getWebDriver();
|
||||
clearForm();
|
||||
}
|
||||
|
||||
@Test(description = "Test for empty login form submission")
|
||||
public void emptyLoginFormTest() throws Exception {
|
||||
userNameField.sendKeys("");
|
||||
passwordField.sendKeys("");
|
||||
loginButton.click();
|
||||
|
||||
WebElement alertUserName = driver.findElement(By.id(
|
||||
uiElementMapper.getElement("iot.user.login.username.error")));
|
||||
WebElement alertPassword = driver.findElement(By.id(
|
||||
uiElementMapper.getElement("iot.user.login.password.error")));
|
||||
|
||||
if (!alertUserName.isDisplayed()) Assert.assertTrue(false, "Alert for user name is not present.");
|
||||
if (!alertPassword.isDisplayed()) Assert.assertTrue(false, "Alert for password is not present.");
|
||||
|
||||
Assert.assertEquals(alertUserName.getText(), Constants.User.Login.USER_NAME_ERROR);
|
||||
Assert.assertEquals(alertPassword.getText(), Constants.User.Login.PASSWORD_ERROR);
|
||||
|
||||
}
|
||||
|
||||
@Test(description = "Test for incorrect username")
|
||||
public void incorrectUserNameTest() throws Exception {
|
||||
clearForm();
|
||||
userNameField.sendKeys(Constants.User.Login.WRONG_USER_NAME);
|
||||
passwordField.sendKeys(automationContext.getSuperTenant().getTenantAdmin().getPassword());
|
||||
loginButton.click();
|
||||
|
||||
WebElement alert = driver.findElement(By.xpath(uiElementMapper.getElement("iot.user.login.incorrect.xpath")));
|
||||
if (alert.isDisplayed()) {
|
||||
Assert.assertEquals(alert.getText(), Constants.User.Login.FAILED_ERROR);
|
||||
} else {
|
||||
Assert.assertTrue(false, Constants.ALERT_NOT_PRESENT);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Test(description = "Test for incorrect password")
|
||||
public void incorrectPasswordTest() throws Exception {
|
||||
clearForm();
|
||||
userNameField.sendKeys(automationContext.getSuperTenant().getTenantAdmin().getPassword());
|
||||
passwordField.sendKeys(Constants.User.Login.WRONG_USER_PASSWORD);
|
||||
loginButton.click();
|
||||
|
||||
WebElement alert = driver.findElement(By.xpath(uiElementMapper.getElement("iot.user.login.incorrect.xpath")));
|
||||
if (alert.isDisplayed()) {
|
||||
Assert.assertEquals(alert.getText(), Constants.User.Login.FAILED_ERROR);
|
||||
} else {
|
||||
Assert.assertTrue(false, Constants.ALERT_NOT_PRESENT);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Test(description = "Test for short password")
|
||||
public void shortPasswordTest() throws Exception {
|
||||
clearForm();
|
||||
userNameField.sendKeys(automationContext.getSuperTenant().getTenantAdmin().getUserName());
|
||||
passwordField.sendKeys(Constants.User.Login.SHORT_PASSWORD);
|
||||
loginButton.click();
|
||||
|
||||
WebElement alert = driver.findElement(By.id(uiElementMapper.getElement("iot.user.login.password.error")));
|
||||
if (alert.isDisplayed()) {
|
||||
Assert.assertEquals(alert.getText(), Constants.User.Login.SHORT_PASSWORD_ERROR);
|
||||
} else {
|
||||
Assert.assertTrue(false, Constants.ALERT_NOT_PRESENT);
|
||||
}
|
||||
}
|
||||
|
||||
public void clearForm() throws Exception {
|
||||
driver.get(getWebAppURL() + Constants.IOT_LOGIN_PATH);
|
||||
uiElementMapper = UIElementMapper.getInstance();
|
||||
|
||||
userNameField = driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.user.login.input.username.xpath")));
|
||||
passwordField = driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.user.login.input.password.xpath")));
|
||||
loginButton = driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.user.login.button.xpath")));
|
||||
}
|
||||
|
||||
@AfterClass(alwaysRun = true)
|
||||
public void tearDown() throws Exception {
|
||||
driver.quit();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.login;
|
||||
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.testng.annotations.AfterClass;
|
||||
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.Constants;
|
||||
import org.wso2.carbon.iot.integration.web.ui.test.common.IOTIntegrationUIBaseTestCase;
|
||||
import org.wso2.iot.integration.ui.pages.home.IOTAdminDashboard;
|
||||
import org.wso2.iot.integration.ui.pages.login.LoginPage;
|
||||
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
import javax.xml.xpath.XPathExpressionException;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Test Login as Admin
|
||||
*/
|
||||
public class LoginTest extends IOTIntegrationUIBaseTestCase {
|
||||
|
||||
private WebDriver driver;
|
||||
|
||||
@BeforeClass(alwaysRun = true)
|
||||
public void setup() throws XPathExpressionException, XMLStreamException, IOException {
|
||||
super.init();
|
||||
driver = BrowserManager.getWebDriver();
|
||||
driver.get(getWebAppURL() + Constants.IOT_LOGIN_PATH);
|
||||
}
|
||||
|
||||
@Test(description = "Verify login to IOT server dashboard")
|
||||
public void testAdminLogin() throws IOException, XPathExpressionException {
|
||||
LoginPage loginPage = new LoginPage(driver);
|
||||
IOTAdminDashboard dashboard = loginPage.loginAsAdmin(
|
||||
automationContext.getSuperTenant().getTenantAdmin().getUserName(),
|
||||
automationContext.getSuperTenant().getTenantAdmin().getPassword());
|
||||
dashboard.logout();
|
||||
}
|
||||
|
||||
@AfterClass(alwaysRun = true)
|
||||
public void tearDown(){
|
||||
driver.quit();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,74 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.samples;
|
||||
|
||||
import junit.framework.Assert;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.testng.annotations.AfterClass;
|
||||
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.Constants;
|
||||
import org.wso2.carbon.iot.integration.web.ui.test.common.LoginUtils;
|
||||
import org.wso2.carbon.iot.integration.web.ui.test.common.IOTIntegrationUIBaseTestCase;
|
||||
import org.wso2.iot.integration.ui.pages.devices.EnrollDevicePage;
|
||||
import org.wso2.iot.integration.ui.pages.home.IOTAdminDashboard;
|
||||
import org.wso2.iot.integration.ui.pages.samples.ConnectedCupDeviceTypeViewPage;
|
||||
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
import javax.xml.xpath.XPathExpressionException;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Test cases to verify the enrolment process.
|
||||
*/
|
||||
public class SampleEnrollmentTest extends IOTIntegrationUIBaseTestCase {
|
||||
|
||||
private WebDriver driver;
|
||||
private ConnectedCupDeviceTypeViewPage connectedCupDeviceTypeViewPage;
|
||||
|
||||
@BeforeClass(alwaysRun = true)
|
||||
public void setup() throws XPathExpressionException, XMLStreamException, IOException {
|
||||
super.init();
|
||||
driver = BrowserManager.getWebDriver();
|
||||
LoginUtils.login(driver, automationContext, getWebAppURL());
|
||||
IOTAdminDashboard adminDashboard = new IOTAdminDashboard(driver);
|
||||
EnrollDevicePage enrollDevicePage = adminDashboard.enrollNewDevice();
|
||||
connectedCupDeviceTypeViewPage = enrollDevicePage.gotoConnectedCupDeviceTypeViewPage();
|
||||
}
|
||||
|
||||
@Test(description = "Verify the pop up modal is displayed.",
|
||||
groups = Constants.TestSample.ENROLL,
|
||||
dependsOnGroups = Constants.TestSample.INSTALL_VERIFY)
|
||||
public void enrollDevicePopUpModalTest() throws InterruptedException, IOException {
|
||||
Assert.assertTrue(connectedCupDeviceTypeViewPage.isPopUpPresent());
|
||||
}
|
||||
|
||||
@Test(description = "Test case for device enrolment",
|
||||
groups = Constants.TestSample.ENROLL,
|
||||
dependsOnMethods = {"enrollDevicePopUpModalTest"})
|
||||
public void enrollDeviceTest() throws InterruptedException {
|
||||
Assert.assertTrue(connectedCupDeviceTypeViewPage.enrollDevice(Constants.IOT_CONNECTED_CUP_NAME));
|
||||
}
|
||||
|
||||
@AfterClass(alwaysRun = true)
|
||||
public void tearDown() {
|
||||
driver.quit();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,82 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.samples;
|
||||
|
||||
import junit.framework.Assert;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.testng.annotations.AfterClass;
|
||||
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.Constants;
|
||||
import org.wso2.carbon.iot.integration.web.ui.test.common.LoginUtils;
|
||||
import org.wso2.carbon.iot.integration.web.ui.test.common.IOTIntegrationUIBaseTestCase;
|
||||
import org.wso2.iot.integration.ui.pages.devices.DevicesPage;
|
||||
import org.wso2.iot.integration.ui.pages.samples.ConnectedCupDeviceViewPage;
|
||||
import org.wso2.iot.integration.ui.pages.samples.ConnectedCupDeviceInterface;
|
||||
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
import javax.xml.xpath.XPathExpressionException;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Test cases to check whether the sample is enrolled correctly.
|
||||
*/
|
||||
public class SampleEnrolmentVerificationTest extends IOTIntegrationUIBaseTestCase {
|
||||
|
||||
private WebDriver webDriver;
|
||||
private DevicesPage devicesPage;
|
||||
private ConnectedCupDeviceViewPage connectedCupDeviceViewPage;
|
||||
|
||||
@BeforeClass(alwaysRun = true)
|
||||
public void setUp() throws XPathExpressionException, XMLStreamException, IOException {
|
||||
super.init();
|
||||
webDriver = BrowserManager.getWebDriver();
|
||||
LoginUtils.login(webDriver, automationContext, getWebAppURL());
|
||||
webDriver.get(getWebAppURL() + Constants.IOT_DEVICES_URL);
|
||||
devicesPage = new DevicesPage(webDriver);
|
||||
}
|
||||
|
||||
@Test(description = "Verify enrolment of the sample device",
|
||||
groups = Constants.TestSample.ENROLL_VERIFY,
|
||||
dependsOnGroups = Constants.TestSample.ENROLL)
|
||||
public void verifyEnrollmentTest() {
|
||||
Assert.assertTrue(devicesPage.isDeviceEnrolled(Constants.IOT_CONNECTED_CUP_NAME));
|
||||
}
|
||||
|
||||
@Test(description = "Verify navigation to device view",
|
||||
dependsOnMethods = "verifyEnrollmentTest",
|
||||
groups = Constants.TestSample.ENROLL_VERIFY)
|
||||
public void verifyNavigationTest() throws IOException {
|
||||
connectedCupDeviceViewPage = devicesPage.viewDevice(Constants.IOT_CONNECTED_CUP_NAME);
|
||||
Assert.assertNotNull(connectedCupDeviceViewPage);
|
||||
}
|
||||
|
||||
@Test(description = "Verify sample functions",
|
||||
dependsOnMethods = {"verifyNavigationTest"})
|
||||
public void sampleStartUpTest() throws IOException {
|
||||
ConnectedCupDeviceInterface sampleViewPage = connectedCupDeviceViewPage.gotoDevice();
|
||||
Assert.assertNotNull(sampleViewPage);
|
||||
}
|
||||
|
||||
@AfterClass(alwaysRun = true)
|
||||
public void tearDown() {
|
||||
webDriver.quit();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,193 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.samples;
|
||||
|
||||
import junit.framework.Assert;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.testng.annotations.AfterClass;
|
||||
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.Constants;
|
||||
import org.wso2.carbon.iot.integration.web.ui.test.common.LoginUtils;
|
||||
import org.wso2.carbon.iot.integration.web.ui.test.common.IOTIntegrationUIBaseTestCase;
|
||||
import org.wso2.iot.integration.ui.pages.devices.DevicesPage;
|
||||
import org.wso2.iot.integration.ui.pages.samples.ConnectedCupDeviceViewPage;
|
||||
import org.wso2.iot.integration.ui.pages.samples.ConnectedCupDeviceInterface;
|
||||
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
import javax.xml.xpath.XPathExpressionException;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Test cases for test the functionality of the connected cup sample.
|
||||
* In these test cases following features are tested.
|
||||
* 1. Setting temperature and Coffee level
|
||||
* 2. Order coffee
|
||||
* 3. Test the stat graphs
|
||||
*/
|
||||
public class SampleFunctionalityTest extends IOTIntegrationUIBaseTestCase {
|
||||
|
||||
private WebDriver driverDevice;
|
||||
private WebDriver driverServer;
|
||||
private ConnectedCupDeviceInterface sampleViewPage;
|
||||
private ConnectedCupDeviceViewPage deviceViewPage;
|
||||
|
||||
@BeforeClass(alwaysRun = true)
|
||||
public void setUp() throws XPathExpressionException, XMLStreamException, IOException {
|
||||
super.init();
|
||||
driverDevice = BrowserManager.getWebDriver();
|
||||
driverServer = BrowserManager.getWebDriver();
|
||||
LoginUtils.login(driverServer, automationContext, getWebAppURL());
|
||||
driverServer.get(getWebAppURL() + Constants.IOT_DEVICES_URL);
|
||||
DevicesPage devicesPage = new DevicesPage(driverServer);
|
||||
deviceViewPage = devicesPage.viewDevice(Constants.IOT_CONNECTED_CUP_NAME);
|
||||
|
||||
//Opens the connected cup device interface in the browser.
|
||||
driverDevice.get(deviceViewPage.getDeviceLink());
|
||||
sampleViewPage = new ConnectedCupDeviceInterface(driverDevice);
|
||||
}
|
||||
|
||||
@Test(description = "Set the temperature level.",
|
||||
groups = Constants.TestSample.VERIFY,
|
||||
dependsOnGroups = Constants.TestSample.ENROLL_VERIFY)
|
||||
public void setTemperatureTest() {
|
||||
Assert.assertTrue(sampleViewPage.changeTemperature(Constants.ConnectedCup.TEMPERATURE));
|
||||
}
|
||||
|
||||
@Test(description = "Set the coffee level.",
|
||||
groups = Constants.TestSample.VERIFY,
|
||||
dependsOnGroups = Constants.TestSample.ENROLL_VERIFY)
|
||||
public void setCoffeeLevelTest() throws IOException {
|
||||
Assert.assertTrue(sampleViewPage.changeCoffeeLevel(Constants.ConnectedCup.COFFEE_LEVEl));
|
||||
}
|
||||
|
||||
@Test(description = "Verify order coffee function.",
|
||||
groups = Constants.TestSample.VERIFY,
|
||||
dependsOnGroups = Constants.TestSample.ENROLL_VERIFY)
|
||||
public void orderCoffeeTest() throws IOException, InterruptedException {
|
||||
Assert.assertTrue(sampleViewPage.orderCoffee());
|
||||
}
|
||||
|
||||
@Test(description = "Test the graphs are present in device view.",
|
||||
groups = Constants.TestSample.VERIFY,
|
||||
dependsOnMethods = {"setTemperatureTest", "setCoffeeLevelTest", "orderCoffeeTest"})
|
||||
public void verifyGraphs() throws IOException {
|
||||
Assert.assertTrue(deviceViewPage.isGraphsAvailable(2));
|
||||
}
|
||||
|
||||
@Test(description = "Test the Y axis name of Temperature graph.",
|
||||
groups = {Constants.TestSample.VERIFY,
|
||||
Constants.TestSample.TEMPERATURE},
|
||||
dependsOnGroups = Constants.TestSample.ENROLL_VERIFY,
|
||||
dependsOnMethods = {"verifyGraphs"})
|
||||
public void temperatureGraphYAxisNameTest() throws IOException {
|
||||
Assert.assertTrue(deviceViewPage.graphAxisName(Constants.IOT_GRAPH_Y_AXIS,
|
||||
Constants.ConnectedCup.TEMPERATURE_ID,
|
||||
Constants.ConnectedCup.TEMPERATURE_Y_AXIS));
|
||||
}
|
||||
|
||||
@Test(description = "Test the X axis name of Temperature graph.",
|
||||
groups = {Constants.TestSample.VERIFY,
|
||||
Constants.TestSample.TEMPERATURE},
|
||||
dependsOnGroups = Constants.TestSample.ENROLL_VERIFY,
|
||||
dependsOnMethods = {"verifyGraphs"})
|
||||
public void temperatureGraphXAxisNameTest() throws IOException {
|
||||
Assert.assertTrue(deviceViewPage.graphAxisName(Constants.IOT_GRAPH_X_AXIS,
|
||||
Constants.ConnectedCup.TEMPERATURE_ID,
|
||||
Constants.ConnectedCup.TEMPERATURE_X_AXIS));
|
||||
}
|
||||
|
||||
@Test(description = "Test the whether the Coffee Level graph legend is present.",
|
||||
groups = {Constants.TestSample.VERIFY,
|
||||
Constants.TestSample.TEMPERATURE},
|
||||
dependsOnGroups = Constants.TestSample.ENROLL_VERIFY,
|
||||
dependsOnMethods = {"verifyGraphs"})
|
||||
public void temperatureGraphLegendTest() {
|
||||
Assert.assertTrue(deviceViewPage.graphLegendName(Constants.ConnectedCup.TEMPERATURE_ID,
|
||||
Constants.ConnectedCup.TEMPERATURE_LEGEND));
|
||||
}
|
||||
|
||||
@Test(description = "Test the whether the Temperature graph path is visible.",
|
||||
groups = {Constants.TestSample.VERIFY,
|
||||
Constants.TestSample.TEMPERATURE},
|
||||
dependsOnGroups = Constants.TestSample.ENROLL_VERIFY,
|
||||
dependsOnMethods = {"verifyGraphs"})
|
||||
public void temperatureGraphPathTest() {
|
||||
Assert.assertTrue(deviceViewPage.checkGraphPath(Constants.ConnectedCup.TEMPERATURE_GRAPH_ID));
|
||||
}
|
||||
|
||||
@Test(description = "Test the whether the Temperature graph gets values.",
|
||||
groups = {Constants.TestSample.VERIFY,
|
||||
Constants.TestSample.TEMPERATURE},
|
||||
dependsOnGroups = Constants.TestSample.ENROLL_VERIFY,
|
||||
dependsOnMethods = {"verifyGraphs"})
|
||||
public void temperatureGraphDataPublisherTest() {
|
||||
Assert.assertTrue(deviceViewPage.checkGraphValues(Constants.ConnectedCup.TEMPERATURE_GRAPH_ID,
|
||||
Constants.ConnectedCup.TEMPERATURE));
|
||||
}
|
||||
|
||||
@Test(description = "Test the Y axis name of Coffee Level graph.",
|
||||
groups = Constants.TestSample.COFFEE_LEVEL,
|
||||
dependsOnGroups = Constants.TestSample.TEMPERATURE)
|
||||
public void coffeeLevelGraphYAxisNameTest() {
|
||||
Assert.assertTrue(deviceViewPage.graphAxisName(Constants.IOT_GRAPH_Y_AXIS,
|
||||
Constants.ConnectedCup .COFFEE_LEVEL_ID,
|
||||
Constants.ConnectedCup.COFFEE_LEVEL_Y_AXIS));
|
||||
}
|
||||
|
||||
@Test(description = "Test the X axis name of Coffee Level graph.",
|
||||
groups = Constants.TestSample.COFFEE_LEVEL,
|
||||
dependsOnGroups = {Constants.TestSample.ENROLL_VERIFY,
|
||||
Constants.TestSample.TEMPERATURE})
|
||||
public void coffeeLevelGraphXAxisNameTest() {
|
||||
Assert.assertTrue(deviceViewPage.graphAxisName(Constants.IOT_GRAPH_X_AXIS,
|
||||
Constants.ConnectedCup.COFFEE_LEVEL_ID,
|
||||
Constants.ConnectedCup.COFFEE_LEVEL_X_AXIS));
|
||||
}
|
||||
|
||||
@Test(description = "Test the whether the Coffee Level graph legend is present.",
|
||||
groups = Constants.TestSample.COFFEE_LEVEL,
|
||||
dependsOnGroups = {Constants.TestSample.TEMPERATURE})
|
||||
public void coffeeLevelGraphLegendTest() throws IOException {
|
||||
Assert.assertTrue(deviceViewPage.graphLegendName(Constants.ConnectedCup.COFFEE_LEVEL_ID,
|
||||
Constants.ConnectedCup.COFFEE_LEVEL_LEGEND));
|
||||
}
|
||||
|
||||
@Test(description = "Test the whether the Coffee Level graph path is visible.",
|
||||
groups = Constants.TestSample.COFFEE_LEVEL,
|
||||
dependsOnGroups = {Constants.TestSample.TEMPERATURE})
|
||||
public void coffeeLevelGraphPathTest() {
|
||||
Assert.assertTrue(deviceViewPage.checkGraphPath(Constants.ConnectedCup.COFFEE_LEVEL_GRAPH_ID));
|
||||
}
|
||||
|
||||
@Test(description = "Test the whether the Coffee Level graph gets values.",
|
||||
groups = Constants.TestSample.COFFEE_LEVEL,
|
||||
dependsOnGroups = Constants.TestSample.TEMPERATURE)
|
||||
public void coffeeLevelGraphDataPublisherTest() {
|
||||
Assert.assertTrue(deviceViewPage.checkGraphValues(Constants.ConnectedCup.COFFEE_LEVEL_GRAPH_ID,
|
||||
Constants.ConnectedCup.COFFEE_LEVEl));
|
||||
}
|
||||
|
||||
@AfterClass(alwaysRun = true)
|
||||
public void tearDown() {
|
||||
driverServer.quit();
|
||||
driverDevice.quit();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,216 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.samples;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.AfterClass;
|
||||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.Test;
|
||||
import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException;
|
||||
import org.wso2.carbon.automation.engine.exceptions.AutomationFrameworkException;
|
||||
import org.wso2.carbon.integration.common.admin.client.LogViewerClient;
|
||||
import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException;
|
||||
import org.wso2.carbon.integration.common.utils.mgt.ServerConfigurationManager;
|
||||
import org.wso2.carbon.iot.integration.web.ui.test.common.Constants;
|
||||
import org.wso2.carbon.logging.view.stub.LogViewerLogViewerException;
|
||||
import org.wso2.carbon.logging.view.stub.types.carbon.LogEvent;
|
||||
import org.wso2.carbon.iot.integration.web.ui.test.common.IOTIntegrationUIBaseTestCase;
|
||||
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
import javax.xml.xpath.XPathExpressionException;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.net.MalformedURLException;
|
||||
import java.rmi.RemoteException;
|
||||
import java.util.Properties;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.TimeoutException;
|
||||
|
||||
/**
|
||||
* Test cases for building and installation of sample device types.
|
||||
* When installing a custom device type to the IOT server, developer has to create the device type as a feature and
|
||||
* put it in to the samples folder.
|
||||
* Then build the device type created with maven.
|
||||
* After that install the device type by running the device-deployer.xml.
|
||||
* Then the server has to be restarted, in order to activate newly installed device type.
|
||||
* <p>
|
||||
* In this test case, the build process of a new device type and installation to the server is tested.
|
||||
*/
|
||||
public class SampleInstallationTest extends IOTIntegrationUIBaseTestCase {
|
||||
private Log log = LogFactory.getLog(SampleInstallationTest.class);
|
||||
private Process tempProcess = null;
|
||||
private Properties properties = System.getProperties();
|
||||
private String carbonHome = properties.getProperty(Constants.CARBON_HOME);
|
||||
private String[] commands;
|
||||
private LogViewerClient logViewerClient;
|
||||
|
||||
@BeforeClass(alwaysRun = true)
|
||||
public void setup() throws XPathExpressionException, XMLStreamException, IOException, AutomationFrameworkException,
|
||||
LoginAuthenticationExceptionException {
|
||||
super.init();
|
||||
logViewerClient = new LogViewerClient(getBackendURL(), getSessionCookie(automationContext));
|
||||
}
|
||||
|
||||
@Test(description = "Verify the sample build process",
|
||||
groups = Constants.TestSample.SAMPLE_INSTALL)
|
||||
public void sampleBuildTest() throws IOException {
|
||||
String connectedCupDir = carbonHome + File.separator + "samples" + File.separator + "connectedcup";
|
||||
log.info("Connected cup Sample: " + connectedCupDir);
|
||||
File dir = new File(connectedCupDir);
|
||||
try {
|
||||
if (System.getProperty(Constants.OS_NAME).toLowerCase().contains("windows")) {
|
||||
log.info("Executing maven clean install --------------------------------");
|
||||
commands = new String[]{"cmd.exe", "/c", "mvn clean install"};
|
||||
tempProcess = Runtime.getRuntime().exec(commands, null, dir);
|
||||
} else {
|
||||
log.info("Executing maven clean install --------------------------------");
|
||||
commands = new String[]{"mvn", "clean", "install"};
|
||||
tempProcess = Runtime.getRuntime().exec(commands, null, dir);
|
||||
}
|
||||
|
||||
boolean buildStatus = waitForMessage(tempProcess.getInputStream(), Constants.BUILD_SUCCESS_MSG);
|
||||
Assert.assertTrue(buildStatus, "Building the sample was not successful");
|
||||
} finally {
|
||||
if (tempProcess != null) {
|
||||
tempProcess.destroy();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test(description = "Verify the sample installation process",
|
||||
groups = Constants.TestSample.SAMPLE_INSTALL,
|
||||
dependsOnMethods = {"sampleBuildTest"})
|
||||
public void sampleInstallationTest() throws IOException {
|
||||
|
||||
log.info("CARBON_HOME: " + System.getProperty(Constants.CARBON_HOME));
|
||||
File dir = new File(carbonHome);
|
||||
log.info("Sample installation started : mvn clean install -f device-deployer.xml");
|
||||
try {
|
||||
if (System.getProperty(Constants.OS_NAME).toLowerCase().contains("windows")) {
|
||||
commands = new String[]{"cmd.exe", "/c", "mvn clean install -f device-deployer.xml"};
|
||||
tempProcess = Runtime.getRuntime().exec(commands, null, dir);
|
||||
} else {
|
||||
commands = new String[]{"mvn", "clean", "install", "-f", "device-deployer.xml"};
|
||||
tempProcess = Runtime.getRuntime().exec(commands, null, dir);
|
||||
}
|
||||
boolean buildStatus = waitForMessage(tempProcess.getInputStream(), Constants.BUILD_SUCCESS_MSG);
|
||||
Assert.assertTrue(buildStatus, "Sample installation was not successful");
|
||||
} finally {
|
||||
if (tempProcess != null) {
|
||||
tempProcess.destroy();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test(description = "Test restarting the server",
|
||||
groups = Constants.TestSample.SAMPLE_INSTALL,
|
||||
dependsOnMethods = {"sampleInstallationTest"})
|
||||
public void serverRestartTest() {
|
||||
ServerConfigurationManager serverManager;
|
||||
try {
|
||||
serverManager = new ServerConfigurationManager(automationContext);
|
||||
log.info("Restart Triggered -------------------------------------------------------------------");
|
||||
serverManager.restartGracefully();
|
||||
logViewerClient.getAllRemoteSystemLogs();
|
||||
waitForRestart();
|
||||
} catch (AutomationUtilException | XPathExpressionException | MalformedURLException e) {
|
||||
log.error("Restart failed due to : " + e.getLocalizedMessage());
|
||||
} catch (RemoteException | LogViewerLogViewerException e) {
|
||||
log.error("Cannot get server log due to : " + e.getLocalizedMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@AfterClass(alwaysRun = true)
|
||||
public void tearDown() throws Exception {
|
||||
if (tempProcess != null) {
|
||||
tempProcess.destroy();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Wait for a given message to be printed in terminal. Used for processes.
|
||||
* @param inputStream : Input stream of the process
|
||||
* @param message : The message which is to be look for
|
||||
*/
|
||||
private boolean waitForMessage(InputStream inputStream, String message) throws IOException {
|
||||
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
|
||||
String line;
|
||||
boolean status = false;
|
||||
while ((line = br.readLine()) != null) {
|
||||
log.info(line);
|
||||
if (!status && line.contains(message)) {
|
||||
status = true;
|
||||
}
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Wait until the server restarts.
|
||||
* This method looks for "Mgt console URL:" to be appeared in the terminal.
|
||||
* If it does not appear within the given timeout an Exception will be thrown.
|
||||
*/
|
||||
private void waitForRestart() {
|
||||
ExecutorService service = Executors.newSingleThreadExecutor();
|
||||
try {
|
||||
Runnable r = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
LogEvent[] logEvents = logViewerClient.getAllRemoteSystemLogs();
|
||||
for (LogEvent event : logEvents) {
|
||||
log.info(event.getMessage() + " @ " + event.getLogTime());
|
||||
if (event.getMessage().contains("Mgt Console URL : " )){
|
||||
log.info("Server restarted successfully");
|
||||
Assert.assertTrue(true);
|
||||
}
|
||||
}
|
||||
} catch (RemoteException | LogViewerLogViewerException e) {
|
||||
log.error("Error reading logs. \n" + e.getMessage());
|
||||
Assert.assertTrue(false);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Future<?> f = service.submit(r);
|
||||
|
||||
f.get(Constants.IOT_RESTART_THREAD_TIMEOUT, TimeUnit.MINUTES);
|
||||
} catch (final InterruptedException e) {
|
||||
log.error("Interrupted "+e.getMessage());
|
||||
Assert.assertTrue(false);
|
||||
} catch (final TimeoutException e) {
|
||||
log.error("Timeout " + e.getMessage());
|
||||
Assert.assertTrue(false);
|
||||
} catch (final ExecutionException e) {
|
||||
log.error("Execution failed " + e.getMessage());
|
||||
Assert.assertTrue(false);
|
||||
} finally {
|
||||
service.shutdown();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.samples;
|
||||
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.AfterClass;
|
||||
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.Constants;
|
||||
import org.wso2.carbon.iot.integration.web.ui.test.common.LoginUtils;
|
||||
import org.wso2.carbon.iot.integration.web.ui.test.common.IOTIntegrationUIBaseTestCase;
|
||||
import org.wso2.iot.integration.ui.pages.devices.EnrollDevicePage;
|
||||
import org.wso2.iot.integration.ui.pages.home.IOTAdminDashboard;
|
||||
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
import javax.xml.xpath.XPathExpressionException;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Test cases to verify the sample installation is successful and device type is installed correctly.
|
||||
*/
|
||||
public class SampleInstallationVerification extends IOTIntegrationUIBaseTestCase {
|
||||
|
||||
private WebDriver driver;
|
||||
private IOTAdminDashboard adminDashboard;
|
||||
|
||||
@BeforeClass(alwaysRun = true)
|
||||
public void setup() throws XPathExpressionException, XMLStreamException, IOException {
|
||||
super.init();
|
||||
driver = BrowserManager.getWebDriver();
|
||||
LoginUtils.login(driver, automationContext, getWebAppURL());
|
||||
adminDashboard = new IOTAdminDashboard(driver);
|
||||
}
|
||||
|
||||
@Test(description = "Verify the sample is available in Virtual devices section.",
|
||||
groups = Constants.TestSample.INSTALL_VERIFY,
|
||||
dependsOnGroups = Constants.TestSample.SAMPLE_INSTALL)
|
||||
public void installationVerificationTest() throws IOException {
|
||||
EnrollDevicePage enrollDevicePage = adminDashboard.enrollNewDevice();
|
||||
Assert.assertTrue(enrollDevicePage.isInstalled());
|
||||
}
|
||||
|
||||
@AfterClass(alwaysRun = true)
|
||||
public void teardown() {
|
||||
driver.quit();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,210 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.user;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.AfterClass;
|
||||
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.Constants;
|
||||
import org.wso2.carbon.iot.integration.web.ui.test.common.LoginUtils;
|
||||
import org.wso2.carbon.iot.integration.web.ui.test.common.IOTIntegrationUIBaseTestCase;
|
||||
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
import javax.xml.xpath.XPathExpressionException;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Class contains test cases for Add user form validation.
|
||||
* 1. Empty form submission
|
||||
* 2. Short user name
|
||||
* 3. Empty First Name
|
||||
* 4. Empty Last Name
|
||||
* 5. Empty email
|
||||
* 6. Incorrect email
|
||||
*/
|
||||
public class AddUserFormValidationTest extends IOTIntegrationUIBaseTestCase {
|
||||
|
||||
private WebDriver driver;
|
||||
private UIElementMapper uiElementMapper;
|
||||
private WebElement firstNameField;
|
||||
private WebElement lastNameField;
|
||||
private WebElement emailField;
|
||||
private WebElement userNameField;
|
||||
private WebElement addUserButton;
|
||||
|
||||
@BeforeClass(alwaysRun = true)
|
||||
public void setup() throws XPathExpressionException, XMLStreamException, IOException {
|
||||
super.init();
|
||||
driver = BrowserManager.getWebDriver();
|
||||
LoginUtils.login(driver, automationContext, getWebAppURL());
|
||||
driver.get(getWebAppURL() + Constants.IOT_USER_ADD_URL);
|
||||
uiElementMapper = UIElementMapper.getInstance();
|
||||
|
||||
userNameField = driver.findElement(By.id(uiElementMapper.getElement("iot.admin.addUser.username.id")));
|
||||
firstNameField = driver.findElement(By.id(uiElementMapper.getElement("iot.admin.addUser.firstName.id")));
|
||||
lastNameField = driver.findElement(By.id(uiElementMapper.getElement("iot.admin.addUser.lastName.id")));
|
||||
emailField = driver.findElement(By.id(uiElementMapper.getElement("iot.admin.addUser.email.id")));
|
||||
|
||||
addUserButton = driver.findElement(By.xpath(uiElementMapper.getElement("iot.admin.addUser.add.btn.xpath")));
|
||||
}
|
||||
|
||||
@Test(description = "Test for empty form submission")
|
||||
public void emptyFormTest() {
|
||||
clearForm();
|
||||
|
||||
firstNameField.sendKeys("");
|
||||
lastNameField.sendKeys("");
|
||||
emailField.sendKeys("");
|
||||
userNameField.sendKeys("");
|
||||
|
||||
addUserButton.click();
|
||||
|
||||
WebElement alert = driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.admin.addUser.formError.xpath")));
|
||||
|
||||
if (!alert.isDisplayed()) {
|
||||
Assert.assertTrue(false, "Alert for empty form not is displayed.");
|
||||
}
|
||||
|
||||
Assert.assertEquals(alert.getText(), "Username is a required field. It cannot be empty.");
|
||||
}
|
||||
|
||||
@Test(description = "Test for short user name")
|
||||
public void shortUserNameTest() {
|
||||
clearForm();
|
||||
|
||||
firstNameField.sendKeys(Constants.User.Add.FIRST_NAME);
|
||||
lastNameField.sendKeys(Constants.User.Add.LAST_NAME);
|
||||
emailField.sendKeys(Constants.User.Add.EMAIL);
|
||||
userNameField.sendKeys(Constants.User.Add.SHORT_USER_NAME);
|
||||
|
||||
addUserButton.click();
|
||||
|
||||
WebElement alert = driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.admin.addUser.formError.xpath")));
|
||||
|
||||
if (!alert.isDisplayed()) {
|
||||
Assert.assertTrue(false, "Alert for short user name is not displayed.");
|
||||
}
|
||||
|
||||
Assert.assertEquals(alert.getText(), Constants.User.Add.SHORT_USER_NAME_ERROR_MSG);
|
||||
}
|
||||
|
||||
@Test(description = "Test for empty first name")
|
||||
public void emptyFirstNameTest() {
|
||||
clearForm();
|
||||
|
||||
firstNameField.sendKeys("");
|
||||
lastNameField.sendKeys(Constants.User.Add.LAST_NAME);
|
||||
emailField.sendKeys(Constants.User.Add.EMAIL);
|
||||
userNameField.sendKeys(Constants.User.Add.USER_NAME);
|
||||
|
||||
addUserButton.click();
|
||||
|
||||
WebElement alert = driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.admin.addUser.formError.xpath")));
|
||||
|
||||
if (!alert.isDisplayed()) {
|
||||
Assert.assertTrue(false, "Alert for First name is not displayed.");
|
||||
}
|
||||
|
||||
Assert.assertEquals(alert.getText(), Constants.User.Add.FIRST_NAME_ERROR_MSG);
|
||||
}
|
||||
|
||||
@Test(description = "Test for empty last name")
|
||||
public void emptyLastNameTest() {
|
||||
clearForm();
|
||||
|
||||
firstNameField.sendKeys(Constants.User.Add.FIRST_NAME);
|
||||
lastNameField.sendKeys("");
|
||||
emailField.sendKeys(Constants.User.Add.EMAIL);
|
||||
userNameField.sendKeys(Constants.User.Add.USER_NAME);
|
||||
|
||||
addUserButton.click();
|
||||
|
||||
WebElement alert = driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.admin.addUser.formError.xpath")));
|
||||
|
||||
if (!alert.isDisplayed()) {
|
||||
Assert.assertTrue(false, "Alert for Last name is not displayed.");
|
||||
}
|
||||
|
||||
Assert.assertEquals(alert.getText(), Constants.User.Add.LAST_NAME_ERROR_MSG);
|
||||
}
|
||||
|
||||
@Test(description = "Test for empty email name")
|
||||
public void emptyEmailTest() {
|
||||
clearForm();
|
||||
|
||||
firstNameField.sendKeys(Constants.User.Add.FIRST_NAME);
|
||||
lastNameField.sendKeys(Constants.User.Add.LAST_NAME);
|
||||
emailField.sendKeys("");
|
||||
userNameField.sendKeys(Constants.User.Add.USER_NAME);
|
||||
|
||||
addUserButton.click();
|
||||
|
||||
WebElement alert = driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.admin.addUser.formError.xpath")));
|
||||
|
||||
if (!alert.isDisplayed()) {
|
||||
Assert.assertTrue(false, "Alert for E-mail is not displayed.");
|
||||
}
|
||||
|
||||
Assert.assertEquals(alert.getText(), Constants.User.Add.NO_EMAIL_ERROR_MSG);
|
||||
}
|
||||
|
||||
@Test(description = "Test for incorrect email")
|
||||
public void incorrectEmailTest() {
|
||||
clearForm();
|
||||
|
||||
firstNameField.sendKeys(Constants.User.Add.FIRST_NAME);
|
||||
lastNameField.sendKeys(Constants.User.Add.LAST_NAME);
|
||||
emailField.sendKeys(Constants.User.Add.EMAIL_ERROR);
|
||||
userNameField.sendKeys(Constants.User.Add.USER_NAME);
|
||||
|
||||
addUserButton.click();
|
||||
|
||||
WebElement alert = driver.findElement(By.xpath(
|
||||
uiElementMapper.getElement("iot.admin.addUser.formError.xpath")));
|
||||
|
||||
if (!alert.isDisplayed()) {
|
||||
Assert.assertTrue(false, "Alert for incorrect E-mail is not displayed.");
|
||||
}
|
||||
|
||||
Assert.assertEquals(alert.getText(), Constants.User.Add.WRONG_EMAIL_ERROR_MSG);
|
||||
}
|
||||
|
||||
private void clearForm() {
|
||||
firstNameField.clear();
|
||||
lastNameField.clear();
|
||||
emailField.clear();
|
||||
userNameField.clear();
|
||||
}
|
||||
|
||||
@AfterClass(alwaysRun = true)
|
||||
public void tearDown() {
|
||||
driver.quit();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,72 @@
|
||||
/*
|
||||
* Copyright (c) 2016, 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.user;
|
||||
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.testng.annotations.AfterClass;
|
||||
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.Constants;
|
||||
import org.wso2.carbon.iot.integration.web.ui.test.common.LoginUtils;
|
||||
import org.wso2.carbon.iot.integration.web.ui.test.common.IOTIntegrationUIBaseTestCase;
|
||||
import org.wso2.iot.integration.ui.pages.home.IOTAdminDashboard;
|
||||
import org.wso2.iot.integration.ui.pages.uesr.AddUserPage;
|
||||
import org.wso2.iot.integration.ui.pages.uesr.UserListingPage;
|
||||
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
import javax.xml.xpath.XPathExpressionException;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Test for check following admin capabilities.
|
||||
* - Create a new User
|
||||
* - Delete a user
|
||||
*/
|
||||
public class AdminFunctionsTest extends IOTIntegrationUIBaseTestCase {
|
||||
|
||||
private WebDriver driver;
|
||||
|
||||
@BeforeClass(alwaysRun = true)
|
||||
public void setup() throws IOException, XPathExpressionException, XMLStreamException {
|
||||
super.init();
|
||||
driver = BrowserManager.getWebDriver();
|
||||
LoginUtils.login(driver, automationContext, getWebAppURL());
|
||||
}
|
||||
|
||||
@Test(description = "Test for creating a new user")
|
||||
public void createUserTest() throws IOException {
|
||||
IOTAdminDashboard adminDashboard = new IOTAdminDashboard(driver);
|
||||
AddUserPage addUserPage = adminDashboard.addUser();
|
||||
addUserPage.createNewUser("user1", "User", "User", "user@wso2.com");
|
||||
}
|
||||
|
||||
@Test(description = "Test for deleting a created user", dependsOnMethods = {"createUserTest"})
|
||||
public void deleteUserTest() throws XPathExpressionException, IOException, InterruptedException {
|
||||
driver.get(getWebAppURL() + Constants.IOT_HOME_URL);
|
||||
IOTAdminDashboard adminDashboard = new IOTAdminDashboard(driver);
|
||||
UserListingPage userListingPage = adminDashboard.viewUser();
|
||||
userListingPage.deleteUser();
|
||||
}
|
||||
|
||||
@AfterClass(alwaysRun = true)
|
||||
public void tearDown() throws Exception {
|
||||
driver.quit();
|
||||
}
|
||||
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue