From ca56f7b4bc9cd62d090f1b845787c511ac54808c Mon Sep 17 00:00:00 2001 From: Sergey Tikhomirov Date: Thu, 2 Apr 2015 01:29:06 +0300 Subject: [PATCH 1/5] #162 #178 fix --- .../io/appium/java_client/AppiumDriver.java | 143 +++++++++++------- .../java_client/AppiumExecutionMethod.java | 4 +- .../DefaultGenericMobileDriver.java | 115 ++++++++++++++ .../DefaultGenericMobileElement.java | 115 ++++++++++++++ .../java_client/FindsByAccessibilityId.java | 6 +- .../FindsByAndroidUIAutomator.java | 8 +- .../java_client/FindsByIosUIAutomation.java | 8 +- .../MissingParameterException.java | 1 + .../java/io/appium/java_client/MobileBy.java | 28 ++-- .../io/appium/java_client/MobileDriver.java | 10 +- .../io/appium/java_client/MobileElement.java | 69 ++++----- .../appium/java_client/MultiTouchAction.java | 1 + .../java_client/NoSuchContextException.java | 1 + .../java/io/appium/java_client/ScrollsTo.java | 8 +- .../java_client/SwipeElementDirection.java | 2 +- .../io/appium/java_client/TouchAction.java | 1 + .../java_client/android/AndroidDriver.java | 23 +-- .../java_client/android/AndroidElement.java | 14 +- .../JsonToAndroidElementConverter.java | 6 +- .../GenericFindsByClassName.java | 10 ++ .../GenericFindsByCssSelector.java | 10 ++ .../searchcontext/GenericFindsById.java | 10 ++ .../searchcontext/GenericFindsByLinkText.java | 12 ++ .../searchcontext/GenericFindsByName.java | 10 ++ .../searchcontext/GenericFindsByTagName.java | 10 ++ .../searchcontext/GenericFindsByXPath.java | 10 ++ .../searchcontext/GenericSearchContext.java | 11 ++ .../JsonToMobileElementConverter.java | 8 +- .../MobileElementToJsonConverter.java | 2 +- .../java_client/ios/GetsNamedTextField.java | 4 +- .../io/appium/java_client/ios/IOSDriver.java | 40 +++-- .../io/appium/java_client/ios/IOSElement.java | 21 +-- .../internal/JsonToIOSElementConverter.java | 6 +- .../pagefactory/AppiumFieldDecorator.java | 8 + .../android/AndroidAccessibilityTest.java | 10 +- .../android/AndroidDriverTest.java | 4 +- .../android/AndroidGestureTest.java | 10 +- .../android/AndroidUIAutomatorTest.java | 30 ++-- .../ios/IOSAccessibilityIdTest.java | 8 +- .../appium/java_client/ios/IOSDriverTest.java | 14 +- .../java_client/ios/IosUIAutomationTest.java | 4 +- .../java_client/ios/iOSGestureTest.java | 6 +- .../AndroidPageObjectTest.java | 13 +- .../DesctopBrowserCompatibilityTest.java | 2 +- .../MobileBrowserCompatibilityTest.java | 2 +- .../pagefactory_tests/SelendroidModeTest.java | 2 +- .../pagefactory_tests/iOSPageObjectTest.java | 12 +- 47 files changed, 617 insertions(+), 235 deletions(-) create mode 100644 src/main/java/io/appium/java_client/DefaultGenericMobileDriver.java create mode 100644 src/main/java/io/appium/java_client/DefaultGenericMobileElement.java create mode 100644 src/main/java/io/appium/java_client/generic/searchcontext/GenericFindsByClassName.java create mode 100644 src/main/java/io/appium/java_client/generic/searchcontext/GenericFindsByCssSelector.java create mode 100644 src/main/java/io/appium/java_client/generic/searchcontext/GenericFindsById.java create mode 100644 src/main/java/io/appium/java_client/generic/searchcontext/GenericFindsByLinkText.java create mode 100644 src/main/java/io/appium/java_client/generic/searchcontext/GenericFindsByName.java create mode 100644 src/main/java/io/appium/java_client/generic/searchcontext/GenericFindsByTagName.java create mode 100644 src/main/java/io/appium/java_client/generic/searchcontext/GenericFindsByXPath.java create mode 100644 src/main/java/io/appium/java_client/generic/searchcontext/GenericSearchContext.java diff --git a/src/main/java/io/appium/java_client/AppiumDriver.java b/src/main/java/io/appium/java_client/AppiumDriver.java index 10ff30074..c18f29160 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,70 @@ 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.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; + +@SuppressWarnings("unchecked") +public abstract class AppiumDriver extends DefaultGenericMobileDriver { private final static ErrorHandler errorHandler = new ErrorHandler( new ErrorCodesMobile(), true); @@ -71,40 +110,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 +256,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 +375,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 +602,6 @@ public WebDriver context(String name) { return AppiumDriver.this; } - @SuppressWarnings("unchecked") @Override public Set getContextHandles() { Response response = execute(DriverCommand.GET_CONTEXT_HANDLES); @@ -607,16 +646,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..3c1bc21b4 100644 --- a/src/main/java/io/appium/java_client/MobileElement.java +++ b/src/main/java/io/appium/java_client/MobileElement.java @@ -22,26 +22,14 @@ 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.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 +38,72 @@ 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) { + return (List) findElements("accessibility id", using); } } 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..3ccedc7e2 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..859160690 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,9 @@ import static io.appium.java_client.MobileCommand.*; import static io.appium.java_client.remote.MobileCapabilityType.*; -public class AndroidDriver extends AppiumDriver implements +public class AndroidDriver extends AppiumDriver implements AndroidDeviceActionShortcuts, HasNetworkConnection, PushesFiles, - StartsActivity, FindsByAndroidUIAutomator { + StartsActivity, FindsByAndroidUIAutomator { private static final String ANDROID_PLATFORM = MobilePlatform.ANDROID; @@ -47,10 +46,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 +58,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 +249,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..25e3aff85 100644 --- a/src/main/java/io/appium/java_client/android/AndroidElement.java +++ b/src/main/java/io/appium/java_client/android/AndroidElement.java @@ -7,17 +7,19 @@ import io.appium.java_client.FindsByAndroidUIAutomator; import io.appium.java_client.MobileElement; -public class AndroidElement extends MobileElement implements - FindsByAndroidUIAutomator { +public class AndroidElement extends MobileElement implements + FindsByAndroidUIAutomator { + @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/internal/JsonToAndroidElementConverter.java b/src/main/java/io/appium/java_client/android/internal/JsonToAndroidElementConverter.java index 8e419e9e9..2ef9b499a 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,13 +7,13 @@ public class JsonToAndroidElementConverter extends JsonToMobileElementConverter { - public JsonToAndroidElementConverter(AppiumDriver driver) { + public JsonToAndroidElementConverter(AppiumDriver driver) { super(driver); } @Override - protected MobileElement newMobileElement() { - AndroidElement toReturn = new AndroidElement(); + protected MobileElement newMobileElement() { + AndroidElement toReturn = new AndroidElement<>(); toReturn.setParent(driver); return toReturn; } 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..1de0b9faf 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; } @@ -34,7 +34,7 @@ public Object apply(Object result) { if (result instanceof Map) { Map resultAsMap = (Map) result; if (resultAsMap.containsKey("ELEMENT")) { - MobileElement element = newMobileElement(); + MobileElement element = newMobileElement(); element.setId(String.valueOf(resultAsMap.get("ELEMENT"))); element.setFileDetector(driver.getFileDetector()); return element; @@ -53,7 +53,7 @@ public Object apply(Object result) { return result; } - protected abstract MobileElement newMobileElement(); //{ + protected abstract MobileElement newMobileElement(); //{ //MobileElement toReturn = new MobileElement(); //toReturn.setParent(driver); //return toReturn; diff --git a/src/main/java/io/appium/java_client/internal/MobileElementToJsonConverter.java b/src/main/java/io/appium/java_client/internal/MobileElementToJsonConverter.java index 2ed2e8f1f..382cb53cb 100644 --- a/src/main/java/io/appium/java_client/internal/MobileElementToJsonConverter.java +++ b/src/main/java/io/appium/java_client/internal/MobileElementToJsonConverter.java @@ -36,7 +36,7 @@ public Object apply(Object arg) { } if (arg instanceof MobileElement) { - return ImmutableMap.of("ELEMENT", ((MobileElement) arg).getId()); + return ImmutableMap.of("ELEMENT", ((MobileElement) arg).getId()); } if (arg.getClass().isArray()) { 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..6513133c6 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,8 @@ import static io.appium.java_client.MobileCommand.*; -public class IOSDriver extends AppiumDriver implements IOSDeviceActionShortcuts, GetsNamedTextField, FindsByIosUIAutomation{ +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 +32,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 +44,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 +80,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..075ce8559 100644 --- a/src/main/java/io/appium/java_client/ios/IOSElement.java +++ b/src/main/java/io/appium/java_client/ios/IOSElement.java @@ -11,16 +11,19 @@ import java.util.List; -public class IOSElement extends MobileElement implements FindsByIosUIAutomation, ScrollsTo { +public class IOSElement extends MobileElement implements +FindsByIosUIAutomation, ScrollsTo { + @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); } /** @@ -29,8 +32,8 @@ public List findElementsByIosUIAutomation(String using) { * @param text input text contained in text attribute */ @Override - public MobileElement scrollTo(String text) { - return (MobileElement) findElementByIosUIAutomation(".scrollToElementWithPredicate(\"name CONTAINS '" + text + "'\")"); + public RequiredElementType scrollTo(String text) { + return (RequiredElementType) findElementByIosUIAutomation(".scrollToElementWithPredicate(\"name CONTAINS '" + text + "'\")"); } /** @@ -39,8 +42,8 @@ public MobileElement scrollTo(String text) { * @param text input text contained in text attribute */ @Override - public MobileElement scrollToExact(String text) { - return (MobileElement) findElementByIosUIAutomation(".scrollToElementWithName(\"" + text + "\")"); + public RequiredElementType scrollToExact(String text) { + return (RequiredElementType) 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..504a077ea 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,13 +7,13 @@ public class JsonToIOSElementConverter extends JsonToMobileElementConverter { - public JsonToIOSElementConverter(AppiumDriver driver) { + public JsonToIOSElementConverter(AppiumDriver driver) { super(driver); } @Override - protected MobileElement newMobileElement() { - IOSElement toReturn = new IOSElement(); + protected MobileElement newMobileElement() { + IOSElement toReturn = new IOSElement<>(); toReturn.setParent(driver); return toReturn; } diff --git a/src/main/java/io/appium/java_client/pagefactory/AppiumFieldDecorator.java b/src/main/java/io/appium/java_client/pagefactory/AppiumFieldDecorator.java index 026ea3005..0737775c0 100644 --- a/src/main/java/io/appium/java_client/pagefactory/AppiumFieldDecorator.java +++ b/src/main/java/io/appium/java_client/pagefactory/AppiumFieldDecorator.java @@ -1,6 +1,7 @@ package io.appium.java_client.pagefactory; import io.appium.java_client.MobileElement; +import io.appium.java_client.TouchableElement; import io.appium.java_client.android.AndroidElement; import io.appium.java_client.ios.IOSElement; @@ -35,6 +36,7 @@ public class AppiumFieldDecorator implements FieldDecorator, ResetsImplicitlyWai private static final long serialVersionUID = 1L; { add(WebElement.class); + add(TouchableElement.class); add(RemoteWebElement.class); add(MobileElement.class); add(AndroidElement.class); @@ -102,6 +104,9 @@ private boolean isDecoratableList(Field field) { } Type listType = ((ParameterizedType) genericType).getActualTypeArguments()[0]; + if (listType instanceof ParameterizedType){ + listType = ((ParameterizedType) listType).getRawType(); + } return isAvailableElementClass(listType); //if there is no annotation list is supposed to be found by org.openqa.selenium.support.ByIdOrName //DefaultElementLocator has an issue :) @@ -112,6 +117,9 @@ private Object proxyForLocator(Field field, ElementLocator locator) { if (type.equals(WebElement.class)){ type = RemoteWebElement.class; } + if (type.equals(TouchableElement.class)){ + type = MobileElement.class; + } ElementInterceptor elementInterceptor = new ElementInterceptor(locator); return ProxyFactory.getEnhancedProxy(type, elementInterceptor); 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..dbc78ea7c 100644 --- a/src/test/java/io/appium/java_client/android/AndroidAccessibilityTest.java +++ b/src/test/java/io/appium/java_client/android/AndroidAccessibilityTest.java @@ -20,7 +20,7 @@ public class AndroidAccessibilityTest { - private AppiumDriver driver; + private AppiumDriver> driver; @Before public void setUp() throws Exception { @@ -29,7 +29,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,14 +39,14 @@ public void tearDown() throws Exception { @Test public void findElementsTest() { - List elements = driver.findElementsByAccessibilityId("Accessibility"); + List> elements = driver.findElementsByAccessibilityId("Accessibility"); assertTrue(elements.size() > 0); } @Test public void findElementTest() { //WebElement element = - MobileElement element = driver.findElementByAccessibilityId("Accessibility"); + MobileElement element = driver.findElementByAccessibilityId("Accessibility"); assertNotNull(element); } @@ -58,7 +58,7 @@ public void MobileElementByTest() { @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..a3fc36eb2 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..415965400 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 @@ -96,10 +96,10 @@ public void TapSingleFingerTest() throws InterruptedException { @Test public void elementGestureTest(){ driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS); - MobileElement e = driver.findElement(MobileBy.AccessibilityId("App")); + MobileElement e = driver.findElement(MobileBy.AccessibilityId("App")); e.tap(1, 1500); System.out.println("tap"); - MobileElement e2 = driver.findElementByClassName("android.widget.TextView"); + MobileElement e2 = driver.findElementByClassName("android.widget.TextView"); e2.zoom(); System.out.println("zoom"); e2.swipe(SwipeElementDirection.RIGHT,1000); @@ -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..627ca30e9 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,27 @@ 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 +32,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,7 +48,7 @@ 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); } @@ -63,16 +60,17 @@ public void findElementByTest() { @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\")"); + @SuppressWarnings("unchecked") + AndroidElement> el1 = (AndroidElement>) driver.findElementByAndroidUIAutomator("resourceId(\"android:id/content\")"); + AndroidElement el2 = el1.findElementByAndroidUIAutomator("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..d0a809840 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..05cabbf7c 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 @@ -80,16 +80,16 @@ public void resetTest() { @Test public void namedTextFieldTest() { - MobileElement element = driver.findElementByAccessibilityId("Text Fields, AAPLTextFieldViewController"); + MobileElement element = driver.findElementByAccessibilityId("Text Fields, AAPLTextFieldViewController"); element.click(); element = driver.getNamedTextField("DEFAULT"); - ((IOSElement) element).setValue("Grace Hopper"); + ((IOSElement) element).setValue("Grace Hopper"); assertEquals("Grace Hopper", element.getText()); } @Test public void hideKeyboardWithParametersTest() { - MobileElement element = driver.findElementByAccessibilityId("Text Fields, AAPLTextFieldViewController"); + MobileElement element = driver.findElementByAccessibilityId("Text Fields, AAPLTextFieldViewController"); element.click(); element = driver.findElementByAccessibilityId("DEFAULT"); element.click(); @@ -98,7 +98,7 @@ public void hideKeyboardWithParametersTest() { @Test public void scrollToTest() { - MobileElement searchBar = driver.findElementByName("Search Bars"); + MobileElement searchBar = driver.findElementByName("Search Bars"); Point before = searchBar.getLocation(); driver.scrollTo("Search Ba"); Point after = searchBar.getLocation(); @@ -107,7 +107,7 @@ public void scrollToTest() { @Test public void scrollToExactTest() { - MobileElement searchBar = driver.findElementByName("Search Bars"); + MobileElement searchBar = driver.findElementByName("Search Bars"); Point before = searchBar.getLocation(); driver.scrollToExact("Search Bars"); Point after = searchBar.getLocation(); 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..840fc5262 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..d7bf215b8 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..44ba2fcc8 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 @@ -49,10 +49,10 @@ public class AndroidPageObjectTest { private List androidUIAutomatorViews; @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/text1\")") - private List mobileElementViews; + private List> mobileElementViews; @FindBy(className = "android.widget.TextView") - private List mobiletextVieWs; + private List> mobiletextVieWs; @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/text1\")") private List remoteElementViews; @@ -92,11 +92,12 @@ public class AndroidPageObjectTest { @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/text1\")") private WebElement androidUIAutomatorView; + @SuppressWarnings("rawtypes") @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/text1\")") private MobileElement mobileElementView; @FindBy(className = "android.widget.TextView") - private MobileElement mobiletextVieW; + private MobileElement mobiletextVieW; @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/text1\")") private RemoteWebElement remotetextVieW; @@ -125,14 +126,14 @@ public class AndroidPageObjectTest { @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/list\")"), @AndroidFindBy(id = "android:id/text1") }) - private AndroidElement androidElementView; + private AndroidElement> androidElementView; @AndroidFindBys({ @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/content\")"), @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/list\")"), @AndroidFindBy(id = "android:id/text1") }) - private List androidElementViews; + private List>> androidElementViews; @AndroidFindAll({ @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/Fakecontent\")"), @@ -161,7 +162,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); //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/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..075ddc85b 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..fb8cc92ec 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..2f7a13aa2 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 @@ -46,8 +46,9 @@ public class iOSPageObjectTest { private List androidUIAutomatorViews; @iOSFindBy(uiAutomator = ".elements()[0]") - private List mobileButtons; + private List> mobileButtons; + @SuppressWarnings("rawtypes") @FindBy(className = "UIAButton") private List mobiletFindBy_Buttons; @@ -78,8 +79,9 @@ public class iOSPageObjectTest { private WebElement androidUIAutomatorView; @iOSFindBy(uiAutomator = ".elements()[0]") - private MobileElement mobileButton; + private MobileElement mobileButton; + @SuppressWarnings("rawtypes") @FindBy(className = "UIAButton") private MobileElement mobiletFindBy_Button; @@ -93,10 +95,10 @@ public class iOSPageObjectTest { private WebElement chainElementView; @iOSFindBy(uiAutomator = ".elements()[0]") - private IOSElement iosButton; + private IOSElement> iosButton; @iOSFindBy(uiAutomator = ".elements()[0]") - private List iosButtons; + private List> iosButtons; @iOSFindAll({ @iOSFindBy(xpath = "ComputeSumButton_Test"), @@ -119,7 +121,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); PageFactory.initElements(new AppiumFieldDecorator(driver), this); } From 8bb9c8c71530265c8297559d0c4a4767a5102326 Mon Sep 17 00:00:00 2001 From: Sergey Tikhomirov Date: Fri, 3 Apr 2015 01:48:24 +0400 Subject: [PATCH 2/5] test improvements & some remarks --- src/main/java/io/appium/java_client/AppiumDriver.java | 11 +++++++++++ .../java/io/appium/java_client/MobileElement.java | 10 ++++++++++ .../io/appium/java_client/android/AndroidDriver.java | 11 +++++++++++ .../io/appium/java_client/android/AndroidElement.java | 11 +++++++++++ .../java/io/appium/java_client/ios/IOSDriver.java | 11 +++++++++++ .../java/io/appium/java_client/ios/IOSElement.java | 11 +++++++++++ .../java/io/appium/java_client/AppiumDriverTest.java | 6 ++++-- src/test/java/io/appium/java_client/ContextTest.java | 6 ++++-- .../java_client/android/AndroidAccessibilityTest.java | 2 +- .../appium/java_client/android/AndroidDriverTest.java | 2 +- .../java_client/android/AndroidGestureTest.java | 2 +- .../java_client/android/AndroidUIAutomatorTest.java | 2 +- .../java_client/ios/IOSAccessibilityIdTest.java | 2 +- .../java/io/appium/java_client/ios/IOSDriverTest.java | 2 +- .../appium/java_client/ios/IosUIAutomationTest.java | 2 +- .../io/appium/java_client/ios/iOSGestureTest.java | 2 +- .../pagefactory_tests/AndroidPageObjectTest.java | 3 ++- .../MobileBrowserCompatibilityTest.java | 2 +- .../pagefactory_tests/SelendroidModeTest.java | 2 +- .../pagefactory_tests/iOSPageObjectTest.java | 3 ++- 20 files changed, 87 insertions(+), 16 deletions(-) diff --git a/src/main/java/io/appium/java_client/AppiumDriver.java b/src/main/java/io/appium/java_client/AppiumDriver.java index c18f29160..e29658836 100644 --- a/src/main/java/io/appium/java_client/AppiumDriver.java +++ b/src/main/java/io/appium/java_client/AppiumDriver.java @@ -70,6 +70,7 @@ 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; @@ -79,6 +80,16 @@ 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 { diff --git a/src/main/java/io/appium/java_client/MobileElement.java b/src/main/java/io/appium/java_client/MobileElement.java index 3c1bc21b4..0cee2a4dc 100644 --- a/src/main/java/io/appium/java_client/MobileElement.java +++ b/src/main/java/io/appium/java_client/MobileElement.java @@ -26,6 +26,16 @@ import java.util.List; @SuppressWarnings("unchecked") +/** + * @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) + */ public abstract class MobileElement extends DefaultGenericMobileElement { protected FileDetector fileDetector; 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 859160690..d05c971d4 100644 --- a/src/main/java/io/appium/java_client/android/AndroidDriver.java +++ b/src/main/java/io/appium/java_client/android/AndroidDriver.java @@ -20,6 +20,17 @@ import static io.appium.java_client.MobileCommand.*; import static io.appium.java_client.remote.MobileCapabilityType.*; +/** + * @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 { 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 25e3aff85..bf8a75709 100644 --- a/src/main/java/io/appium/java_client/android/AndroidElement.java +++ b/src/main/java/io/appium/java_client/android/AndroidElement.java @@ -7,6 +7,17 @@ import io.appium.java_client.FindsByAndroidUIAutomator; import io.appium.java_client.MobileElement; +/** + * @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 AndroidElement extends MobileElement implements FindsByAndroidUIAutomator { 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 6513133c6..f122ee0a5 100644 --- a/src/main/java/io/appium/java_client/ios/IOSDriver.java +++ b/src/main/java/io/appium/java_client/ios/IOSDriver.java @@ -17,6 +17,17 @@ import static io.appium.java_client.MobileCommand.*; +/** + * @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; 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 075ce8559..b9086eea9 100644 --- a/src/main/java/io/appium/java_client/ios/IOSElement.java +++ b/src/main/java/io/appium/java_client/ios/IOSElement.java @@ -11,6 +11,17 @@ import java.util.List; +/** + * @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 IOSElement extends MobileElement implements FindsByIosUIAutomation, ScrollsTo { 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 dbc78ea7c..5eea90c5c 100644 --- a/src/test/java/io/appium/java_client/android/AndroidAccessibilityTest.java +++ b/src/test/java/io/appium/java_client/android/AndroidAccessibilityTest.java @@ -29,7 +29,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 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 a3fc36eb2..9419a0698 100644 --- a/src/test/java/io/appium/java_client/android/AndroidDriverTest.java +++ b/src/test/java/io/appium/java_client/android/AndroidDriverTest.java @@ -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 415965400..396d76cef 100644 --- a/src/test/java/io/appium/java_client/android/AndroidGestureTest.java +++ b/src/test/java/io/appium/java_client/android/AndroidGestureTest.java @@ -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 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 627ca30e9..a67030fa6 100644 --- a/src/test/java/io/appium/java_client/android/AndroidUIAutomatorTest.java +++ b/src/test/java/io/appium/java_client/android/AndroidUIAutomatorTest.java @@ -32,7 +32,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 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 d0a809840..e41c8be9e 100644 --- a/src/test/java/io/appium/java_client/ios/IOSAccessibilityIdTest.java +++ b/src/test/java/io/appium/java_client/ios/IOSAccessibilityIdTest.java @@ -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 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 05cabbf7c..754dfeed3 100644 --- a/src/test/java/io/appium/java_client/ios/IOSDriverTest.java +++ b/src/test/java/io/appium/java_client/ios/IOSDriverTest.java @@ -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 840fc5262..c397ef60a 100644 --- a/src/test/java/io/appium/java_client/ios/IosUIAutomationTest.java +++ b/src/test/java/io/appium/java_client/ios/IosUIAutomationTest.java @@ -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 d7bf215b8..6f0975432 100644 --- a/src/test/java/io/appium/java_client/ios/iOSGestureTest.java +++ b/src/test/java/io/appium/java_client/ios/iOSGestureTest.java @@ -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/pagefactory_tests/AndroidPageObjectTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/AndroidPageObjectTest.java index 44ba2fcc8..07e363c3e 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 @@ -155,6 +155,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"); @@ -162,7 +163,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); //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/MobileBrowserCompatibilityTest.java b/src/test/java/io/appium/java_client/pagefactory_tests/MobileBrowserCompatibilityTest.java index 075ddc85b..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 fb8cc92ec..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 2f7a13aa2..2cbf73f43 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 @@ -112,6 +112,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"); @@ -121,7 +122,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); PageFactory.initElements(new AppiumFieldDecorator(driver), this); } From 020b45e937e7c85a3118d0681b5f549a2d80b2cd Mon Sep 17 00:00:00 2001 From: Sergey Tikhomirov Date: Wed, 8 Apr 2015 00:29:34 +0300 Subject: [PATCH 3/5] The code cleaning --- .../io/appium/java_client/MobileElement.java | 41 ++++++++----------- .../java_client/SwipeElementDirection.java | 2 +- .../java_client/android/AndroidElement.java | 31 ++++++-------- .../JsonToAndroidElementConverter.java | 4 +- .../JsonToMobileElementConverter.java | 4 +- .../MobileElementToJsonConverter.java | 2 +- .../io/appium/java_client/ios/IOSElement.java | 38 +++++++---------- .../internal/JsonToIOSElementConverter.java | 4 +- .../pagefactory/AppiumFieldDecorator.java | 3 -- .../android/AndroidAccessibilityTest.java | 13 +++--- .../android/AndroidGestureTest.java | 8 ++-- .../android/AndroidUIAutomatorTest.java | 18 ++++---- .../appium/java_client/ios/IOSDriverTest.java | 14 +++---- .../java_client/ios/iOSGestureTest.java | 2 +- .../AndroidPageObjectTest.java | 11 +++-- .../pagefactory_tests/iOSPageObjectTest.java | 10 ++--- 16 files changed, 89 insertions(+), 116 deletions(-) diff --git a/src/main/java/io/appium/java_client/MobileElement.java b/src/main/java/io/appium/java_client/MobileElement.java index 0cee2a4dc..56f7d78df 100644 --- a/src/main/java/io/appium/java_client/MobileElement.java +++ b/src/main/java/io/appium/java_client/MobileElement.java @@ -23,20 +23,11 @@ import org.openqa.selenium.WebElement; import org.openqa.selenium.remote.FileDetector; +import java.util.ArrayList; import java.util.List; -@SuppressWarnings("unchecked") -/** - * @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) - */ -public abstract class MobileElement extends DefaultGenericMobileElement { +@SuppressWarnings({ "unchecked"}) +public abstract class MobileElement extends DefaultGenericMobileElement { protected FileDetector fileDetector; @@ -75,45 +66,49 @@ public void swipe(SwipeElementDirection direction, int offsetFromStartBorder, } @Override - public List findElements(By by){ + public List findElements(By by){ return super.findElements(by); } @Override - public List findElementsById(String id){ + public List findElementsById(String id){ return super.findElementsById(id); } - public List findElementsByLinkText(String using) { + public List findElementsByLinkText(String using) { return super.findElementsByLinkText(using); } - public List findElementsByPartialLinkText(String using) { + public List findElementsByPartialLinkText(String using) { return super.findElementsByPartialLinkText(using); } - public List findElementsByTagName(String using) { + public List findElementsByTagName(String using) { return super.findElementsByTagName(using); } - public List findElementsByName(String using) { + public List findElementsByName(String using) { return super.findElementsByName(using); } - public List findElementsByClassName(String using) { + public List findElementsByClassName(String using) { return super.findElementsByClassName(using); } - public List findElementsByCssSelector(String using) { + public List findElementsByCssSelector(String using) { return super.findElementsByCssSelector(using); } - public List findElementsByXPath(String using) { + public List findElementsByXPath(String using) { return super.findElementsByXPath(using); } @Override - public List findElementsByAccessibilityId(String using) { - return (List) findElements("accessibility id", using); + 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/SwipeElementDirection.java b/src/main/java/io/appium/java_client/SwipeElementDirection.java index 3ccedc7e2..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/android/AndroidElement.java b/src/main/java/io/appium/java_client/android/AndroidElement.java index bf8a75709..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,30 +8,22 @@ import io.appium.java_client.FindsByAndroidUIAutomator; import io.appium.java_client.MobileElement; -/** - * @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 AndroidElement extends MobileElement implements - FindsByAndroidUIAutomator { + +public class AndroidElement extends MobileElement implements + FindsByAndroidUIAutomator { - @SuppressWarnings("unchecked") @Override - public RequiredElementType findElementByAndroidUIAutomator(String using) { - return (RequiredElementType) findElement("-android uiautomator", using); + public MobileElement findElementByAndroidUIAutomator(String using) { + return (MobileElement) findElement("-android uiautomator", using); } - @SuppressWarnings("unchecked") @Override - public List findElementsByAndroidUIAutomator(String using) { - return (List) 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 2ef9b499a..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 @@ -12,8 +12,8 @@ public JsonToAndroidElementConverter(AppiumDriver driver) { } @Override - protected MobileElement newMobileElement() { - AndroidElement toReturn = new AndroidElement<>(); + protected MobileElement newMobileElement() { + AndroidElement toReturn = new AndroidElement(); toReturn.setParent(driver); return toReturn; } 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 1de0b9faf..d509c1344 100644 --- a/src/main/java/io/appium/java_client/internal/JsonToMobileElementConverter.java +++ b/src/main/java/io/appium/java_client/internal/JsonToMobileElementConverter.java @@ -34,7 +34,7 @@ public Object apply(Object result) { if (result instanceof Map) { Map resultAsMap = (Map) result; if (resultAsMap.containsKey("ELEMENT")) { - MobileElement element = newMobileElement(); + MobileElement element = newMobileElement(); element.setId(String.valueOf(resultAsMap.get("ELEMENT"))); element.setFileDetector(driver.getFileDetector()); return element; @@ -53,7 +53,7 @@ public Object apply(Object result) { return result; } - protected abstract MobileElement newMobileElement(); //{ + protected abstract MobileElement newMobileElement(); //{ //MobileElement toReturn = new MobileElement(); //toReturn.setParent(driver); //return toReturn; diff --git a/src/main/java/io/appium/java_client/internal/MobileElementToJsonConverter.java b/src/main/java/io/appium/java_client/internal/MobileElementToJsonConverter.java index 382cb53cb..2ed2e8f1f 100644 --- a/src/main/java/io/appium/java_client/internal/MobileElementToJsonConverter.java +++ b/src/main/java/io/appium/java_client/internal/MobileElementToJsonConverter.java @@ -36,7 +36,7 @@ public Object apply(Object arg) { } if (arg instanceof MobileElement) { - return ImmutableMap.of("ELEMENT", ((MobileElement) arg).getId()); + return ImmutableMap.of("ELEMENT", ((MobileElement) arg).getId()); } if (arg.getClass().isArray()) { 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 b9086eea9..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,32 +9,24 @@ import com.google.common.collect.ImmutableMap; +import java.util.ArrayList; import java.util.List; -/** - * @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 IOSElement extends MobileElement implements -FindsByIosUIAutomation, ScrollsTo { +public class IOSElement extends MobileElement implements +FindsByIosUIAutomation, ScrollsTo { - @SuppressWarnings("unchecked") @Override - public RequiredElementType findElementByIosUIAutomation(String using) { - return (RequiredElementType) findElement("-ios uiautomation", using); + public MobileElement findElementByIosUIAutomation(String using) { + return (IOSElement) findElement("-ios uiautomation", using); } - @SuppressWarnings("unchecked") @Override - public List findElementsByIosUIAutomation(String using) { - return (List) 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; } /** @@ -43,8 +35,8 @@ public List findElementsByIosUIAutomation(String using) { * @param text input text contained in text attribute */ @Override - public RequiredElementType scrollTo(String text) { - return (RequiredElementType) findElementByIosUIAutomation(".scrollToElementWithPredicate(\"name CONTAINS '" + text + "'\")"); + public MobileElement scrollTo(String text) { + return (IOSElement) findElementByIosUIAutomation(".scrollToElementWithPredicate(\"name CONTAINS '" + text + "'\")"); } /** @@ -53,8 +45,8 @@ public RequiredElementType scrollTo(String text) { * @param text input text contained in text attribute */ @Override - public RequiredElementType scrollToExact(String text) { - return (RequiredElementType) findElementByIosUIAutomation(".scrollToElementWithName(\"" + text + "\")"); + public MobileElement scrollToExact(String 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 504a077ea..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 @@ -12,8 +12,8 @@ public JsonToIOSElementConverter(AppiumDriver driver) { } @Override - protected MobileElement newMobileElement() { - IOSElement toReturn = new IOSElement<>(); + protected MobileElement newMobileElement() { + IOSElement toReturn = new IOSElement(); toReturn.setParent(driver); return toReturn; } diff --git a/src/main/java/io/appium/java_client/pagefactory/AppiumFieldDecorator.java b/src/main/java/io/appium/java_client/pagefactory/AppiumFieldDecorator.java index 0737775c0..1cdca37ca 100644 --- a/src/main/java/io/appium/java_client/pagefactory/AppiumFieldDecorator.java +++ b/src/main/java/io/appium/java_client/pagefactory/AppiumFieldDecorator.java @@ -104,9 +104,6 @@ private boolean isDecoratableList(Field field) { } Type listType = ((ParameterizedType) genericType).getActualTypeArguments()[0]; - if (listType instanceof ParameterizedType){ - listType = ((ParameterizedType) listType).getRawType(); - } return isAvailableElementClass(listType); //if there is no annotation list is supposed to be found by org.openqa.selenium.support.ByIdOrName //DefaultElementLocator has an issue :) 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 5eea90c5c..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,26 +38,26 @@ public void tearDown() throws Exception { @Test public void findElementsTest() { - List> elements = driver.findElementsByAccessibilityId("Accessibility"); + List elements = driver.findElementsByAccessibilityId("Accessibility"); assertTrue(elements.size() > 0); } @Test public void findElementTest() { //WebElement element = - MobileElement element = driver.findElementByAccessibilityId("Accessibility"); + MobileElement element = driver.findElementByAccessibilityId("Accessibility"); assertNotNull(element); } @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/AndroidGestureTest.java b/src/test/java/io/appium/java_client/android/AndroidGestureTest.java index 396d76cef..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 @@ -96,10 +96,10 @@ public void TapSingleFingerTest() throws InterruptedException { @Test public void elementGestureTest(){ driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS); - MobileElement e = driver.findElement(MobileBy.AccessibilityId("App")); + MobileElement e = driver.findElement(MobileBy.AccessibilityId("App")); e.tap(1, 1500); System.out.println("tap"); - MobileElement e2 = driver.findElementByClassName("android.widget.TextView"); + MobileElement e2 = driver.findElementByClassName("android.widget.TextView"); e2.zoom(); System.out.println("zoom"); e2.swipe(SwipeElementDirection.RIGHT,1000); 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 a67030fa6..f40e003a2 100644 --- a/src/test/java/io/appium/java_client/android/AndroidUIAutomatorTest.java +++ b/src/test/java/io/appium/java_client/android/AndroidUIAutomatorTest.java @@ -3,6 +3,7 @@ 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.remote.MobileCapabilityType; import io.appium.java_client.remote.MobilePlatform; @@ -21,7 +22,7 @@ */ public class AndroidUIAutomatorTest { - private AndroidDriver> driver; + private AndroidDriver driver; @Before public void setup() throws Exception { @@ -32,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 @@ -48,29 +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() { - @SuppressWarnings("unchecked") - AndroidElement> el1 = (AndroidElement>) driver.findElementByAndroidUIAutomator("resourceId(\"android:id/content\")"); - AndroidElement el2 = el1.findElementByAndroidUIAutomator("text(\"Accessibility\")"); + AndroidElement el1 = driver.findElementByAndroidUIAutomator("resourceId(\"android:id/content\")"); + MobileElement el2 = el1.findElement(MobileBy.AndroidUIAutomator("text(\"Accessibility\")")); el2.click(); - AndroidElement el3 = 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/IOSDriverTest.java b/src/test/java/io/appium/java_client/ios/IOSDriverTest.java index 754dfeed3..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 @@ -80,16 +80,16 @@ public void resetTest() { @Test public void namedTextFieldTest() { - MobileElement element = driver.findElementByAccessibilityId("Text Fields, AAPLTextFieldViewController"); + MobileElement element = driver.findElementByAccessibilityId("Text Fields, AAPLTextFieldViewController"); element.click(); element = driver.getNamedTextField("DEFAULT"); - ((IOSElement) element).setValue("Grace Hopper"); + ((IOSElement) element).setValue("Grace Hopper"); assertEquals("Grace Hopper", element.getText()); } @Test public void hideKeyboardWithParametersTest() { - MobileElement element = driver.findElementByAccessibilityId("Text Fields, AAPLTextFieldViewController"); + MobileElement element = driver.findElementByAccessibilityId("Text Fields, AAPLTextFieldViewController"); element.click(); element = driver.findElementByAccessibilityId("DEFAULT"); element.click(); @@ -98,7 +98,7 @@ public void hideKeyboardWithParametersTest() { @Test public void scrollToTest() { - MobileElement searchBar = driver.findElementByName("Search Bars"); + MobileElement searchBar = driver.findElementByName("Search Bars"); Point before = searchBar.getLocation(); driver.scrollTo("Search Ba"); Point after = searchBar.getLocation(); @@ -107,7 +107,7 @@ public void scrollToTest() { @Test public void scrollToExactTest() { - MobileElement searchBar = driver.findElementByName("Search Bars"); + MobileElement searchBar = driver.findElementByName("Search Bars"); Point before = searchBar.getLocation(); driver.scrollToExact("Search Bars"); Point after = searchBar.getLocation(); 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 6f0975432..289b08990 100644 --- a/src/test/java/io/appium/java_client/ios/iOSGestureTest.java +++ b/src/test/java/io/appium/java_client/ios/iOSGestureTest.java @@ -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 07e363c3e..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 @@ -49,10 +49,10 @@ public class AndroidPageObjectTest { private List androidUIAutomatorViews; @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/text1\")") - private List> mobileElementViews; + private List mobileElementViews; @FindBy(className = "android.widget.TextView") - private List> mobiletextVieWs; + private List mobiletextVieWs; @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/text1\")") private List remoteElementViews; @@ -92,12 +92,11 @@ public class AndroidPageObjectTest { @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/text1\")") private WebElement androidUIAutomatorView; - @SuppressWarnings("rawtypes") @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/text1\")") private MobileElement mobileElementView; @FindBy(className = "android.widget.TextView") - private MobileElement mobiletextVieW; + private MobileElement mobiletextVieW; @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/text1\")") private RemoteWebElement remotetextVieW; @@ -126,14 +125,14 @@ public class AndroidPageObjectTest { @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/list\")"), @AndroidFindBy(id = "android:id/text1") }) - private AndroidElement> androidElementView; + private AndroidElement androidElementView; @AndroidFindBys({ @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/content\")"), @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/list\")"), @AndroidFindBy(id = "android:id/text1") }) - private List>> androidElementViews; + private List androidElementViews; @AndroidFindAll({ @AndroidFindBy(uiAutomator = "new UiSelector().resourceId(\"android:id/Fakecontent\")"), 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 2cbf73f43..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 @@ -46,9 +46,8 @@ public class iOSPageObjectTest { private List androidUIAutomatorViews; @iOSFindBy(uiAutomator = ".elements()[0]") - private List> mobileButtons; + private List mobileButtons; - @SuppressWarnings("rawtypes") @FindBy(className = "UIAButton") private List mobiletFindBy_Buttons; @@ -79,9 +78,8 @@ public class iOSPageObjectTest { private WebElement androidUIAutomatorView; @iOSFindBy(uiAutomator = ".elements()[0]") - private MobileElement mobileButton; + private MobileElement mobileButton; - @SuppressWarnings("rawtypes") @FindBy(className = "UIAButton") private MobileElement mobiletFindBy_Button; @@ -95,10 +93,10 @@ public class iOSPageObjectTest { private WebElement chainElementView; @iOSFindBy(uiAutomator = ".elements()[0]") - private IOSElement> iosButton; + private IOSElement iosButton; @iOSFindBy(uiAutomator = ".elements()[0]") - private List> iosButtons; + private List iosButtons; @iOSFindAll({ @iOSFindBy(xpath = "ComputeSumButton_Test"), From ebbbf500443f25080955b62785d7cdca6bc91be3 Mon Sep 17 00:00:00 2001 From: Sergey Tikhomirov Date: Wed, 8 Apr 2015 02:26:09 +0300 Subject: [PATCH 4/5] #178 #162 The correct maven-compiler configuration --- pom.xml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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 + + From e2676a0c254326cf12b52313d86672353f0ab2e6 Mon Sep 17 00:00:00 2001 From: Sergey Tikhomirov Date: Sat, 18 Apr 2015 01:13:46 +0300 Subject: [PATCH 5/5] Some changes have been partially reverted... in order to avoid the conflict with another PR --- .../appium/java_client/pagefactory/AppiumFieldDecorator.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main/java/io/appium/java_client/pagefactory/AppiumFieldDecorator.java b/src/main/java/io/appium/java_client/pagefactory/AppiumFieldDecorator.java index 1cdca37ca..026ea3005 100644 --- a/src/main/java/io/appium/java_client/pagefactory/AppiumFieldDecorator.java +++ b/src/main/java/io/appium/java_client/pagefactory/AppiumFieldDecorator.java @@ -1,7 +1,6 @@ package io.appium.java_client.pagefactory; import io.appium.java_client.MobileElement; -import io.appium.java_client.TouchableElement; import io.appium.java_client.android.AndroidElement; import io.appium.java_client.ios.IOSElement; @@ -36,7 +35,6 @@ public class AppiumFieldDecorator implements FieldDecorator, ResetsImplicitlyWai private static final long serialVersionUID = 1L; { add(WebElement.class); - add(TouchableElement.class); add(RemoteWebElement.class); add(MobileElement.class); add(AndroidElement.class); @@ -114,9 +112,6 @@ private Object proxyForLocator(Field field, ElementLocator locator) { if (type.equals(WebElement.class)){ type = RemoteWebElement.class; } - if (type.equals(TouchableElement.class)){ - type = MobileElement.class; - } ElementInterceptor elementInterceptor = new ElementInterceptor(locator); return ProxyFactory.getEnhancedProxy(type, elementInterceptor);