diff --git a/pom.xml b/pom.xml
index a8452f47e..d0e83983d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -123,11 +123,19 @@
org.apache.maven.plugins
maven-compiler-plugin
- 2.3.2
+ 3.3
1.7
1.7
+ eclipse
+
+
+ org.codehaus.plexus
+ plexus-compiler-eclipse
+ 2.5
+
+
diff --git a/src/main/java/io/appium/java_client/AppiumDriver.java b/src/main/java/io/appium/java_client/AppiumDriver.java
index 10ff30074..e29658836 100644
--- a/src/main/java/io/appium/java_client/AppiumDriver.java
+++ b/src/main/java/io/appium/java_client/AppiumDriver.java
@@ -1,6 +1,6 @@
/*
- +Copyright 2014 Appium contributors
- +Copyright 2014 Software Freedom Conservancy
+ +Copyright 2014-2015 Appium contributors
+ +Copyright 2014-2015 Software Freedom Conservancy
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
@@ -17,31 +17,81 @@
package io.appium.java_client;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
+import static io.appium.java_client.MobileCommand.CLOSE_APP;
+import static io.appium.java_client.MobileCommand.COMPLEX_FIND;
+import static io.appium.java_client.MobileCommand.CURRENT_ACTIVITY;
+import static io.appium.java_client.MobileCommand.END_TEST_COVERAGE;
+import static io.appium.java_client.MobileCommand.GET_NETWORK_CONNECTION;
+import static io.appium.java_client.MobileCommand.GET_SETTINGS;
+import static io.appium.java_client.MobileCommand.GET_STRINGS;
+import static io.appium.java_client.MobileCommand.HIDE_KEYBOARD;
+import static io.appium.java_client.MobileCommand.INSTALL_APP;
+import static io.appium.java_client.MobileCommand.IS_APP_INSTALLED;
+import static io.appium.java_client.MobileCommand.IS_LOCKED;
+import static io.appium.java_client.MobileCommand.KEY_EVENT;
+import static io.appium.java_client.MobileCommand.LAUNCH_APP;
+import static io.appium.java_client.MobileCommand.LOCK;
+import static io.appium.java_client.MobileCommand.OPEN_NOTIFICATIONS;
+import static io.appium.java_client.MobileCommand.PERFORM_MULTI_TOUCH;
+import static io.appium.java_client.MobileCommand.PERFORM_TOUCH_ACTION;
+import static io.appium.java_client.MobileCommand.PULL_FILE;
+import static io.appium.java_client.MobileCommand.PULL_FOLDER;
+import static io.appium.java_client.MobileCommand.PUSH_FILE;
+import static io.appium.java_client.MobileCommand.REMOVE_APP;
+import static io.appium.java_client.MobileCommand.RESET;
+import static io.appium.java_client.MobileCommand.RUN_APP_IN_BACKGROUND;
+import static io.appium.java_client.MobileCommand.SET_NETWORK_CONNECTION;
+import static io.appium.java_client.MobileCommand.SET_SETTINGS;
+import static io.appium.java_client.MobileCommand.SET_VALUE;
+import static io.appium.java_client.MobileCommand.SHAKE;
+import static io.appium.java_client.MobileCommand.START_ACTIVITY;
+import static io.appium.java_client.MobileCommand.TOGGLE_LOCATION_SERVICES;
import io.appium.java_client.remote.MobileCapabilityType;
-import org.openqa.selenium.*;
-import org.openqa.selenium.html5.Location;
-import org.openqa.selenium.html5.LocationContext;
-import org.openqa.selenium.remote.*;
-import org.openqa.selenium.remote.html5.RemoteLocationContext;
-import org.openqa.selenium.remote.http.HttpMethod;
-import javax.xml.bind.DatatypeConverter;
import java.net.URL;
import java.util.LinkedHashSet;
import java.util.List;
-import java.util.Map;
import java.util.Set;
-import static io.appium.java_client.MobileCommand.*;
+import javax.xml.bind.DatatypeConverter;
-public abstract class AppiumDriver extends RemoteWebDriver implements MobileDriver,
- ContextAware, Rotatable, FindsByAccessibilityId, LocationContext,
- DeviceActionShortcuts, TouchShortcuts, InteractsWithFiles,
- InteractsWithApps, ScrollsTo, HasAppStrings {
+import org.openqa.selenium.By;
+import org.openqa.selenium.Capabilities;
+import org.openqa.selenium.Dimension;
+import org.openqa.selenium.Point;
+import org.openqa.selenium.ScreenOrientation;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebDriverException;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.html5.Location;
+import org.openqa.selenium.remote.CommandInfo;
+import org.openqa.selenium.remote.DesiredCapabilities;
+import org.openqa.selenium.remote.DriverCommand;
+import org.openqa.selenium.remote.ErrorHandler;
+import org.openqa.selenium.remote.ExecuteMethod;
+import org.openqa.selenium.remote.HttpCommandExecutor;
+import org.openqa.selenium.remote.RemoteWebElement;
+import org.openqa.selenium.remote.Response;
+import org.openqa.selenium.remote.html5.RemoteLocationContext;
+import org.openqa.selenium.remote.http.HttpMethod;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+
+/**
+ * @param means the required type from the list of allowed types below
+ * that implement {@link WebElement} Instances of the defined type will be
+ * returned via findElement* and findElements*.
+ * Warning (!!!). Allowed types:
+ * {@link WebElement}
+ * {@link TouchableElement}
+ * {@link RemoteWebElement}
+ * {@link MobileElement} and its subclasses that designed specifically for each target mobile OS (still Android and iOS)
+ */
+@SuppressWarnings("unchecked")
+public abstract class AppiumDriver extends DefaultGenericMobileDriver {
private final static ErrorHandler errorHandler = new ErrorHandler(
new ErrorCodesMobile(), true);
@@ -71,40 +121,47 @@ protected static Capabilities substituteMobilePlatform(
return dc;
}
- public MobileElement findElement(By by){
- return (MobileElement) super.findElement(by);
+ @Override
+ public List findElements(By by){
+ return super.findElements(by);
+ }
+
+ @Override
+ public List findElementsById(String id){
+ return super.findElementsById(id);
}
- public MobileElement findElementById(String using){
- return (MobileElement) super.findElementById(using);
+ public List findElementsByLinkText(String using) {
+ return super.findElementsByLinkText(using);
}
- public MobileElement findElementByClassName(String using){
- return (MobileElement) super.findElementByClassName(using);
+ public List findElementsByPartialLinkText(String using) {
+ return super.findElementsByPartialLinkText(using);
}
- public MobileElement findElementByName(String using){
- return (MobileElement) super.findElementByName(using);
+ public List findElementsByTagName(String using) {
+ return super.findElementsByTagName(using);
}
- public MobileElement findElementByTagName(String using){
- return (MobileElement) super.findElementByTagName(using);
+ public List findElementsByName(String using) {
+ return super.findElementsByName(using);
}
- public MobileElement findElementByCssSelector(String using){
- return (MobileElement) super.findElementByCssSelector(using);
-}
+ public List findElementsByClassName(String using) {
+ return super.findElementsByClassName(using);
+ }
- public MobileElement findElementByLinkText(String using){
- return (MobileElement) super.findElementByLinkText(using);
+ public List findElementsByCssSelector(String using) {
+ return super.findElementsByCssSelector(using);
}
- public MobileElement findElementByPartialLinkText(String using){
- return (MobileElement) super.findElementByPartialLinkText(using);
+ public List findElementsByXPath(String using) {
+ return super.findElementsByXPath(using);
}
- public MobileElement findElementByXPath(String using){
- return (MobileElement) super.findElementByXPath(using);
+ @Override
+ public List findElementsByAccessibilityId(String using) {
+ return (List) findElements("accessibility id", using);
}
/**
@@ -210,15 +267,9 @@ public AppiumDriver(URL remoteAddress, Capabilities desiredCapabilities) {
super.setErrorHandler(errorHandler);
}
- @Override
- public Response execute(String driverCommand, Map parameters) {
-
- return super.execute(driverCommand, parameters);
- }
-
@Override
protected Response execute(String command) {
- return execute(command, ImmutableMap. of());
+ return super.execute(command, ImmutableMap.of());
}
@Override
@@ -335,7 +386,7 @@ public TouchAction performTouchAction(TouchAction touchAction) {
* @see PerformsTouchActions#performMultiTouchAction(MultiTouchAction)
*/
@Override
- @SuppressWarnings({ "rawtypes", "unchecked" })
+ @SuppressWarnings({ "rawtypes"})
public void performMultiTouchAction(MultiTouchAction multiAction) {
ImmutableMap parameters = multiAction
.getParameters();
@@ -562,7 +613,6 @@ public WebDriver context(String name) {
return AppiumDriver.this;
}
- @SuppressWarnings("unchecked")
@Override
public Set getContextHandles() {
Response response = execute(DriverCommand.GET_CONTEXT_HANDLES);
@@ -607,16 +657,6 @@ public ScreenOrientation getOrientation() {
}
}
- @Override
- public MobileElement findElementByAccessibilityId(String using) {
- return (MobileElement) findElement("accessibility id", using);
- }
-
- @Override
- public List findElementsByAccessibilityId(String using) {
- return findElements("accessibility id", using);
- }
-
@Override
public Location location() {
return locationContext.location();
diff --git a/src/main/java/io/appium/java_client/AppiumExecutionMethod.java b/src/main/java/io/appium/java_client/AppiumExecutionMethod.java
index 7f6eca79d..4bb4c96c5 100644
--- a/src/main/java/io/appium/java_client/AppiumExecutionMethod.java
+++ b/src/main/java/io/appium/java_client/AppiumExecutionMethod.java
@@ -7,9 +7,9 @@
import java.util.Map;
public class AppiumExecutionMethod implements ExecuteMethod {
- private final AppiumDriver driver;
+ private final AppiumDriver> driver;
- public AppiumExecutionMethod(AppiumDriver driver) {
+ public AppiumExecutionMethod(AppiumDriver> driver) {
this.driver = driver;
}
diff --git a/src/main/java/io/appium/java_client/DefaultGenericMobileDriver.java b/src/main/java/io/appium/java_client/DefaultGenericMobileDriver.java
new file mode 100644
index 000000000..767ca47f0
--- /dev/null
+++ b/src/main/java/io/appium/java_client/DefaultGenericMobileDriver.java
@@ -0,0 +1,115 @@
+package io.appium.java_client;
+
+import io.appium.java_client.MobileDriver;
+import io.appium.java_client.generic.searchcontext.*;
+
+import org.openqa.selenium.By;
+import org.openqa.selenium.Capabilities;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.remote.RemoteWebDriver;
+import org.openqa.selenium.remote.Response;
+
+import java.net.URL;
+import java.util.List;
+import java.util.Map;
+
+@SuppressWarnings({ "unchecked", "rawtypes" })
+abstract class DefaultGenericMobileDriver extends RemoteWebDriver implements MobileDriver,
+ GenericSearchContext, GenericFindsById, GenericFindsByXPath, GenericFindsByLinkText, GenericFindsByTagName,
+ GenericFindsByClassName, GenericFindsByCssSelector, GenericFindsByName{
+
+ public DefaultGenericMobileDriver(URL remoteAddress, Capabilities desiredCapabilities) {
+ super(remoteAddress, desiredCapabilities);
+ }
+
+ @Override
+ public Response execute(String driverCommand, Map parameters) {
+ return super.execute(driverCommand, parameters);
+ }
+
+ @Override
+ public List findElements(By by){
+ return super.findElements(by);
+ }
+
+ @Override
+ public T findElement(By by){
+ return (T) super.findElement(by);
+ }
+
+ @Override
+ public List findElementsById(String id){
+ return super.findElementsById(id);
+ }
+
+ @Override
+ public T findElementById(String id){
+ return (T) super.findElementById(id);
+ }
+
+ public T findElementByLinkText(String using) {
+ return (T) super.findElementByLinkText(using);
+ }
+
+ public List findElementsByLinkText(String using) {
+ return super.findElementsByLinkText(using);
+ }
+
+ public T findElementByPartialLinkText(String using) {
+ return (T) super.findElementByPartialLinkText(using);
+ }
+
+ public List findElementsByPartialLinkText(String using) {
+ return super.findElementsByPartialLinkText(using);
+ }
+
+ public T findElementByTagName(String using) {
+ return (T) super.findElementByTagName(using);
+ }
+
+ public List findElementsByTagName(String using) {
+ return super.findElementsByTagName(using);
+ }
+
+ public T findElementByName(String using) {
+ return (T) super.findElementByName(using);
+ }
+
+ public List findElementsByName(String using) {
+ return super.findElementsByName(using);
+ }
+
+ public T findElementByClassName(String using) {
+ return (T) super.findElementByClassName(using);
+ }
+
+ public List findElementsByClassName(String using) {
+ return super.findElementsByClassName(using);
+ }
+
+ public T findElementByCssSelector(String using) {
+ return (T) super.findElementByCssSelector(using);
+ }
+
+ public List findElementsByCssSelector(String using) {
+ return super.findElementsByCssSelector(using);
+ }
+
+ public T findElementByXPath(String using) {
+ return (T) super.findElementByXPath(using);
+ }
+
+ public List findElementsByXPath(String using) {
+ return super.findElementsByXPath(using);
+ }
+
+ @Override
+ public T findElementByAccessibilityId(String using) {
+ return (T) findElement("accessibility id", using);
+ }
+
+ @Override
+ public List findElementsByAccessibilityId(String using) {
+ return (List) findElements("accessibility id", using);
+ }
+}
diff --git a/src/main/java/io/appium/java_client/DefaultGenericMobileElement.java b/src/main/java/io/appium/java_client/DefaultGenericMobileElement.java
new file mode 100644
index 000000000..9dc5d5d6b
--- /dev/null
+++ b/src/main/java/io/appium/java_client/DefaultGenericMobileElement.java
@@ -0,0 +1,115 @@
+package io.appium.java_client;
+
+import io.appium.java_client.generic.searchcontext.GenericFindsByClassName;
+import io.appium.java_client.generic.searchcontext.GenericFindsByCssSelector;
+import io.appium.java_client.generic.searchcontext.GenericFindsById;
+import io.appium.java_client.generic.searchcontext.GenericFindsByLinkText;
+import io.appium.java_client.generic.searchcontext.GenericFindsByName;
+import io.appium.java_client.generic.searchcontext.GenericFindsByTagName;
+import io.appium.java_client.generic.searchcontext.GenericFindsByXPath;
+import io.appium.java_client.generic.searchcontext.GenericSearchContext;
+
+import java.util.List;
+import java.util.Map;
+
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.remote.RemoteWebElement;
+import org.openqa.selenium.remote.Response;
+
+@SuppressWarnings({ "unchecked", "rawtypes" })
+abstract class DefaultGenericMobileElement extends RemoteWebElement implements
+ GenericSearchContext, GenericFindsById, GenericFindsByXPath, GenericFindsByLinkText, GenericFindsByTagName,
+ GenericFindsByClassName, GenericFindsByCssSelector, GenericFindsByName, FindsByAccessibilityId, TouchableElement{
+
+ @Override
+ public Response execute(String driverCommand, Map parameters) {
+ return super.execute(driverCommand, parameters);
+ }
+
+ @Override
+ public List findElements(By by){
+ return super.findElements(by);
+ }
+
+ @Override
+ public T findElement(By by){
+ return (T) super.findElement(by);
+ }
+
+ @Override
+ public List findElementsById(String id){
+ return super.findElementsById(id);
+ }
+
+ @Override
+ public T findElementById(String id){
+ return (T) super.findElementById(id);
+ }
+
+ public T findElementByLinkText(String using) {
+ return (T) super.findElementByLinkText(using);
+ }
+
+ public List findElementsByLinkText(String using) {
+ return super.findElementsByLinkText(using);
+ }
+
+ public T findElementByPartialLinkText(String using) {
+ return (T) super.findElementByPartialLinkText(using);
+ }
+
+ public List findElementsByPartialLinkText(String using) {
+ return super.findElementsByPartialLinkText(using);
+ }
+
+ public T findElementByTagName(String using) {
+ return (T) super.findElementByTagName(using);
+ }
+
+ public List findElementsByTagName(String using) {
+ return super.findElementsByTagName(using);
+ }
+
+ public T findElementByName(String using) {
+ return (T) super.findElementByName(using);
+ }
+
+ public List findElementsByName(String using) {
+ return super.findElementsByName(using);
+ }
+
+ public T findElementByClassName(String using) {
+ return (T) super.findElementByClassName(using);
+ }
+
+ public List findElementsByClassName(String using) {
+ return super.findElementsByClassName(using);
+ }
+
+ public T findElementByCssSelector(String using) {
+ return (T) super.findElementByCssSelector(using);
+ }
+
+ public List findElementsByCssSelector(String using) {
+ return super.findElementsByCssSelector(using);
+ }
+
+ public T findElementByXPath(String using) {
+ return (T) super.findElementByXPath(using);
+ }
+
+ public List findElementsByXPath(String using) {
+ return super.findElementsByXPath(using);
+ }
+
+ @Override
+ public T findElementByAccessibilityId(String using) {
+ return (T) findElement("accessibility id", using);
+ }
+
+ @Override
+ public List findElementsByAccessibilityId(String using) {
+ return (List) findElements("accessibility id", using);
+ }
+}
diff --git a/src/main/java/io/appium/java_client/FindsByAccessibilityId.java b/src/main/java/io/appium/java_client/FindsByAccessibilityId.java
index bd29d5f40..f9506e1e2 100644
--- a/src/main/java/io/appium/java_client/FindsByAccessibilityId.java
+++ b/src/main/java/io/appium/java_client/FindsByAccessibilityId.java
@@ -20,8 +20,8 @@
import java.util.List;
-public interface FindsByAccessibilityId {
- T findElementByAccessibilityId(String using);
+public interface FindsByAccessibilityId {
+ T findElementByAccessibilityId(String using);
- List findElementsByAccessibilityId(String using);
+ List findElementsByAccessibilityId(String using);
}
\ No newline at end of file
diff --git a/src/main/java/io/appium/java_client/FindsByAndroidUIAutomator.java b/src/main/java/io/appium/java_client/FindsByAndroidUIAutomator.java
index 11e913e2b..0445d230d 100644
--- a/src/main/java/io/appium/java_client/FindsByAndroidUIAutomator.java
+++ b/src/main/java/io/appium/java_client/FindsByAndroidUIAutomator.java
@@ -1,5 +1,5 @@
/*
-Copyright 2014 Appium committers
+Copyright 2014-2015 Appium committers
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -20,9 +20,9 @@
import java.util.List;
-public interface FindsByAndroidUIAutomator {
+public interface FindsByAndroidUIAutomator {
- T findElementByAndroidUIAutomator(String using);
+ T findElementByAndroidUIAutomator(String using);
- List findElementsByAndroidUIAutomator(String using);
+ List findElementsByAndroidUIAutomator(String using);
}
\ No newline at end of file
diff --git a/src/main/java/io/appium/java_client/FindsByIosUIAutomation.java b/src/main/java/io/appium/java_client/FindsByIosUIAutomation.java
index 2394f8425..a731553e9 100644
--- a/src/main/java/io/appium/java_client/FindsByIosUIAutomation.java
+++ b/src/main/java/io/appium/java_client/FindsByIosUIAutomation.java
@@ -1,5 +1,5 @@
/*
-Copyright 2014 Appium committers
+Copyright 2014-2015 Appium committers
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -20,9 +20,9 @@
import java.util.List;
-public interface FindsByIosUIAutomation {
+public interface FindsByIosUIAutomation {
- T findElementByIosUIAutomation(String using);
+ T findElementByIosUIAutomation(String using);
- List findElementsByIosUIAutomation(String using);
+ List findElementsByIosUIAutomation(String using);
}
\ No newline at end of file
diff --git a/src/main/java/io/appium/java_client/MissingParameterException.java b/src/main/java/io/appium/java_client/MissingParameterException.java
index 3f5ab96ec..93e04613c 100644
--- a/src/main/java/io/appium/java_client/MissingParameterException.java
+++ b/src/main/java/io/appium/java_client/MissingParameterException.java
@@ -1,5 +1,6 @@
package io.appium.java_client;
+@SuppressWarnings("serial")
public class MissingParameterException extends IllegalArgumentException {
public MissingParameterException(String reason) {
diff --git a/src/main/java/io/appium/java_client/MobileBy.java b/src/main/java/io/appium/java_client/MobileBy.java
index a61d96c03..784b8345c 100644
--- a/src/main/java/io/appium/java_client/MobileBy.java
+++ b/src/main/java/io/appium/java_client/MobileBy.java
@@ -10,6 +10,7 @@
/**
* Created by jonahss on 4/10/14.
*/
+@SuppressWarnings("serial")
public abstract class MobileBy extends By {
public static By IosUIAutomation(final String uiautomationText) {
@@ -44,14 +45,16 @@ public ByIosUIAutomation(String uiautomationText) {
automationText = uiautomationText;
}
- @Override
+ @SuppressWarnings("unchecked")
+ @Override
public List findElements(SearchContext context) {
- return ((FindsByIosUIAutomation) context).findElementsByIosUIAutomation(automationText);
+ return (List) ((FindsByIosUIAutomation>) context).
+ findElementsByIosUIAutomation(automationText);
}
@Override
public WebElement findElement(SearchContext context) {
- return ((FindsByIosUIAutomation) context).findElementByIosUIAutomation(automationText);
+ return ((FindsByIosUIAutomation>) context).findElementByIosUIAutomation(automationText);
}
@Override
@@ -68,21 +71,24 @@ public ByAndroidUIAutomator(String uiautomatorText) {
automatorText = uiautomatorText;
}
- @Override
+ @SuppressWarnings("unchecked")
+ @Override
public List findElements(SearchContext context) {
- return ((FindsByAndroidUIAutomator) context).findElementsByAndroidUIAutomator(automatorText);
+ return (List) ((FindsByAndroidUIAutomator>) context).
+ findElementsByAndroidUIAutomator(automatorText);
}
@Override
public WebElement findElement(SearchContext context) {
- return ((FindsByAndroidUIAutomator) context).findElementByAndroidUIAutomator(automatorText);
+ return ((FindsByAndroidUIAutomator>) context).findElementByAndroidUIAutomator(automatorText);
}
@Override
public String toString() { return "By.AndroidUIAutomator: " + automatorText; }
}
- public static class ByAccessibilityId extends By implements Serializable {
+
+public static class ByAccessibilityId extends By implements Serializable {
private final String id;
@@ -90,14 +96,16 @@ public ByAccessibilityId(String id) {
this.id = id;
}
- @Override
+ @SuppressWarnings("unchecked")
+ @Override
public List findElements(SearchContext context) {
- return ((FindsByAccessibilityId) context).findElementsByAccessibilityId(id);
+ return (List)
+ ((FindsByAccessibilityId>) context).findElementsByAccessibilityId(id);
}
@Override
public WebElement findElement(SearchContext context) {
- return ((FindsByAccessibilityId) context).findElementByAccessibilityId(id);
+ return ((FindsByAccessibilityId>) context).findElementByAccessibilityId(id);
}
@Override
diff --git a/src/main/java/io/appium/java_client/MobileDriver.java b/src/main/java/io/appium/java_client/MobileDriver.java
index 9523175a6..42e2989b0 100644
--- a/src/main/java/io/appium/java_client/MobileDriver.java
+++ b/src/main/java/io/appium/java_client/MobileDriver.java
@@ -18,12 +18,18 @@
package io.appium.java_client;
import org.openqa.selenium.ContextAware;
+import org.openqa.selenium.Rotatable;
import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.html5.LocationContext;
import org.openqa.selenium.remote.Response;
import java.util.Map;
-public interface MobileDriver extends WebDriver, ContextAware,
- PerformsTouchActions {
+public interface MobileDriver extends WebDriver,
+ PerformsTouchActions,
+ ContextAware, Rotatable, FindsByAccessibilityId, LocationContext,
+ DeviceActionShortcuts, TouchShortcuts, InteractsWithFiles,
+ InteractsWithApps, ScrollsTo, HasAppStrings {
public Response execute(String driverCommand, Map parameters);
}
diff --git a/src/main/java/io/appium/java_client/MobileElement.java b/src/main/java/io/appium/java_client/MobileElement.java
index 196a50158..56f7d78df 100644
--- a/src/main/java/io/appium/java_client/MobileElement.java
+++ b/src/main/java/io/appium/java_client/MobileElement.java
@@ -22,26 +22,15 @@
import org.openqa.selenium.Point;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.FileDetector;
-import org.openqa.selenium.remote.RemoteWebElement;
+import java.util.ArrayList;
import java.util.List;
-public abstract class MobileElement extends RemoteWebElement implements FindsByAccessibilityId, TouchableElement {
+@SuppressWarnings({ "unchecked"})
+public abstract class MobileElement extends DefaultGenericMobileElement {
protected FileDetector fileDetector;
- public List findElements(By by) {
- return by.findElements(this);
- }
-
- public WebElement findElementByAccessibilityId(String using) {
- return findElement("accessibility id", using);
- }
-
- public List findElementsByAccessibilityId(String using) {
- return findElements("accessibility id", using);
- }
-
public Point getCenter() {
Point upperLeft = this.getLocation();
Dimension dimensions = this.getSize();
@@ -50,65 +39,76 @@ public Point getCenter() {
@Override
public void pinch() {
- ((AppiumDriver) parent).pinch(this);
+ ((AppiumDriver>) parent).pinch(this);
}
@Override
public void tap(int fingers, int duration) {
- ((AppiumDriver) parent).tap(fingers, this, duration);
+ ((AppiumDriver>) parent).tap(fingers, this, duration);
}
@Override
public void zoom() {
- ((AppiumDriver) parent).zoom(this);
+ ((AppiumDriver>) parent).zoom(this);
}
@Override
public void swipe(SwipeElementDirection direction, int duration) {
- direction.swipe((AppiumDriver) parent, this, 0, 0, duration);
+ direction.swipe((AppiumDriver>) parent, this, 0, 0, duration);
}
@Override
public void swipe(SwipeElementDirection direction, int offsetFromStartBorder,
int offsetFromEndBorder, int duration) throws IllegalCoordinatesException {
- direction.swipe((AppiumDriver) parent, this, offsetFromStartBorder,
+ direction.swipe((AppiumDriver>) parent, this, offsetFromStartBorder,
offsetFromEndBorder, duration);
}
- public MobileElement findElement(By by){
- return (MobileElement) super.findElements(by);
+ @Override
+ public List findElements(By by){
+ return super.findElements(by);
+ }
+
+ @Override
+ public List findElementsById(String id){
+ return super.findElementsById(id);
}
- public MobileElement findElementById(String using){
- return (MobileElement) super.findElementById(using);
+ public List findElementsByLinkText(String using) {
+ return super.findElementsByLinkText(using);
}
- public MobileElement findElementByClassName(String using){
- return (MobileElement) super.findElementByClassName(using);
+ public List findElementsByPartialLinkText(String using) {
+ return super.findElementsByPartialLinkText(using);
}
- public MobileElement findElementByName(String using){
- return (MobileElement) super.findElementByName(using);
+ public List findElementsByTagName(String using) {
+ return super.findElementsByTagName(using);
}
- public MobileElement findElementByTagName(String using){
- return (MobileElement) super.findElementByTagName(using);
+ public List findElementsByName(String using) {
+ return super.findElementsByName(using);
}
- public MobileElement findElementByCssSelector(String using){
- return (MobileElement) super.findElementByCssSelector(using);
+ public List findElementsByClassName(String using) {
+ return super.findElementsByClassName(using);
}
- public MobileElement findElementByLinkText(String using){
- return (MobileElement) super.findElementByLinkText(using);
+ public List findElementsByCssSelector(String using) {
+ return super.findElementsByCssSelector(using);
}
- public MobileElement findElementByPartialLinkText(String using){
- return (MobileElement) super.findElementByPartialLinkText(using);
+ public List findElementsByXPath(String using) {
+ return super.findElementsByXPath(using);
}
- public MobileElement findElementByXPath(String using){
- return (MobileElement) super.findElementByXPath(using);
+ @Override
+ public List findElementsByAccessibilityId(String using) {
+ List result = new ArrayList();
+ List found = findElements("accessibility id", using);
+ for (WebElement e: found)
+ result.add((MobileElement) e);
+ return result;
}
}
diff --git a/src/main/java/io/appium/java_client/MultiTouchAction.java b/src/main/java/io/appium/java_client/MultiTouchAction.java
index f1d5592fd..1f3a38871 100644
--- a/src/main/java/io/appium/java_client/MultiTouchAction.java
+++ b/src/main/java/io/appium/java_client/MultiTouchAction.java
@@ -41,6 +41,7 @@
*
* Calling perform() sends the action command to the Mobile Driver. Otherwise, more and more actions can be chained.
*/
+@SuppressWarnings({"rawtypes", "unchecked"})
public class MultiTouchAction {
private MobileDriver driver;
diff --git a/src/main/java/io/appium/java_client/NoSuchContextException.java b/src/main/java/io/appium/java_client/NoSuchContextException.java
index 477fee166..ed258547c 100644
--- a/src/main/java/io/appium/java_client/NoSuchContextException.java
+++ b/src/main/java/io/appium/java_client/NoSuchContextException.java
@@ -6,6 +6,7 @@
* Thrown by {@link org.openqa.selenium.WebDriver.TargetLocator#context(String) WebDriver.switchTo().context(String
* name)}.
*/
+@SuppressWarnings("serial")
public class NoSuchContextException extends NotFoundException {
public NoSuchContextException(String reason) {
diff --git a/src/main/java/io/appium/java_client/ScrollsTo.java b/src/main/java/io/appium/java_client/ScrollsTo.java
index 348ab4a40..9ec9a0f68 100644
--- a/src/main/java/io/appium/java_client/ScrollsTo.java
+++ b/src/main/java/io/appium/java_client/ScrollsTo.java
@@ -1,17 +1,19 @@
package io.appium.java_client;
-public interface ScrollsTo {
+import org.openqa.selenium.WebElement;
+
+public interface ScrollsTo {
/**
* Scroll to an element which contains the given text.
* @param text
*/
- public MobileElement scrollTo(String text);
+ public T scrollTo(String text);
/**
* Scroll to an element with the given text.
* @param text
*/
- public MobileElement scrollToExact(String text);
+ public T scrollToExact(String text);
}
diff --git a/src/main/java/io/appium/java_client/SwipeElementDirection.java b/src/main/java/io/appium/java_client/SwipeElementDirection.java
index 063605d8c..65f6d4f71 100644
--- a/src/main/java/io/appium/java_client/SwipeElementDirection.java
+++ b/src/main/java/io/appium/java_client/SwipeElementDirection.java
@@ -147,7 +147,7 @@ void checkDirection(int x1, int y1, int x2, int y2) {
abstract int getEndY(Point center, Point location, Dimension size, int offSet);
abstract void checkDirection(int x1, int y1, int x2, int y2);
- void swipe(AppiumDriver driver, MobileElement element,
+ void swipe(AppiumDriver> driver, MobileElement element,
int offset1, int offset2, int duration) throws IllegalCoordinatesException{
Point p = element.getCenter();
Point location = element.getLocation();
diff --git a/src/main/java/io/appium/java_client/TouchAction.java b/src/main/java/io/appium/java_client/TouchAction.java
index 3fd791991..9e53ac68c 100644
--- a/src/main/java/io/appium/java_client/TouchAction.java
+++ b/src/main/java/io/appium/java_client/TouchAction.java
@@ -33,6 +33,7 @@
*
* Calling perform() sends the action command to the Mobile Driver. Otherwise, more and more actions can be chained.
*/
+@SuppressWarnings({"rawtypes", "unchecked"})
public class TouchAction {
private MobileDriver driver;
diff --git a/src/main/java/io/appium/java_client/android/AndroidDriver.java b/src/main/java/io/appium/java_client/android/AndroidDriver.java
index c660f12a0..d05c971d4 100644
--- a/src/main/java/io/appium/java_client/android/AndroidDriver.java
+++ b/src/main/java/io/appium/java_client/android/AndroidDriver.java
@@ -5,7 +5,6 @@
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.AppiumSetting;
import io.appium.java_client.FindsByAndroidUIAutomator;
-import io.appium.java_client.MobileElement;
import io.appium.java_client.NetworkConnectionSetting;
import io.appium.java_client.android.internal.JsonToAndroidElementConverter;
import io.appium.java_client.remote.MobilePlatform;
@@ -21,9 +20,20 @@
import static io.appium.java_client.MobileCommand.*;
import static io.appium.java_client.remote.MobileCapabilityType.*;
-public class AndroidDriver extends AppiumDriver implements
+/**
+ * @param means the required type from the list of allowed types below
+ * that implement {@link WebElement} Instances of the defined type will be
+ * returned via findElement* and findElements*.
+ * Warning (!!!). Allowed types:
+ * {@link WebElement}
+ * {@link TouchableElement}
+ * {@link RemoteWebElement}
+ * {@link MobileElement}
+ * {@link AndroidElement}
+ */
+public class AndroidDriver extends AppiumDriver implements
AndroidDeviceActionShortcuts, HasNetworkConnection, PushesFiles,
- StartsActivity, FindsByAndroidUIAutomator {
+ StartsActivity, FindsByAndroidUIAutomator {
private static final String ANDROID_PLATFORM = MobilePlatform.ANDROID;
@@ -47,10 +57,10 @@ public AndroidDriver(URL remoteAddress, Capabilities desiredCapabilities) {
* @param text
*/
@Override
- public MobileElement scrollTo(String text) {
+ public RequiredElementType scrollTo(String text) {
String uiScrollables = UiScrollable("new UiSelector().descriptionContains(\"" + text + "\")") +
UiScrollable("new UiSelector().textContains(\"" + text + "\")");
- return (MobileElement) findElementByAndroidUIAutomator(uiScrollables);
+ return findElementByAndroidUIAutomator(uiScrollables);
}
/**
@@ -59,10 +69,10 @@ public MobileElement scrollTo(String text) {
* @param text
*/
@Override
- public MobileElement scrollToExact(String text) {
+ public RequiredElementType scrollToExact(String text) {
String uiScrollables = UiScrollable("new UiSelector().description(\"" + text + "\")") +
UiScrollable("new UiSelector().text(\"" + text + "\")");
- return (MobileElement) findElementByAndroidUIAutomator(uiScrollables);
+ return findElementByAndroidUIAutomator(uiScrollables);
}
static String UiScrollable(String uiSelector) {
@@ -250,14 +260,16 @@ public void ignoreUnimportantViews(Boolean compress) {
setSetting(AppiumSetting.IGNORE_UNIMPORTANT_VIEWS, compress);
}
+ @SuppressWarnings("unchecked")
@Override
- public AndroidElement findElementByAndroidUIAutomator(String using) {
- return (AndroidElement) findElement("-android uiautomator", using);
+ public RequiredElementType findElementByAndroidUIAutomator(String using) {
+ return (RequiredElementType) findElement("-android uiautomator", using);
}
+ @SuppressWarnings("unchecked")
@Override
- public List findElementsByAndroidUIAutomator(String using) {
- return findElements("-android uiautomator", using);
+ public List findElementsByAndroidUIAutomator(String using) {
+ return (List) findElements("-android uiautomator", using);
}
}
diff --git a/src/main/java/io/appium/java_client/android/AndroidElement.java b/src/main/java/io/appium/java_client/android/AndroidElement.java
index 1fea1bce6..4b8502ff1 100644
--- a/src/main/java/io/appium/java_client/android/AndroidElement.java
+++ b/src/main/java/io/appium/java_client/android/AndroidElement.java
@@ -1,5 +1,6 @@
package io.appium.java_client.android;
+import java.util.ArrayList;
import java.util.List;
import org.openqa.selenium.WebElement;
@@ -7,17 +8,22 @@
import io.appium.java_client.FindsByAndroidUIAutomator;
import io.appium.java_client.MobileElement;
+
public class AndroidElement extends MobileElement implements
- FindsByAndroidUIAutomator {
+ FindsByAndroidUIAutomator {
@Override
- public AndroidElement findElementByAndroidUIAutomator(String using) {
- return (AndroidElement) findElement("-android uiautomator", using);
+ public MobileElement findElementByAndroidUIAutomator(String using) {
+ return (MobileElement) findElement("-android uiautomator", using);
}
@Override
- public List findElementsByAndroidUIAutomator(String using) {
- return findElements("-android uiautomator", using);
+ public List findElementsByAndroidUIAutomator(String using) {
+ List result = new ArrayList();
+ List found = findElements("-android uiautomator", using);
+ for (WebElement e: found)
+ result.add((AndroidElement) e);
+ return result;
}
}
diff --git a/src/main/java/io/appium/java_client/android/internal/JsonToAndroidElementConverter.java b/src/main/java/io/appium/java_client/android/internal/JsonToAndroidElementConverter.java
index 8e419e9e9..657915ee0 100644
--- a/src/main/java/io/appium/java_client/android/internal/JsonToAndroidElementConverter.java
+++ b/src/main/java/io/appium/java_client/android/internal/JsonToAndroidElementConverter.java
@@ -7,7 +7,7 @@
public class JsonToAndroidElementConverter extends JsonToMobileElementConverter {
- public JsonToAndroidElementConverter(AppiumDriver driver) {
+ public JsonToAndroidElementConverter(AppiumDriver> driver) {
super(driver);
}
diff --git a/src/main/java/io/appium/java_client/generic/searchcontext/GenericFindsByClassName.java b/src/main/java/io/appium/java_client/generic/searchcontext/GenericFindsByClassName.java
new file mode 100644
index 000000000..d275d6e13
--- /dev/null
+++ b/src/main/java/io/appium/java_client/generic/searchcontext/GenericFindsByClassName.java
@@ -0,0 +1,10 @@
+package io.appium.java_client.generic.searchcontext;
+
+import org.openqa.selenium.WebElement;
+
+import java.util.List;
+
+public interface GenericFindsByClassName {
+ T findElementByClassName(String className);
+ List findElementsByClassName(String className);
+}
diff --git a/src/main/java/io/appium/java_client/generic/searchcontext/GenericFindsByCssSelector.java b/src/main/java/io/appium/java_client/generic/searchcontext/GenericFindsByCssSelector.java
new file mode 100644
index 000000000..064fb0b0e
--- /dev/null
+++ b/src/main/java/io/appium/java_client/generic/searchcontext/GenericFindsByCssSelector.java
@@ -0,0 +1,10 @@
+package io.appium.java_client.generic.searchcontext;
+
+import org.openqa.selenium.WebElement;
+
+import java.util.List;
+
+public interface GenericFindsByCssSelector {
+ T findElementByCssSelector(String cssSelector);
+ List findElementsByCssSelector(String cssSelector);
+}
diff --git a/src/main/java/io/appium/java_client/generic/searchcontext/GenericFindsById.java b/src/main/java/io/appium/java_client/generic/searchcontext/GenericFindsById.java
new file mode 100644
index 000000000..4bf1d3fa7
--- /dev/null
+++ b/src/main/java/io/appium/java_client/generic/searchcontext/GenericFindsById.java
@@ -0,0 +1,10 @@
+package io.appium.java_client.generic.searchcontext;
+
+import org.openqa.selenium.WebElement;
+
+import java.util.List;
+
+public interface GenericFindsById {
+ T findElementById(String id);
+ List findElementsById(String id);
+}
diff --git a/src/main/java/io/appium/java_client/generic/searchcontext/GenericFindsByLinkText.java b/src/main/java/io/appium/java_client/generic/searchcontext/GenericFindsByLinkText.java
new file mode 100644
index 000000000..593f0d8be
--- /dev/null
+++ b/src/main/java/io/appium/java_client/generic/searchcontext/GenericFindsByLinkText.java
@@ -0,0 +1,12 @@
+package io.appium.java_client.generic.searchcontext;
+
+import org.openqa.selenium.WebElement;
+
+import java.util.List;
+
+public interface GenericFindsByLinkText {
+ T findElementByLinkText(String linkText);
+ List findElementsByLinkText(String linkText);
+ WebElement findElementByPartialLinkText(String partialLinkText);
+ List findElementsByPartialLinkText(String partialLinkText);
+}
diff --git a/src/main/java/io/appium/java_client/generic/searchcontext/GenericFindsByName.java b/src/main/java/io/appium/java_client/generic/searchcontext/GenericFindsByName.java
new file mode 100644
index 000000000..d13e76f95
--- /dev/null
+++ b/src/main/java/io/appium/java_client/generic/searchcontext/GenericFindsByName.java
@@ -0,0 +1,10 @@
+package io.appium.java_client.generic.searchcontext;
+
+import org.openqa.selenium.WebElement;
+
+import java.util.List;
+
+public interface GenericFindsByName {
+ T findElementByName(String name);
+ List findElementsByName(String name);
+}
diff --git a/src/main/java/io/appium/java_client/generic/searchcontext/GenericFindsByTagName.java b/src/main/java/io/appium/java_client/generic/searchcontext/GenericFindsByTagName.java
new file mode 100644
index 000000000..918f0ae8a
--- /dev/null
+++ b/src/main/java/io/appium/java_client/generic/searchcontext/GenericFindsByTagName.java
@@ -0,0 +1,10 @@
+package io.appium.java_client.generic.searchcontext;
+
+import org.openqa.selenium.WebElement;
+
+import java.util.List;
+
+public interface GenericFindsByTagName {
+ WebElement findElementByTagName(String tagName);
+ List findElementsByTagName(String tagName);
+}
diff --git a/src/main/java/io/appium/java_client/generic/searchcontext/GenericFindsByXPath.java b/src/main/java/io/appium/java_client/generic/searchcontext/GenericFindsByXPath.java
new file mode 100644
index 000000000..54a9371f1
--- /dev/null
+++ b/src/main/java/io/appium/java_client/generic/searchcontext/GenericFindsByXPath.java
@@ -0,0 +1,10 @@
+package io.appium.java_client.generic.searchcontext;
+
+import org.openqa.selenium.WebElement;
+
+import java.util.List;
+
+public interface GenericFindsByXPath {
+ T findElementByXPath(String xPath);
+ List findElementsByXPath(String xPath);
+}
diff --git a/src/main/java/io/appium/java_client/generic/searchcontext/GenericSearchContext.java b/src/main/java/io/appium/java_client/generic/searchcontext/GenericSearchContext.java
new file mode 100644
index 000000000..9c0009704
--- /dev/null
+++ b/src/main/java/io/appium/java_client/generic/searchcontext/GenericSearchContext.java
@@ -0,0 +1,11 @@
+package io.appium.java_client.generic.searchcontext;
+
+import org.openqa.selenium.By;
+import org.openqa.selenium.WebElement;
+
+import java.util.List;
+
+public interface GenericSearchContext {
+ List findElements(By by);
+ T findElement(By by);
+}
diff --git a/src/main/java/io/appium/java_client/internal/JsonToMobileElementConverter.java b/src/main/java/io/appium/java_client/internal/JsonToMobileElementConverter.java
index c74da925d..d509c1344 100644
--- a/src/main/java/io/appium/java_client/internal/JsonToMobileElementConverter.java
+++ b/src/main/java/io/appium/java_client/internal/JsonToMobileElementConverter.java
@@ -18,9 +18,9 @@
* and Maps to catch nested references. All other values pass through the converter unchanged.
*/
public abstract class JsonToMobileElementConverter extends JsonToWebElementConverter {
- protected AppiumDriver driver;
+ protected AppiumDriver> driver;
- public JsonToMobileElementConverter(AppiumDriver driver) {
+ public JsonToMobileElementConverter(AppiumDriver> driver) {
super(driver);
this.driver = driver;
}
diff --git a/src/main/java/io/appium/java_client/ios/GetsNamedTextField.java b/src/main/java/io/appium/java_client/ios/GetsNamedTextField.java
index 136bb4950..a15475a6e 100644
--- a/src/main/java/io/appium/java_client/ios/GetsNamedTextField.java
+++ b/src/main/java/io/appium/java_client/ios/GetsNamedTextField.java
@@ -2,7 +2,7 @@
import org.openqa.selenium.WebElement;
-public interface GetsNamedTextField {
+public interface GetsNamedTextField {
/**
* In iOS apps, named TextFields have the same accessibility Id as their
* containing TableElement. This is a convenience method for getting the
@@ -12,6 +12,6 @@ public interface GetsNamedTextField {
* accessiblity id of TextField
* @return The textfield with the given accessibility id
*/
- public T getNamedTextField(String name);
+ public T getNamedTextField(String name);
}
diff --git a/src/main/java/io/appium/java_client/ios/IOSDriver.java b/src/main/java/io/appium/java_client/ios/IOSDriver.java
index d417e34f4..f122ee0a5 100644
--- a/src/main/java/io/appium/java_client/ios/IOSDriver.java
+++ b/src/main/java/io/appium/java_client/ios/IOSDriver.java
@@ -3,8 +3,9 @@
import com.google.common.collect.ImmutableMap;
import io.appium.java_client.AppiumDriver;
+import io.appium.java_client.FindsByAccessibilityId;
import io.appium.java_client.FindsByIosUIAutomation;
-import io.appium.java_client.MobileElement;
+import io.appium.java_client.ScrollsTo;
import io.appium.java_client.ios.internal.JsonToIOSElementConverter;
import io.appium.java_client.remote.MobilePlatform;
@@ -16,7 +17,19 @@
import static io.appium.java_client.MobileCommand.*;
-public class IOSDriver extends AppiumDriver implements IOSDeviceActionShortcuts, GetsNamedTextField, FindsByIosUIAutomation{
+/**
+ * @param means the required type from the list of allowed types below
+ * that implement {@link WebElement} Instances of the defined type will be
+ * returned via findElement* and findElements*.
+ * Warning (!!!). Allowed types:
+ * {@link WebElement}
+ * {@link TouchableElement}
+ * {@link RemoteWebElement}
+ * {@link MobileElement}
+ * {@link IOSElement}
+ */
+public class IOSDriver extends AppiumDriver implements IOSDeviceActionShortcuts, GetsNamedTextField,
+FindsByIosUIAutomation{
private static final String IOS_PLATFORM = MobilePlatform.IOS;
public IOSDriver(URL remoteAddress, Capabilities desiredCapabilities) {
@@ -30,9 +43,11 @@ public IOSDriver(URL remoteAddress, Capabilities desiredCapabilities) {
* This scrolling happens within the first UIATableView on the UI. Use the method on IOSElement to scroll from a different ScrollView.
* @param text input text contained in text attribute
*/
- @Override
- public MobileElement scrollTo(String text) {
- return ((IOSElement) findElementByClassName("UIATableView")).scrollTo(text);
+ @SuppressWarnings("unchecked")
+@Override
+ public RequiredElementType scrollTo(String text) {
+ return (RequiredElementType) ((ScrollsTo>)
+ findElementByClassName("UIATableView")).scrollTo(text);
}
/**
@@ -40,9 +55,11 @@ public MobileElement scrollTo(String text) {
* This scrolling happens within the first UIATableView on the UI. Use the method on IOSElement to scroll from a different ScrollView.
* @param text input text to match
*/
- @Override
- public MobileElement scrollToExact(String text) {
- return ((IOSElement) findElementByClassName("UIATableView")).scrollToExact(text);
+ @SuppressWarnings("unchecked")
+@Override
+ public RequiredElementType scrollToExact(String text) {
+ return (RequiredElementType) ((ScrollsTo>)
+ findElementByClassName("UIATableView")).scrollToExact(text);
}
/**
@@ -74,22 +91,26 @@ public void shake() {
/**
* @see GetsNamedTextField#getNamedTextField(String)
*/
+ @SuppressWarnings("unchecked")
@Override
- public IOSElement getNamedTextField(String name) {
- IOSElement element = (IOSElement) findElementByAccessibilityId(name);
+ public RequiredElementType getNamedTextField(String name) {
+ RequiredElementType element = findElementByAccessibilityId(name);
if (element.getTagName() != "TextField") {
- return (IOSElement) element.findElementByAccessibilityId(name);
+ return (RequiredElementType) ((FindsByAccessibilityId>) element).
+ findElementByAccessibilityId(name);
}
return element;
}
+ @SuppressWarnings("unchecked")
@Override
- public IOSElement findElementByIosUIAutomation(String using) {
- return (IOSElement) findElement("-ios uiautomation", using);
+ public RequiredElementType findElementByIosUIAutomation(String using) {
+ return (RequiredElementType) findElement("-ios uiautomation", using);
}
+ @SuppressWarnings("unchecked")
@Override
- public List findElementsByIosUIAutomation(String using) {
- return findElements("-ios uiautomation", using);
+ public List findElementsByIosUIAutomation(String using) {
+ return (List) findElements("-ios uiautomation", using);
}
}
diff --git a/src/main/java/io/appium/java_client/ios/IOSElement.java b/src/main/java/io/appium/java_client/ios/IOSElement.java
index d99f984d5..de5c4f80d 100644
--- a/src/main/java/io/appium/java_client/ios/IOSElement.java
+++ b/src/main/java/io/appium/java_client/ios/IOSElement.java
@@ -9,18 +9,24 @@
import com.google.common.collect.ImmutableMap;
+import java.util.ArrayList;
import java.util.List;
-public class IOSElement extends MobileElement implements FindsByIosUIAutomation, ScrollsTo {
+public class IOSElement extends MobileElement implements
+FindsByIosUIAutomation, ScrollsTo {
@Override
- public IOSElement findElementByIosUIAutomation(String using) {
+ public MobileElement findElementByIosUIAutomation(String using) {
return (IOSElement) findElement("-ios uiautomation", using);
}
@Override
- public List findElementsByIosUIAutomation(String using) {
- return findElements("-ios uiautomation", using);
+ public List findElementsByIosUIAutomation(String using) {
+ List result = new ArrayList();
+ List found = findElements("-ios uiautomation", using);
+ for (WebElement e: found)
+ result.add((IOSElement) e);
+ return result;
}
/**
@@ -30,7 +36,7 @@ public List findElementsByIosUIAutomation(String using) {
*/
@Override
public MobileElement scrollTo(String text) {
- return (MobileElement) findElementByIosUIAutomation(".scrollToElementWithPredicate(\"name CONTAINS '" + text + "'\")");
+ return (IOSElement) findElementByIosUIAutomation(".scrollToElementWithPredicate(\"name CONTAINS '" + text + "'\")");
}
/**
@@ -40,7 +46,7 @@ public MobileElement scrollTo(String text) {
*/
@Override
public MobileElement scrollToExact(String text) {
- return (MobileElement) findElementByIosUIAutomation(".scrollToElementWithName(\"" + text + "\")");
+ return (IOSElement) findElementByIosUIAutomation(".scrollToElementWithName(\"" + text + "\")");
}
@SuppressWarnings({ "rawtypes", "unchecked" })
diff --git a/src/main/java/io/appium/java_client/ios/internal/JsonToIOSElementConverter.java b/src/main/java/io/appium/java_client/ios/internal/JsonToIOSElementConverter.java
index d44be548d..10ac1d3f2 100644
--- a/src/main/java/io/appium/java_client/ios/internal/JsonToIOSElementConverter.java
+++ b/src/main/java/io/appium/java_client/ios/internal/JsonToIOSElementConverter.java
@@ -7,7 +7,7 @@
public class JsonToIOSElementConverter extends JsonToMobileElementConverter {
- public JsonToIOSElementConverter(AppiumDriver driver) {
+ public JsonToIOSElementConverter(AppiumDriver> driver) {
super(driver);
}
diff --git a/src/test/java/io/appium/java_client/AppiumDriverTest.java b/src/test/java/io/appium/java_client/AppiumDriverTest.java
index b19514e73..9ea74b749 100644
--- a/src/test/java/io/appium/java_client/AppiumDriverTest.java
+++ b/src/test/java/io/appium/java_client/AppiumDriverTest.java
@@ -20,10 +20,12 @@
import io.appium.java_client.ios.IOSDriver;
import io.appium.java_client.remote.MobileCapabilityType;
import io.appium.java_client.remote.MobilePlatform;
+
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.ScreenOrientation;
+import org.openqa.selenium.WebElement;
import org.openqa.selenium.html5.Location;
import org.openqa.selenium.remote.DesiredCapabilities;
@@ -37,7 +39,7 @@
*/
public class AppiumDriverTest {
- private AppiumDriver driver;
+ private AppiumDriver> driver;
@Before
public void setup() throws Exception {
@@ -49,7 +51,7 @@ public void setup() throws Exception {
capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, MobilePlatform.IOS);
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "iPhone Simulator");
capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
- driver = new IOSDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
+ driver = new IOSDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
}
@After
diff --git a/src/test/java/io/appium/java_client/ContextTest.java b/src/test/java/io/appium/java_client/ContextTest.java
index af97bf76a..f2c0d9a69 100644
--- a/src/test/java/io/appium/java_client/ContextTest.java
+++ b/src/test/java/io/appium/java_client/ContextTest.java
@@ -19,9 +19,11 @@
import io.appium.java_client.ios.IOSDriver;
import io.appium.java_client.remote.MobileCapabilityType;
+
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.io.File;
@@ -34,7 +36,7 @@
*/
public class ContextTest {
- private AppiumDriver driver;
+ private AppiumDriver> driver;
@Before
public void setup() throws Exception {
@@ -45,7 +47,7 @@ public void setup() throws Exception {
capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "7.1");
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "iPhone Simulator");
capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
- driver = new IOSDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
+ driver = new IOSDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
}
@After
diff --git a/src/test/java/io/appium/java_client/android/AndroidAccessibilityTest.java b/src/test/java/io/appium/java_client/android/AndroidAccessibilityTest.java
index 01ed4d73a..6b8681d8a 100644
--- a/src/test/java/io/appium/java_client/android/AndroidAccessibilityTest.java
+++ b/src/test/java/io/appium/java_client/android/AndroidAccessibilityTest.java
@@ -15,12 +15,11 @@
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
-import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
public class AndroidAccessibilityTest {
- private AppiumDriver driver;
+ private AppiumDriver driver;
@Before
public void setUp() throws Exception {
@@ -29,7 +28,7 @@ public void setUp() throws Exception {
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
- driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
+ driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
}
@After
@@ -39,7 +38,7 @@ public void tearDown() throws Exception {
@Test
public void findElementsTest() {
- List elements = driver.findElementsByAccessibilityId("Accessibility");
+ List elements = driver.findElementsByAccessibilityId("Accessibility");
assertTrue(elements.size() > 0);
}
@@ -52,13 +51,13 @@ public void findElementTest() {
@Test
public void MobileElementByTest() {
- WebElement element = driver.findElement(MobileBy.AccessibilityId("Accessibility"));
+ MobileElement element = driver.findElement(MobileBy.AccessibilityId("Accessibility"));
assertNotNull(element);
}
@Test
public void MobileElementsByTest() {
- List elements = driver.findElements(MobileBy.AccessibilityId("Accessibility"));
+ List elements = driver.findElements(MobileBy.AccessibilityId("Accessibility"));
assertTrue(elements.size() > 0);
}
diff --git a/src/test/java/io/appium/java_client/android/AndroidDriverTest.java b/src/test/java/io/appium/java_client/android/AndroidDriverTest.java
index 0b7936cd6..9419a0698 100644
--- a/src/test/java/io/appium/java_client/android/AndroidDriverTest.java
+++ b/src/test/java/io/appium/java_client/android/AndroidDriverTest.java
@@ -37,7 +37,7 @@
*/
public class AndroidDriverTest {
- private AndroidDriver driver;
+ private AndroidDriver> driver;
@Before
public void setup() throws Exception {
@@ -48,7 +48,7 @@ public void setup() throws Exception {
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
capabilities.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 120);
- driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
+ driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
}
@After
diff --git a/src/test/java/io/appium/java_client/android/AndroidGestureTest.java b/src/test/java/io/appium/java_client/android/AndroidGestureTest.java
index b7a090351..bc330654b 100644
--- a/src/test/java/io/appium/java_client/android/AndroidGestureTest.java
+++ b/src/test/java/io/appium/java_client/android/AndroidGestureTest.java
@@ -37,7 +37,7 @@
* Test Mobile Driver features
*/
public class AndroidGestureTest {
- private AndroidDriver driver;
+ private AndroidDriver driver;
@Before
public void setup() throws Exception {
@@ -47,7 +47,7 @@ public void setup() throws Exception {
capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, "");
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
- driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
+ driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
}
@After
@@ -130,7 +130,7 @@ public void elementGestureTest(){
e2.swipe(SwipeElementDirection.UP,1000);
System.out.println("UP");
- e2 = (MobileElement) driver.findElementByClassName("android.widget.TextView");
+ e2 = driver.findElementByClassName("android.widget.TextView");
e2.swipe(SwipeElementDirection.UP, 10, 20, 1000);
System.out.println("UP Bottom + 10 Top - 20");
diff --git a/src/test/java/io/appium/java_client/android/AndroidUIAutomatorTest.java b/src/test/java/io/appium/java_client/android/AndroidUIAutomatorTest.java
index 3c530dd69..f40e003a2 100644
--- a/src/test/java/io/appium/java_client/android/AndroidUIAutomatorTest.java
+++ b/src/test/java/io/appium/java_client/android/AndroidUIAutomatorTest.java
@@ -1,30 +1,28 @@
package io.appium.java_client.android;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import io.appium.java_client.MobileBy;
import io.appium.java_client.MobileElement;
-import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.remote.MobileCapabilityType;
import io.appium.java_client.remote.MobilePlatform;
+import java.io.File;
+import java.net.URL;
+import java.util.List;
+
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
-import java.io.File;
-import java.net.URL;
-import java.util.List;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
/**
* Test -android uiautomator locator strategy
*/
public class AndroidUIAutomatorTest {
- private AndroidDriver driver;
+ private AndroidDriver driver;
@Before
public void setup() throws Exception {
@@ -35,7 +33,7 @@ public void setup() throws Exception {
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, MobilePlatform.ANDROID);
capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
- driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
+ driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
}
@After
@@ -51,28 +49,28 @@ public void findElementTest() {
@Test
public void findElementsTest() {
- List elements = driver.findElementsByAndroidUIAutomator("new UiSelector().clickable(true)");
+ List elements = driver.findElementsByAndroidUIAutomator("new UiSelector().clickable(true)");
assertTrue(elements.size() > 11);
}
@Test
public void findElementByTest() {
- WebElement element = driver.findElement(MobileBy.AndroidUIAutomator("new UiSelector().index(0)"));
+ AndroidElement element = driver.findElement(MobileBy.AndroidUIAutomator("new UiSelector().index(0)"));
assertEquals("android.widget.FrameLayout", element.getTagName());
}
@Test
public void findElementsByTest() {
- List elements = driver.findElements(MobileBy.AndroidUIAutomator("new UiSelector().clickable(true)"));
+ List elements = driver.findElements(MobileBy.AndroidUIAutomator("new UiSelector().clickable(true)"));
assertTrue(elements.size() > 11);
}
@Test
public void findChainedElementsTest() {
- AndroidElement el1 = (AndroidElement) driver.findElementByAndroidUIAutomator("resourceId(\"android:id/content\")");
- AndroidElement el2 = (AndroidElement) el1.findElementByAndroidUIAutomator("text(\"Accessibility\")");
+ AndroidElement el1 = driver.findElementByAndroidUIAutomator("resourceId(\"android:id/content\")");
+ MobileElement el2 = el1.findElement(MobileBy.AndroidUIAutomator("text(\"Accessibility\")"));
el2.click();
- MobileElement el3 = (MobileElement) driver.findElementByAndroidUIAutomator("text(\"Custom View\")");
+ AndroidElement el3 = driver.findElementByAndroidUIAutomator("text(\"Custom View\")");
assertTrue(el3.isDisplayed());
}
diff --git a/src/test/java/io/appium/java_client/ios/IOSAccessibilityIdTest.java b/src/test/java/io/appium/java_client/ios/IOSAccessibilityIdTest.java
index 472ca7a5a..e41c8be9e 100644
--- a/src/test/java/io/appium/java_client/ios/IOSAccessibilityIdTest.java
+++ b/src/test/java/io/appium/java_client/ios/IOSAccessibilityIdTest.java
@@ -22,7 +22,7 @@
*/
public class IOSAccessibilityIdTest {
- private AppiumDriver driver;
+ private AppiumDriver> driver;
@Before
public void setup() throws Exception {
@@ -33,7 +33,7 @@ public void setup() throws Exception {
capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "7.1");
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "iPhone Simulator");
capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
- driver = new IOSDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
+ driver = new IOSDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
}
@After
@@ -49,7 +49,7 @@ public void findElementTest() {
@Test
public void findElementsTest() {
- List elements = driver.findElementsByAccessibilityId("UICatalog");
+ List extends WebElement> elements = driver.findElementsByAccessibilityId("UICatalog");
assertTrue(elements.size() > 0);
}
@@ -61,7 +61,7 @@ public void MobileElementByTest() {
@Test
public void MobileElementsByTest() {
- List elements = driver.findElements(MobileBy.AccessibilityId("UICatalog"));
+ List extends WebElement> elements = driver.findElements(MobileBy.AccessibilityId("UICatalog"));
assertTrue(elements.size() > 0);
}
}
diff --git a/src/test/java/io/appium/java_client/ios/IOSDriverTest.java b/src/test/java/io/appium/java_client/ios/IOSDriverTest.java
index e7c7eb397..03f3ef449 100644
--- a/src/test/java/io/appium/java_client/ios/IOSDriverTest.java
+++ b/src/test/java/io/appium/java_client/ios/IOSDriverTest.java
@@ -42,7 +42,7 @@
*/
public class IOSDriverTest {
- private IOSDriver driver;
+ private IOSDriver driver;
@Before
public void setup() throws Exception {
@@ -53,7 +53,7 @@ public void setup() throws Exception {
capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "7.1");
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "iPhone Simulator");
capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
- driver = new IOSDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
+ driver = new IOSDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
}
@After
diff --git a/src/test/java/io/appium/java_client/ios/IosUIAutomationTest.java b/src/test/java/io/appium/java_client/ios/IosUIAutomationTest.java
index 62d72f9f3..c397ef60a 100644
--- a/src/test/java/io/appium/java_client/ios/IosUIAutomationTest.java
+++ b/src/test/java/io/appium/java_client/ios/IosUIAutomationTest.java
@@ -21,7 +21,7 @@
*/
public class IosUIAutomationTest {
- private IOSDriver driver;
+ private IOSDriver driver;
@Before
public void setup() throws Exception {
@@ -32,7 +32,7 @@ public void setup() throws Exception {
capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "7.1");
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "iPhone Simulator");
capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
- driver = new IOSDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
+ driver = new IOSDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
}
@After
diff --git a/src/test/java/io/appium/java_client/ios/iOSGestureTest.java b/src/test/java/io/appium/java_client/ios/iOSGestureTest.java
index 0a381e291..289b08990 100644
--- a/src/test/java/io/appium/java_client/ios/iOSGestureTest.java
+++ b/src/test/java/io/appium/java_client/ios/iOSGestureTest.java
@@ -42,7 +42,7 @@
*/
public class iOSGestureTest {
- private AppiumDriver driver;
+ private AppiumDriver driver;
@Before
public void setup() throws Exception {
@@ -53,7 +53,7 @@ public void setup() throws Exception {
capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "7.1");
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "iPhone Simulator");
capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
- driver = new IOSDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
+ driver = new IOSDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
}
@After
@@ -133,7 +133,7 @@ public void TapSingleFingerTest() {
@Test
public void elementGestureTest(){
- MobileElement e = (MobileElement) driver.findElementByName("TextField1");
+ MobileElement e = (MobileElement) driver.findElementByName("TextField1");
e.tap(1, 1500);
e.zoom();
e.pinch();
diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/AndroidPageObjectTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/AndroidPageObjectTest.java
index e5a8fc9ef..f66372645 100644
--- a/src/test/java/io/appium/java_client/pagefactory_tests/AndroidPageObjectTest.java
+++ b/src/test/java/io/appium/java_client/pagefactory_tests/AndroidPageObjectTest.java
@@ -154,6 +154,7 @@ public class AndroidPageObjectTest {
@SelendroidFindBy(id = "Invalid Identifier")
private WebElement textAndroidId;
+ @SuppressWarnings("rawtypes")
@Before
public void setUp() throws Exception {
File appDir = new File("src/test/java/io/appium/java_client");
diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/DesctopBrowserCompatibilityTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/DesctopBrowserCompatibilityTest.java
index 354104e46..c2aacd572 100644
--- a/src/test/java/io/appium/java_client/pagefactory_tests/DesctopBrowserCompatibilityTest.java
+++ b/src/test/java/io/appium/java_client/pagefactory_tests/DesctopBrowserCompatibilityTest.java
@@ -167,7 +167,7 @@ public void setUp(Class extends WebDriver> driverClass) {
private List ires; //this list is located by id="ires"
private WebElement gbqfb; //this element is found by id="gbqfb"
private WebDriver trap1;
- private List trap2;
+ private List> trap2;
private void test(WebDriver driver){
try {
diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/MobileBrowserCompatibilityTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/MobileBrowserCompatibilityTest.java
index 4163236fb..8072cfdb6 100644
--- a/src/test/java/io/appium/java_client/pagefactory_tests/MobileBrowserCompatibilityTest.java
+++ b/src/test/java/io/appium/java_client/pagefactory_tests/MobileBrowserCompatibilityTest.java
@@ -46,7 +46,7 @@ public void setUp() throws Exception {
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, MobileBrowserType.BROWSER);
- driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
+ driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
//This time out is set because test can be run on slow Android SDK emulator
PageFactory.initElements(new AppiumFieldDecorator(driver, 5, TimeUnit.SECONDS), this);
}
diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/SelendroidModeTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/SelendroidModeTest.java
index 7ca99b286..1b7857c8b 100644
--- a/src/test/java/io/appium/java_client/pagefactory_tests/SelendroidModeTest.java
+++ b/src/test/java/io/appium/java_client/pagefactory_tests/SelendroidModeTest.java
@@ -81,7 +81,7 @@ public void setUp() throws Exception {
capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "Selendroid");
capabilities.setCapability(MobileCapabilityType.SELENDROID_PORT, SELENDROID_PORT);
- driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
+ driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
//This time out is set because test can be run on slow Android SDK emulator
PageFactory.initElements(new AppiumFieldDecorator(driver, 5, TimeUnit.SECONDS), this);
diff --git a/src/test/java/io/appium/java_client/pagefactory_tests/iOSPageObjectTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/iOSPageObjectTest.java
index 5236a1a22..0a28e4ec0 100644
--- a/src/test/java/io/appium/java_client/pagefactory_tests/iOSPageObjectTest.java
+++ b/src/test/java/io/appium/java_client/pagefactory_tests/iOSPageObjectTest.java
@@ -110,6 +110,7 @@ public class iOSPageObjectTest {
})
private List findAllElements;
+ @SuppressWarnings("rawtypes")
@Before
public void setUp() throws Exception {
File appDir = new File("src/test/java/io/appium/java_client");