Java tutorial
/* * Copyright 2012 ios-driver committers. * * Licensed 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.uiautomation.ios.communication; import org.apache.http.cookie.CookieIdentityComparator; import org.json.JSONArray; import org.json.JSONObject; import org.openqa.selenium.Dimension; import org.openqa.selenium.WebDriverException; import org.openqa.selenium.html5.Location; import org.uiautomation.ios.UIAModels.Orientation; import org.uiautomation.ios.UIAModels.UIAButton; import org.uiautomation.ios.UIAModels.UIAElement; import org.uiautomation.ios.UIAModels.UIAElementArray; import org.uiautomation.ios.UIAModels.UIAKeyboard; import org.uiautomation.ios.UIAModels.UIARect; import java.util.Set; // TODO freynaud remove the findElements related ones. public enum WebDriverLikeCommand { STATUS("GET", "/status", JSONObject.class), NEW_SESSION("POST", "/session", String.class), SESSIONS("GET", "/sessions", JSONArray.class), GET_SESSION("GET", "/session/:sessionId", JSONObject.class), DELETE_SESSION("DELETE", "/session/:sessionId", null), SET_TIMEOUT("POST", "/session/:sessionId/timeouts", Void.class), //POST /session/:sessionId/timeouts/async_script IMPLICIT_WAIT("POST", "/session/:sessionId/timeouts/implicit_wait", Void.class), GET_WINDOW_HANDLE("GET", "/session/:sessionId/window_handle", String.class), WINDOW_HANDLES("GET", "/session/:sessionId/window_handles", Set.class), CURRENT_URL( "GET", "/session/:sessionId/url", String.class), URL("POST", "/session/:sessionId/url", Void.class), FORWARD("POST", "/session/:sessionId/forward", Void.class), BACK("POST", "/session/:sessionId/back", Void.class), REFRESH("POST", "/session/:sessionId/refresh", Void.class), EXECUTE_SCRIPT("POST", "/session/:sessionId/execute", Object.class), // POST /session/:sessionId/execute_async SCREENSHOT("GET", "/session/:sessionId/screenshot", Void.class), //GET /session/:sessionId/ime/available_engines //GET /session/:sessionId/ime/active_engine //GET /session/:sessionId/ime/activated //POST /session/:sessionId/ime/deactivate //POST /session/:sessionId/ime/activate FRAME("POST", "/session/:sessionId/frame", Void.class), WINDOW("POST", "/session/:sessionId/window", Void.class), // DELETE /session/:sessionId/window // POST /session/:sessionId/window/:windowHandle/size WINDOW_SIZE("GET", "/session/:sessionId/window/:windowHandle/size", Dimension.class), // POST /session/:sessionId/window/:windowHandle/position // GET /session/:sessionId/window/:windowHandle/position // POST /session/:sessionId/window/:windowHandle/maximize GET_COOKIE("GET", "/session/:sessionId/cookie", JSONObject.class), //POST /session/:sessionId/cookie DELETE_COOKIE("DELETE", "/session/:sessionId/cookie", Void.class), DELETE_COOKIE_BY_NAME("DELETE", "/session/:sessionId/cookie/:name", void.class), SOURCE("GET", "/session/:sessionId/source", JSONObject.class), TITLE("GET", "/session/:sessionId/title", String.class), ELEMENT_ROOT("POST", "/session/:sessionId/element", UIAElement.class), ELEMENTS_ROOT("POST", "/session/:sessionId/elements", UIAElementArray.class), // POST /session/:sessionId/element/active // GET /session/:sessionId/element/:id ELEMENT("POST", "/session/:sessionId/element/:reference/element", UIAElement.class), ELEMENTS("POST", "/session/:sessionId/element/:reference/elements", UIAElementArray.class), CLICK("POST", "/session/:sessionId/element/:reference/click", Void.class), SUBMIT("POST", "/session/:sessionId/element/:reference/submit", Void.class), TEXT( "GET", "/session/:sessionId/element/:reference/text", String.class), SET_VALUE("POST", "/session/:sessionId/element/:reference/value", Void.class), SEND_KEYS("POST", "/session/:sessionId/keys", Void.class), TAG_NAME("GET", "/session/:sessionId/element/:reference/name", String.class), CLEAR("POST", "/session/:sessionId/element/:reference/clear", Void.class), SELECTED("GET", "/session/:sessionId/element/:reference/selected", Boolean.class), ENABLED("GET", "/session/:sessionId/element/:reference/enabled", Boolean.class), ATTRIBUTE("GET", "/session/:sessionId/element/:reference/attribute/:name", String.class), EQUAL("GET", "/session/:sessionId/element/:reference/equals/:other", Boolean.class), DISPLAYED( "GET", "/session/:sessionId/element/:reference/displayed", Boolean.class), LOCATION( "GET", "/session/:sessionId/element/:reference/location", String.class), // GET /session/:sessionId/element/:id/location // GET /session/:sessionId/element/:id/location_in_view // GET /session/:sessionId/element/:id/size CSS("GET", "/session/:sessionId/element/:reference/css/:name", String.class), SET_ORIENTATION("POST", "/session/:sessionId/orientation", Void.class), GET_ORIENTATION("GET", "/session/:sessionId/orientation", Orientation.class), GET_ALERT_TEXT("GET", "/session/:sessionId/alert_text", JSONObject.class), SET_ALERT_TEXT("POST", "/session/:sessionId/alert_text", Void.class), ACCEPT_ALERT("POST", "/session/:sessionId/accept_alert", Void.class), DISMISS_ALERT("POST", "/session/:sessionId/dismiss_alert", Void.class), GET_SCREENRECT("GET", "/session/:sessionId/screensize", Dimension.class), // POST /session/:sessionId/moveto // POST /session/:sessionId/click // POST /session/:sessionId/buttondown // POST /session/:sessionId/buttonup // POST /session/:sessionId/doubleclick TOUCH_DOWN("POST", "/session/:sessionId/touch/down", Void.class), TOUCH_UP("POST", "/session/:sessionId/touch/up", Void.class), TOUCH_MOVE("POST", "/session/:sessionId/touch/move", Void.class), SCROLL("POST", "/session/:sessionId/touch/scroll", Void.class), LONG_TAP("POST", "/session/:sessionId/touch/longclick", Void.class), TAP("POST", "/session/:sessionId/touch/click", Void.class), DOUBLE_TAP("POST", "/session/:sessionId/touch/doubleclick", Void.class), FLICK("POST", "/session/:sessionId/touch/flick", Void.class), GET_LOCATION("GET", "/session/:sessionId/location", Void.class), SET_LOCATION("POST", "/session/:sessionId/location", Location.class), // GET /session/:sessionId/local_storage // POST /session/:sessionId/local_storage // DELETE /session/:sessionId/local_storage // GET /session/:sessionId/local_storage/key/:key // DELETE /session/:sessionId/local_storage/key/:key // GET /session/:sessionId/local_storage/size // GET /session/:sessionId/session_storage // POST /session/:sessionId/session_storage // DELETE /session/:sessionId/session_storage // GET /session/:sessionId/session_storage/key/:key // DELETE /session/:sessionId/session_storage/key/:key // GET /session/:sessionId/session_storage/size LOG("POST", "/session/:sessionId/log", Void.class), LOG_TYPES("GET", "/session/:sessionId/log/types", Void.class), /* * Additional command, not part of the JSON Wire Protocol. */ CONFIGURE("POST", "/session/:sessionId/ios-driver/configure/command/:command", Void.class), GET_CONFIGURATION( "GET", "/session/:sessionId/ios-driver/configure/command/:command", Object.class), GET_TIMEOUT("GET", "/session/:sessionId/timeouts", Integer.class), TREE("GET", "/session/:sessionId/element/:reference/tree", String.class), TREE_ROOT("GET", "/session/:sessionId/tree", JSONObject.class), RECT("GET", "/session/:sessionId/element/:reference/rect", UIARect.class), KEYBOARD("GET", "/session/:sessionId/uiaApplication/:reference/keyboard", UIAKeyboard.class), // TODO freynaud : move and tap. TARGET_TAP("POST", "/session/:sessionId/tap/:reference", Void.class), TARGET_RECT("GET", "/session/:sessionId/uiaTarget/:reference/rect", UIARect.class), ALERT_CANCEL_BUTTON("GET", "/session/:sessionId/element/:reference/cancel", UIAButton.class), ALERT_DEFAULT_BUTTON("GET", "/session/:sessionId/element/:reference/default", UIAButton.class), // UIATarget DRAG_FROM_TO_FOR_DURATION("POST", "/session/:sessionId/uiaTarget/:reference/dragfromtoforduration", Void.class), PINCH_CLOSE_FROM_TO_FOR_DURATION("POST", "/session/:sessionId/uiaTarget/:reference/pinchclosefromtoforduration", Void.class), PINCH_OPEN_FROM_TO_FOR_DURATION("POST", "/session/:sessionId/uiaTarget/:reference/pinchopenfromtoforduration", Void.class), /*LOCAL_TARGET("GET", "/session/:sessionId/localTarget", UIATarget.class), HOST("GET", "/session/:sessionId/uiaTarget/:reference/host", UIHost.class), TARGET_TAP("GET", "/session/:sessionId/tap/:reference", Void.class), // UIAHost PERFORM_TASK_WITH_PATH_ARGUMENTS_TIMEOUT("POST", "/session/:sessionId/host/:reference", null), FONT_MOST_APP("GET", "/session/:sessionId/uiaTarget/:reference/fontMostApp", UIAApplication.class), // UIAApplication MAIN_WINDOW("GET", "/session/:sessionId/uiaApplication/:reference/mainWindow", UIAWindow.class), WINDOWS("GET", "/session/:sessionId/uiaTarget/:reference/windows", UIAElementArray.class), // UIAElement HIT_POINT("GET", "/session/:sessionId/uiaElement/:reference/hitPoint", UIAPoint.class), PARENT("GET", "/session/:sessionId/uiaElement/:reference/parent", UIAElement.class), ANCESTRY("GET", "/session/:sessionId/uiaElement/:reference/ancestry", UIAElement.class), ACTIVITY_INDICATORS("GET", "/session/:sessionId/uiaElement/:reference/activityIndicator", UIAElementArray.class), BUTTONS("GET", "/session/:sessionId/uiaElement/:reference/buttons", UIAElementArray.class), IMAGES("GET", "/session/:sessionId/uiaElement/:reference/images", UIAElementArray.class), LINKS("GET", "/session/:sessionId/uiaElement/:reference/links", UIAElementArray.class), NAVIGATION_BAR("GET", "/session/:sessionId/uiaElement/:reference/navigationBar", UIAElement.class), NAVIGATION_BARS("GET", "/session/:sessionId/uiaElement/:reference/navigationBars", UIAElementArray.class), //UIAKeyboard KEYBOARD("GET", "/session/:sessionId/uiaApplication/:reference/keyboard", UIAKeyboard.class), KEYBOARD_BUTTONS("GET", "/session/:sessionId/uiaKeyboard/:reference/buttons", UIAElementArray.class), KEYBOARD_KEYS("GET", "/session/:sessionId/uiaKeyboard/:reference/keys", UIAElementArray.class), TYPE_STRING("POST", "/session/:sessionId/uiaKeyboard/:reference", Void.class), IS_STALE("GET", "/session/:sessionId/uiaElement/:reference/isStale", Boolean.class), //LABEL("GET" , "/session/:sessionId/uiaElement/:reference/label",String.class), //NAME("GET" , "/session/:sessionId/uiaElement/:reference/name",String.class), //VALUE("GET" , "/session/:sessionId/uiaElement/:reference/value",String.class), WITH_NAME("GET", "/session/:sessionId/uiaElement/:reference/withName", UIAElement.class), WITH_PREDICATE("GET", "/session/:sessionId/uiaElement/:reference/withPredicate", UIAElement.class), WITH_VALUE_FOR_KEY("GET", "/session/:sessionId/uiaElement/:reference/withValueForKey", UIAElement.class), */ NATIVE_TOUCH_AND_HOLD("POST", "/session/:sessionId/uiaElement/:reference/touchAndHold", Void.class), NATIVE_DOUBLE_TAP("POST", "/session/:sessionId/uiaElement/:reference/doubleTap", Void.class), TWO_FINGER_TAP("POST", "/session/:sessionId/uiaElement/:reference/twoFingerTap", Void.class), //TAP_WITH_OPTIONS("POST", "/session/:sessionId/uiaElement/:reference/tapWithOptions", Void.class), //DRAG_INSIDE_WITH_OPTIONS("POST", // "/session/:sessionId/uiaElement/:reference/dragInsideWithOptions", // Void.class), FLICK_INSIDE_WITH_OPTIONS("POST", "/session/:sessionId/uiaElement/:reference/flickInsideWithOption", Void.class), //SCROLL_TO_VISIBLE("POST", "/session/:sessionId/uiaElement/:reference/scroll", // Void.class), //ROTATE_WITH_OPTIONS("POST", "/session/:sessionId/uiaElement/:reference/rotateWithOptions", // Void.class), //PINCH_CLOSE("POST", "/session/:sessionId/pinchClose", Void.class), ELEMENT_SCROLL("POST", "/session/:sessionId/uiaElement/:reference/scroll", Void.class), /* // UIAElementArray GET("GET", "/session/:sessionId/uiaElementArray/:reference", UIAElement.class), FIRST_WITH_NAME("GET", "/session/:sessionId/uiaElementArray/:reference/firstWithName", UIAElement.class), FIRST_WITH_PREDICATE("GET", "/session/:sessionId/uiaElementArray/:reference/firstWithPredicate", UIAElement.class), FIRST_WITH_VALUE_FOR_KEY("GET", "/session/:sessionId/uiaElementArray/:reference/firstWithValueForKey", UIAElement.class), ARRAY_WITH_NAME("GET", "/session/:sessionId/uiaElementArray/:reference/withName", UIAElementArray.class), ARRAY_WITH_PREDICATE("GET", "/session/:sessionId/uiaElementArray/:reference/withPredicate", UIAElementArray.class), ARRAY_WITH_VALUE_FOR_KEY("GET", "/session/:sessionId/uiaElementArray/:reference/withValueForKey", UIAElementArray.class), // UIANavigationBar LEFT_BUTTON("GET", "/session/:sessionId/uiaElement/:reference/leftButton", UIAButton.class), RIGHT_BUTTON("GET", "/session/:sessionId/uiaElement/:reference/rightButton", UIAButton.class), // UIATextField and UIATextView ,*/ //UIATableView TABLE_GROUPS("GET", "/session/:sessionId/uiaElement/:reference/getGroups", UIAElementArray.class), TABLE_CELLS( "GET", "/session/:sessionId/uiaElement/:reference/getCells", UIAElementArray.class), TABLE_VISIBLE_CELLS("GET", "/session/:sessionId/uiaElement/:reference/getVisibleCells", UIAElementArray.class), //UIAPicker PICKER_WHEELS("GET", "/session/:sessionId/uiaElement/:reference/getWheels", UIAElementArray.class), //UIAPickerWheels PICKER_WHEEL_VALUES("GET", "/session/:sessionId/uiaElement/:reference/getWheelValue", UIAElementArray.class), PICKER_WHEEL_SET_VALUE("POST", "/session/:sessionId/uiaElement/:reference/value", Void.class), //UIASwitch NATIVE_SWITCH_SET_VALUE("POST", "/session/:sessionId/uiaElement/:reference/setSwitchValue", Void.class), //UIASlider SLIDER_DRAG_TO_VALUE("POST", "/session/:sessionId/uiaElement/:reference/dragToValue", Void.class); private final String method; private final String path; private final Class<?> returnType; private WebDriverLikeCommand(String method, String path, Class<?> returnType) { this.method = method; this.path = path; this.returnType = returnType; } public String path() { return path; } public String method() { return method; } public Class<?> returnType() { return returnType; } public static WebDriverLikeCommand getCommand(String method, String path) { for (WebDriverLikeCommand command : values()) { if (command.isGenericFormOf(method, path)) { return command; } } throw new WebDriverException("cannot find command for " + method + ", " + path); } private boolean isGenericFormOf(String method, String path) { String genericPath = this.path; String genericMethod = this.method; if (!genericMethod.equals(method)) { return false; } String[] genericPieces = genericPath.split("/"); String[] pieces = path.split("/"); if (genericPieces.length != pieces.length) { return false; } else { for (int i = 0; i < pieces.length; i++) { String genericPiece = genericPieces[i]; if (genericPiece.startsWith(":")) { continue; } else { if (!genericPiece.equals(pieces[i])) { return false; } } } return true; } } public int getIndex(String variable) { String[] pieces = path.split("/"); for (int i = 0; i < pieces.length; i++) { String piece = pieces[i]; if (piece.startsWith(":") && piece.equals(variable)) { return i; } } throw new WebDriverException("cannot find the variable " + variable + " in " + path); } public boolean isSessionLess() { return !path.contains(":sessionId"); } }