diff --git a/README.md b/README.md
index e02b1f70f..9108d2be2 100644
--- a/README.md
+++ b/README.md
@@ -106,6 +106,14 @@ If you are working on this project and use Intellij Idea, you need to change the
If you are using the Eclipse IDE, make sure you are using verison Luna or later.
##Changelog##
+*3.2.0 (is coming out)*
+- updated the dependency on Selenium to version 2.47.1
+- the new dependency on commons-validator v1.4.1
+- the ability to start programmatically/silently an Appium node server is provided now. Details please read at [#240](https://github.com/appium/java-client/pull/240).
+Historical reference: [The similar solution](https://github.com/Genium-Framework/Appium-Support) has been designed by [@Hassan-Radi](https://github.com/Hassan-Radi).
+The mentioned framework and the current solution use different approaches.
+- Throwing declarations were added to some searching methods. The __"getMouse"__ method of RemoteWebDriver was marked __Deprecated__
+...
*3.1.1*
- Page-object findBy strategies are now aware of which driver (iOS or Android) you are using. For more details see the Pull Request: https://github.com/appium/java-client/pull/213
diff --git a/pom.xml b/pom.xml
index 809cf807e..16c2eba93 100644
--- a/pom.xml
+++ b/pom.xml
@@ -15,7 +15,7 @@
org.seleniumhq.selenium
selenium-java
- 2.46.0
+ 2.47.1
junit
diff --git a/src/main/java/io/appium/java_client/DefaultGenericMobileDriver.java b/src/main/java/io/appium/java_client/DefaultGenericMobileDriver.java
index 777031dd8..f20a105f8 100644
--- a/src/main/java/io/appium/java_client/DefaultGenericMobileDriver.java
+++ b/src/main/java/io/appium/java_client/DefaultGenericMobileDriver.java
@@ -3,9 +3,8 @@
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.*;
+import org.openqa.selenium.interactions.Mouse;
import org.openqa.selenium.remote.CommandExecutor;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.Response;
@@ -47,19 +46,31 @@ public T findElementById(String id){
return (T) super.findElementById(id);
}
- public T findElementByLinkText(String using) {
+ /**
+ * @throws WebDriverException his method doesn't work against native app UI.
+ */
+ public T findElementByLinkText(String using) throws WebDriverException{
return (T) super.findElementByLinkText(using);
}
- public List findElementsByLinkText(String using) {
+ /**
+ * @throws WebDriverException This method doesn't work against native app UI.
+ */
+ public List findElementsByLinkText(String using) throws WebDriverException{
return super.findElementsByLinkText(using);
}
- public T findElementByPartialLinkText(String using) {
+ /**
+ * @throws WebDriverException his method doesn't work against native app UI.
+ */
+ public T findElementByPartialLinkText(String using) throws WebDriverException {
return (T) super.findElementByPartialLinkText(using);
}
- public List findElementsByPartialLinkText(String using) {
+ /**
+ * @throws WebDriverException This method doesn't work against native app UI.
+ */
+ public List findElementsByPartialLinkText(String using) throws WebDriverException {
return super.findElementsByPartialLinkText(using);
}
@@ -87,11 +98,17 @@ public List findElementsByClassName(String using) {
return super.findElementsByClassName(using);
}
- public T findElementByCssSelector(String using) {
+ /**
+ * @throws WebDriverException his method doesn't work against native app UI.
+ */
+ public T findElementByCssSelector(String using) throws WebDriverException{
return (T) super.findElementByCssSelector(using);
}
- public List findElementsByCssSelector(String using) {
+ /**
+ * @throws WebDriverException This method doesn't work against native app UI.
+ */
+ public List findElementsByCssSelector(String using) throws WebDriverException{
return super.findElementsByCssSelector(using);
}
@@ -104,12 +121,26 @@ public List findElementsByXPath(String using) {
}
@Override
- public T findElementByAccessibilityId(String using) {
+ /**
+ * @throws WebDriverException This method is not applicable with browser/webview UI.
+ */
+ public T findElementByAccessibilityId(String using) throws WebDriverException {
return (T) findElement("accessibility id", using);
}
@Override
- public List findElementsByAccessibilityId(String using) {
+ /**
+ * @throws WebDriverException This method is not applicable with browser/webview UI.
+ */
+ public List findElementsByAccessibilityId(String using) throws WebDriverException{
return (List) findElements("accessibility id", using);
}
+
+ /**
+ * Mouse doesn't work on mobile devices and emulators
+ */
+ @Deprecated
+ public Mouse getMouse(){
+ return super.getMouse();
+ }
}
diff --git a/src/main/java/io/appium/java_client/DefaultGenericMobileElement.java b/src/main/java/io/appium/java_client/DefaultGenericMobileElement.java
index 9dc5d5d6b..434149aa5 100644
--- a/src/main/java/io/appium/java_client/DefaultGenericMobileElement.java
+++ b/src/main/java/io/appium/java_client/DefaultGenericMobileElement.java
@@ -13,6 +13,7 @@
import java.util.Map;
import org.openqa.selenium.By;
+import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.RemoteWebElement;
import org.openqa.selenium.remote.Response;
@@ -47,19 +48,31 @@ public T findElementById(String id){
return (T) super.findElementById(id);
}
- public T findElementByLinkText(String using) {
+ /**
+ * @throws WebDriverException his method doesn't work against native app UI.
+ */
+ public T findElementByLinkText(String using) throws WebDriverException {
return (T) super.findElementByLinkText(using);
}
- public List findElementsByLinkText(String using) {
+ /**
+ * @throws WebDriverException This method doesn't work against native app UI.
+ */
+ public List findElementsByLinkText(String using) throws WebDriverException{
return super.findElementsByLinkText(using);
}
- public T findElementByPartialLinkText(String using) {
+ /**
+ * @throws WebDriverException his method doesn't work against native app UI.
+ */
+ public T findElementByPartialLinkText(String using) throws WebDriverException {
return (T) super.findElementByPartialLinkText(using);
}
- public List findElementsByPartialLinkText(String using) {
+ /**
+ * @throws WebDriverException This method doesn't work against native app UI.
+ */
+ public List findElementsByPartialLinkText(String using) throws WebDriverException {
return super.findElementsByPartialLinkText(using);
}
@@ -87,11 +100,17 @@ public List findElementsByClassName(String using) {
return super.findElementsByClassName(using);
}
- public T findElementByCssSelector(String using) {
+ /**
+ * @throws WebDriverException his method doesn't work against native app UI.
+ */
+ public T findElementByCssSelector(String using) throws WebDriverException{
return (T) super.findElementByCssSelector(using);
}
- public List findElementsByCssSelector(String using) {
+ /**
+ * @throws WebDriverException This method doesn't work against native app UI.
+ */
+ public List findElementsByCssSelector(String using) throws WebDriverException{
return super.findElementsByCssSelector(using);
}
@@ -112,4 +131,18 @@ public T findElementByAccessibilityId(String using) {
public List findElementsByAccessibilityId(String using) {
return (List) findElements("accessibility id", using);
}
+
+ /**
+ * @throws WebDriverException because it may not work against native app UI.
+ */
+ public void submit() throws WebDriverException{
+ super.submit();
+ }
+
+ /**
+ * @throws WebDriverException because it may not work against native app UI.
+ */
+ public String getCssValue(String propertyName) throws WebDriverException{
+ return super.getCssValue(propertyName);
+ }
}
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 8548b5072..d79e651cd 100644
--- a/src/main/java/io/appium/java_client/android/AndroidDriver.java
+++ b/src/main/java/io/appium/java_client/android/AndroidDriver.java
@@ -12,6 +12,7 @@
import io.appium.java_client.service.local.AppiumDriverLocalService;
import io.appium.java_client.service.local.AppiumServiceBuilder;
import org.openqa.selenium.Capabilities;
+import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.Response;
@@ -278,17 +279,23 @@ public void toggleLocationServices() {
// Should be moved to the subclass
public void ignoreUnimportantViews(Boolean compress) {
setSetting(AppiumSetting.IGNORE_UNIMPORTANT_VIEWS, compress);
- }
-
+ }
+
+ /**
+ * @throws org.openqa.selenium.WebDriverException This method is not applicable with browser/webview UI.
+ */
@SuppressWarnings("unchecked")
@Override
- public RequiredElementType findElementByAndroidUIAutomator(String using) {
+ public RequiredElementType findElementByAndroidUIAutomator(String using) throws WebDriverException {
return (RequiredElementType) findElement("-android uiautomator", using);
}
+ /**
+ * @throws WebDriverException This method is not applicable with browser/webview UI.
+ */
@SuppressWarnings("unchecked")
@Override
- public List findElementsByAndroidUIAutomator(String using) {
+ public List findElementsByAndroidUIAutomator(String using) throws WebDriverException {
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 4b8502ff1..7c7bb2726 100644
--- a/src/main/java/io/appium/java_client/android/AndroidElement.java
+++ b/src/main/java/io/appium/java_client/android/AndroidElement.java
@@ -3,6 +3,7 @@
import java.util.ArrayList;
import java.util.List;
+import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.WebElement;
import io.appium.java_client.FindsByAndroidUIAutomator;
@@ -11,14 +12,20 @@
public class AndroidElement extends MobileElement implements
FindsByAndroidUIAutomator {
-
+
+ /**
+ * @throws org.openqa.selenium.WebDriverException This method is not applicable with browser/webview UI.
+ */
@Override
- public MobileElement findElementByAndroidUIAutomator(String using) {
+ public MobileElement findElementByAndroidUIAutomator(String using) throws WebDriverException {
return (MobileElement) findElement("-android uiautomator", using);
}
+ /**
+ * @throws WebDriverException This method is not applicable with browser/webview UI.
+ */
@Override
- public List findElementsByAndroidUIAutomator(String using) {
+ public List findElementsByAndroidUIAutomator(String using) throws WebDriverException {
List result = new ArrayList();
List found = findElements("-android uiautomator", using);
for (WebElement e: found)
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 79d327810..53cfe9089 100644
--- a/src/main/java/io/appium/java_client/ios/IOSDriver.java
+++ b/src/main/java/io/appium/java_client/ios/IOSDriver.java
@@ -12,6 +12,7 @@
import io.appium.java_client.service.local.AppiumDriverLocalService;
import io.appium.java_client.service.local.AppiumServiceBuilder;
import org.openqa.selenium.Capabilities;
+import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.WebElement;
import java.net.URL;
@@ -106,8 +107,8 @@ public void hideKeyboard(String keyName) {
@Override
public void shake() {
execute(SHAKE);
- }
-
+ }
+
/**
* @see GetsNamedTextField#getNamedTextField(String)
*/
@@ -121,16 +122,22 @@ public RequiredElementType getNamedTextField(String name) {
}
return element;
}
-
+
+ /**
+ * @throws org.openqa.selenium.WebDriverException This method is not applicable with browser/webview UI.
+ */
@SuppressWarnings("unchecked")
@Override
- public RequiredElementType findElementByIosUIAutomation(String using) {
+ public RequiredElementType findElementByIosUIAutomation(String using) throws WebDriverException {
return (RequiredElementType) findElement("-ios uiautomation", using);
}
+ /**
+ * @throws WebDriverException This method is not applicable with browser/webview UI.
+ */
@SuppressWarnings("unchecked")
@Override
- public List findElementsByIosUIAutomation(String using) {
+ public List findElementsByIosUIAutomation(String using) throws WebDriverException {
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 de5c4f80d..04ee206e5 100644
--- a/src/main/java/io/appium/java_client/ios/IOSElement.java
+++ b/src/main/java/io/appium/java_client/ios/IOSElement.java
@@ -5,6 +5,7 @@
import io.appium.java_client.MobileElement;
import io.appium.java_client.ScrollsTo;
+import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.WebElement;
import com.google.common.collect.ImmutableMap;
@@ -14,14 +15,20 @@
public class IOSElement extends MobileElement implements
FindsByIosUIAutomation, ScrollsTo {
-
+
+ /**
+ * @throws org.openqa.selenium.WebDriverException This method is not applicable with browser/webview UI.
+ */
@Override
- public MobileElement findElementByIosUIAutomation(String using) {
+ public MobileElement findElementByIosUIAutomation(String using) throws WebDriverException {
return (IOSElement) findElement("-ios uiautomation", using);
}
+ /**
+ * @throws WebDriverException This method is not applicable with browser/webview UI.
+ */
@Override
- public List findElementsByIosUIAutomation(String using) {
+ public List findElementsByIosUIAutomation(String using) throws WebDriverException {
List result = new ArrayList();
List found = findElements("-ios uiautomation", using);
for (WebElement e: found)