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 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 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 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");