Java tutorial
package com.smash.revolance.ui.materials.mock.webdriver.browser; /* * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Revolance-UI-Materials-Mock-Webdriver-Service * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Copyright (C) 2012 - 2013 RevoLance * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ import org.apache.commons.exec.OS; import org.openqa.selenium.Dimension; import org.openqa.selenium.Point; import org.openqa.selenium.remote.DriverCommand; import org.openqa.selenium.remote.ErrorCodes; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; /** * User: wsmash * Date: 29/09/13 * Time: 13:47 */ public class MockedBrowserController implements JSonWireListener { private MockedBrowser browser; @Override public synchronized void notify(JSonWireEvent event) { String name = (String) event.getProp("command.name"); String path = (String) event.getProp("command.path"); String elementId = (String) event.getProp("command.elementId"); String htmlAttribute = (String) event.getProp("command.elementHtmlAttribute"); String cssAttribute = (String) event.getProp("command.elementCssAttribute"); System.out.println("Receiving command: " + name + " with path: " + path); Map<String, Object> commandPayload = (Map<String, Object>) event.getProp("command.payload"); // Just the value part in the payload Map<String, Object> resultPayload = new HashMap<String, Object>(); if (isCommand(event, DriverCommand.NEW_SESSION)) { browser = new MockedBrowser(); resultPayload.put("browserName", this.getClass().getSimpleName()); resultPayload.put("browserPlatform", OS.isFamilyUnix() ? "LINUX" : "WINDOWS"); resultPayload.put("browserVersion", "0.0.1-SNAPSHOT"); } if (isCommand(event, DriverCommand.SET_WINDOW_SIZE)) { browser.setSize((Integer) commandPayload.get("width"), (Integer) commandPayload.get("height")); } if (isCommand(event, DriverCommand.GET_WINDOW_SIZE)) { Dimension dim = browser.getDimension(); resultPayload.put("width", dim.getWidth()); resultPayload.put("height", dim.getHeight()); } if (isCommand(event, DriverCommand.SET_WINDOW_POSITION)) { browser.setLocation((Integer) commandPayload.get("x"), (Integer) commandPayload.get("y")); } if (isCommand(event, DriverCommand.GET_WINDOW_POSITION)) { Point location = browser.getLocation(); resultPayload.put("x", location.getX()); resultPayload.put("y", location.getY()); } if (isCommand(event, DriverCommand.GET_CURRENT_URL)) { resultPayload.put("url", browser.getUrl()); } if (isCommand(event, DriverCommand.GET)) { try { browser.goToUrl((String) commandPayload.get("url")); } catch (Exception e) { System.err.println(e); } } if (isCommand(event, DriverCommand.EXECUTE_SCRIPT)) { resultPayload.put("value", browser.executeJavaScript((String) commandPayload.get("script"), (Object[]) commandPayload.get("args"))); } if (isCommand(event, DriverCommand.GET_ALERT_TEXT)) { resultPayload.put("alertStatusCode", ErrorCodes.NO_ALERT_PRESENT); resultPayload.put("alertMessage", "No alert is present"); } if (isCommand(event, DriverCommand.GET_TITLE)) { resultPayload.put("title", browser.getTitle()); } if (isCommand(event, DriverCommand.SCREENSHOT)) { resultPayload.put("screenshot", browser.takeScreenshot()); } if (isCommand(event, DriverCommand.FIND_ELEMENTS)) { List<String> elements = browser.findElements((String) commandPayload.get("value")); resultPayload.put("elementList", buildElementList(elements)); } if (isCommand(event, DriverCommand.GET_ELEMENT_LOCATION)) { Point location = browser.getElementLocation(elementId); resultPayload.put("elementX", String.valueOf(location.getX())); resultPayload.put("elementY", String.valueOf(location.getY())); } if (isCommand(event, DriverCommand.GET_ELEMENT_SIZE)) { Dimension dim = browser.getElementSize(elementId); resultPayload.put("elementW", String.valueOf(dim.getWidth())); resultPayload.put("elementH", String.valueOf(dim.getHeight())); } if (isCommand(event, DriverCommand.GET_ELEMENT_TAG_NAME)) { resultPayload.put("elementTagName", browser.getElementTag(elementId)); } if (isCommand(event, DriverCommand.GET_ELEMENT_TEXT)) { resultPayload.put("elementText", browser.getElementText(elementId)); } if (isCommand(event, DriverCommand.GET_ELEMENT_ATTRIBUTE)) { resultPayload.put("elementHtmlAttributeValue", browser.getElementHtmlAttribute(elementId, htmlAttribute)); } if (isCommand(event, DriverCommand.IS_ELEMENT_DISPLAYED)) { resultPayload.put("isElementDisplayed", browser.isElementDisplayed(elementId)); } if (isCommand(event, DriverCommand.GET_ELEMENT_VALUE_OF_CSS_PROPERTY)) { resultPayload.put("elementCssAttributeValue", browser.getElementCssAttribute(elementId, cssAttribute)); } event.setProp("command.value", resultPayload); notifyAll(); } private boolean isCommand(JSonWireEvent event, String cmd) { return ((String) event.getProp("command.name")).contentEquals(cmd); } private String buildElementList(java.util.List<String> elementIds) { StringBuilder str = new StringBuilder(); str.append("["); for (String elementId : elementIds) { str.append("{"); str.append("\"ELEMENT\":\"{").append(elementId).append("}\""); str.append("}"); if (isLastElement(elementId, elementIds)) { str.append(","); } } str.append("]"); return str.toString(); } private boolean isLastElement(String elementId, List<String> elementIds) { return !elementIds.get(elementIds.size() - 1).contentEquals(elementId); } }