Added comments and code restructured.

application-manager-new
Menaka Madushanka 9 years ago
parent 0ce1d75c61
commit ef9c3dfe70

@ -1,45 +0,0 @@
/*
* 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;
public class UIConstants {
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;
}
}
}

@ -153,6 +153,12 @@ public class GraphHandler {
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) {

@ -31,8 +31,7 @@ import org.wso2.iot.integration.ui.pages.login.LoginPage;
import java.io.IOException;
/**
* In IOT server, this page is the Devices page for users.
* For admin this is the dashboard.
* This class represents the IOT server home page.
*/
public class IOTHomePage {
private WebDriver driver;

@ -100,17 +100,4 @@ public class LoginPage {
registerLink.click();
return new NewUserRegisterPage(driver);
}
public void validateForm(String username, String password) {
WebDriverWait wait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(
uiElementMapper.getElement("iot.user.login.input.username.xpath"))));
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(
uiElementMapper.getElement("iot.user.login.input.password.xpath"))));
userNameField.clear();
passwordField.clear();
userNameField.sendKeys(username);
passwordField.sendKeys(password);
loginButton.click();
}
}

@ -32,12 +32,16 @@ import org.wso2.iot.integration.ui.pages.UIElementMapper;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
public class VirtualSampleViewPage {
private Log log = LogFactory.getLog(VirtualSampleViewPage.class);
/**
* 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 VirtualSampleViewPage(WebDriver driver) throws IOException {
public ConnectedCupDeviceInterface(WebDriver driver) throws IOException {
this.driver = driver;
this.uiElementMapper = UIElementMapper.getInstance();
WebDriverWait webDriverWait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
@ -46,6 +50,9 @@ public class VirtualSampleViewPage {
}
}
/**
* Method to perform the order coffee functionality.
*/
public boolean orderCoffee() {
if (UIUtils.isElementPresent(log, driver, By.xpath(
uiElementMapper.getElement("iot.sample.orderCoffee.xpath")))) {
@ -57,6 +64,10 @@ public class VirtualSampleViewPage {
return false;
}
/**
* Method to change the temperature level.
* @param temp : The value to be set.
*/
public boolean changeTemperature(String temp) {
if (UIUtils.isElementPresent(log, driver, By.xpath(
uiElementMapper.getElement("iot.sample.temperature.xpath")))) {
@ -68,6 +79,10 @@ public class VirtualSampleViewPage {
return false;
}
/**
* Method to change the Coffee level.
* @param level : The value to be set.
*/
public boolean changeCoffeeLevel(String level) {
if (UIUtils.isElementPresent(log, driver, By.xpath(
uiElementMapper.getElement("iot.sample.coffee.level.xpath")))) {
@ -80,6 +95,11 @@ public class VirtualSampleViewPage {
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();

@ -26,6 +26,10 @@ 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;
@ -40,6 +44,9 @@ public class ConnectedCupDeviceTypeViewPage {
}
}
/**
* This method verifies that the pop up modal for inserting a name for device is present.
*/
public boolean isPopUpPresent() throws InterruptedException {
WebElement createInstanceBtn = driver.findElement(By.xpath(
uiElementMapper.getElement("iot.sample.connectedcup.createInstanceBtn.xpath")));
@ -50,7 +57,13 @@ public class ConnectedCupDeviceTypeViewPage {
return driver.findElement(By.xpath(uiElementMapper.getElement("iot.sample.modal.popup.xpath"))).isDisplayed();
}
public boolean enrollDevice(String name) throws InterruptedException {
/**
* 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.
*/
public boolean enrollDevice(String name) {
WebElement nameField = driver.findElement(By.xpath(
uiElementMapper.getElement("iot.sample.connectedcup.createInstance.nameField.xpath")));

@ -32,6 +32,15 @@ import org.wso2.iot.integration.ui.pages.graphs.GraphHandler;
import java.io.IOException;
import java.util.HashMap;
/**
* 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 HashMap<String, Graph> graphMap = new HashMap<>();
private Log log = LogFactory.getLog(ConnectedCupDeviceViewPage.class);
@ -55,16 +64,24 @@ public class ConnectedCupDeviceViewPage {
graphMap = handler.getGraphMap();
}
public VirtualSampleViewPage gotoDevice() throws IOException {
/**
* This method executes Connected cup sample web app.
*/
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 VirtualSampleViewPage(driverDevice);
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(
@ -73,11 +90,25 @@ public class ConnectedCupDeviceViewPage {
uiElementMapper.getElement("iot.sample.connectedcup.gotodevice.xpath"))).getAttribute("href");
}
public boolean isGraphsAvailable(int count) throws IOException {
/**
* 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;
}
public boolean graphAxisName(String axis, String graphId, String axisName) throws IOException {
/**
* 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) {
log.info(graphMap.toString());
if (graphMap.size() != 0) {
@ -90,7 +121,13 @@ public class ConnectedCupDeviceViewPage {
return false;
}
public boolean graphLegendName(String graphId, String legend) throws IOException {
/**
* 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) {
log.info(graphMap.toString());
if (graphMap.size() != 0) {
try {
@ -102,6 +139,11 @@ public class ConnectedCupDeviceViewPage {
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) {
@ -112,6 +154,12 @@ public class ConnectedCupDeviceViewPage {
}
}
/**
* 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);
if (graph != null) {

@ -1,7 +1,4 @@
package org.wso2.iot.integration.ui.pages.samples;
/**
* Created by menaka on 3/4/16.
*/
public class SampleAnalyticsPage {
}

@ -17,6 +17,9 @@ 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;
@ -31,13 +34,16 @@ public class SampleEnrollmentTest extends IOTIntegrationUIBaseTestCase {
connectedCupDeviceTypeViewPage = enrollDevicePage.gotoConnectedCupDeviceTypeViewPage();
}
@Test(description = "Verify the pop up modal is displayed.", groups = {"iot.enroll"}, dependsOnGroups = {"iot.install"})
@Test(description = "Verify the pop up modal is displayed.",
groups = {"iot.enroll"},
dependsOnGroups = {"iot.install"})
public void enrollDevicePopUpModalTest() throws InterruptedException, IOException {
Assert.assertTrue(connectedCupDeviceTypeViewPage.isPopUpPresent());
}
@Test(description = "Test case for device enrolment", groups = {"iot.enroll"}, dependsOnMethods =
{"enrollDevicePopUpModalTest"})
@Test(description = "Test case for device enrolment",
groups = {"iot.enroll"},
dependsOnMethods = {"enrollDevicePopUpModalTest"})
public void enrollDeviceTest() throws InterruptedException {
Assert.assertTrue(connectedCupDeviceTypeViewPage.enrollDevice(Constants.IOT_CONNECTED_CUP_NAME));
}

@ -28,12 +28,15 @@ import org.wso2.carbon.iot.integration.web.ui.test.LoginUtils;
import org.wso2.iot.integration.ui.pages.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.VirtualSampleViewPage;
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;
@ -66,7 +69,7 @@ public class SampleEnrolmentVerificationTest extends IOTIntegrationUIBaseTestCas
@Test(description = "Verify sample functions",
dependsOnMethods = {"verifyNavigationTest"})
public void sampleStartUpTest() throws IOException {
VirtualSampleViewPage sampleViewPage = connectedCupDeviceViewPage.gotoDevice();
ConnectedCupDeviceInterface sampleViewPage = connectedCupDeviceViewPage.gotoDevice();
Assert.assertNotNull(sampleViewPage);
}

@ -28,12 +28,11 @@ import org.wso2.carbon.iot.integration.web.ui.test.LoginUtils;
import org.wso2.iot.integration.ui.pages.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.VirtualSampleViewPage;
import org.wso2.iot.integration.ui.pages.samples.ConnectedCupDeviceInterface;
import javax.xml.stream.XMLStreamException;
import javax.xml.xpath.XPathExpressionException;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
/**
* Test cases for test the functionality of the connected cup sample.
@ -45,7 +44,7 @@ import java.util.concurrent.TimeUnit;
public class SampleFunctionalityTest extends IOTIntegrationUIBaseTestCase {
private WebDriver driverDevice;
private WebDriver driverServer;
private VirtualSampleViewPage sampleViewPage;
private ConnectedCupDeviceInterface sampleViewPage;
private ConnectedCupDeviceViewPage connectedCupDeviceViewPage;
@BeforeClass(alwaysRun = true)
@ -58,7 +57,7 @@ public class SampleFunctionalityTest extends IOTIntegrationUIBaseTestCase {
DevicesPage devicesPage = new DevicesPage(driverServer);
connectedCupDeviceViewPage = devicesPage.viewDevice(Constants.IOT_CONNECTED_CUP_NAME);
driverDevice.get(connectedCupDeviceViewPage.getDeviceLink());
sampleViewPage = new VirtualSampleViewPage(driverDevice);
sampleViewPage = new ConnectedCupDeviceInterface(driverDevice);
}
@Test(description = "Set the temperature level.",
@ -113,7 +112,7 @@ public class SampleFunctionalityTest extends IOTIntegrationUIBaseTestCase {
groups = {"iot.sample.verify", "sample.temp"},
dependsOnGroups = {"iot.enroll.verify"},
dependsOnMethods = {"verifyGraphs"})
public void temperatureGraphLegendTest() throws IOException {
public void temperatureGraphLegendTest() {
Assert.assertTrue(connectedCupDeviceViewPage.graphLegendName(Constants.IOT_CONNECTED_CUP_TEMPERATURE_ID,
Constants.IOT_CONNECTED_CUP_TEMPERATURE_LEGEND));
}
@ -138,7 +137,7 @@ public class SampleFunctionalityTest extends IOTIntegrationUIBaseTestCase {
@Test(description = "Test the Y axis name of Coffee Level graph.",
groups = {"iot.sample.coffee"},
dependsOnGroups = {"sample.temp"})
public void coffeeLevelGraphYAxisNameTest() throws IOException {
public void coffeeLevelGraphYAxisNameTest() {
Assert.assertTrue(connectedCupDeviceViewPage.graphAxisName(Constants.IOT_GRAPH_Y_AXIS,
Constants.IOT_CONNECTED_CUP_COFFEE_LEVEL_ID,
Constants.IOT_CONNECTED_CUP_COFFEE_LEVEL_Y_AXIS));
@ -147,7 +146,7 @@ public class SampleFunctionalityTest extends IOTIntegrationUIBaseTestCase {
@Test(description = "Test the X axis name of Coffee Level graph.",
groups = {"iot.sample.coffee"},
dependsOnGroups = {"iot.enroll.verify", "sample.temp"})
public void coffeeLevelGraphXAxisNameTest() throws IOException {
public void coffeeLevelGraphXAxisNameTest() {
Assert.assertTrue(connectedCupDeviceViewPage.graphAxisName(Constants.IOT_GRAPH_X_AXIS,
Constants.IOT_CONNECTED_CUP_COFFEE_LEVEL_ID,
Constants.IOT_CONNECTED_CUP_COFFEE_LEVEL_X_AXIS));

@ -75,7 +75,8 @@ public class SampleInstallationTest extends IOTIntegrationUIBaseTestCase {
logViewerClient = new LogViewerClient(getBackendURL(), getSessionCookie(automationContext));
}
@Test(groups = {"iot.sample"}, description = "Verify the sample build process")
@Test(groups = {"iot.sample"},
description = "Verify the sample build process")
public void sampleBuildTest() throws IOException {
String connectedCupDir = carbonHome + File.separator + "samples" + File.separator + "connectedcup";
log.info("Connected cup Sample: " + connectedCupDir);
@ -100,8 +101,9 @@ public class SampleInstallationTest extends IOTIntegrationUIBaseTestCase {
}
}
@Test(groups = {"iot.sample"}, description = "Verify the sample installation process", dependsOnMethods =
{"sampleBuildTest"})
@Test(groups = {"iot.sample"},
description = "Verify the sample installation process",
dependsOnMethods = {"sampleBuildTest"})
public void sampleInstallationTest() throws IOException {
log.info("CARBON_HOME: " + System.getProperty("carbon.home"));
@ -124,8 +126,9 @@ public class SampleInstallationTest extends IOTIntegrationUIBaseTestCase {
}
}
@Test(groups = {"iot.sample"}, description = "Test restarting the server", dependsOnMethods =
{"sampleInstallationTest"})
@Test(groups = {"iot.sample"},
description = "Test restarting the server",
dependsOnMethods = {"sampleInstallationTest"})
public void serverRestartTest() {
ServerConfigurationManager serverManager;
try {
@ -148,6 +151,11 @@ public class SampleInstallationTest extends IOTIntegrationUIBaseTestCase {
}
}
/**
* 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;
@ -161,6 +169,11 @@ public class SampleInstallationTest extends IOTIntegrationUIBaseTestCase {
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 {

@ -32,6 +32,9 @@ 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;

Loading…
Cancel
Save