diff --git a/README.md b/README.md
index 6af5f0be8..e2da9ca63 100644
--- a/README.md
+++ b/README.md
@@ -4,31 +4,48 @@
[](https://www.javadoc.io/doc/io.appium/java-client)
[](https://travis-ci.org/appium/java-client)
-This is the Java language binding for writing Appium Tests, conforms to [Mobile JSON Wire Protocol](https://github.com/SeleniumHQ/mobile-spec/blob/master/spec-draft.md)
+This is the Java language bindings for writing Appium Tests that conform to [WebDriver Protocol](https://w3c.github.io/webdriver/)
-[API docs](https://www.javadoc.io/doc/io.appium/java-client)
+## v8 Migration
-### Features and other interesting information
+Since version 8 Appium Java Client had several major changes, which might require to
+update your client code. Make sure to follow the [v7 to v8 Migration Guide](https://github.com/appium/java-client/blob/master/docs/v7-to-v8-migration-guide.md)
+in order to streamline the migration process.
-[Tech stack](https://github.com/appium/java-client/blob/master/docs/Tech-stack.md)
+## Add Appium java client to your test framework
-[How to install the project](https://github.com/appium/java-client/blob/master/docs/Installing-the-project.md)
+### Stable
-[WIKI](https://github.com/appium/java-client/wiki)
+#### Maven
-## v8 Migration
+Add the following to pom.xml:
-Since version 8 Appium Java Client had several major changes, which might require to
-update your client code. Make sure to follow the [v7 to v8 Migration Guide](https://github.com/appium/java-client/blob/master/docs/v7-to-v8-migration-guide.md)
-in order to streamline the migration process.
+```xml
+
+ io.appium
+ java-client
+ ${version.you.require}
+ test
+
+```
+
+#### Gradle
+
+Add the following to build.gradle:
+
+```groovy
+dependencies {
+ testImplementation 'io.appium:java-client:${version.you.require}'
+}
+```
-## How to install latest java client Beta/Snapshots
+### Beta/Snapshots
Java client project is available to use even before it is officially published to maven central. Refer [jitpack.io](https://jitpack.io/#appium/java-client)
-### Maven
+#### Maven
- - Add the following to pom.xml:
+Add the following to pom.xml:
```xml
@@ -39,7 +56,7 @@ Java client project is available to use even before it is officially published t
```
- - Add the dependency:
+Add the dependency:
```xml
@@ -49,27 +66,140 @@ Java client project is available to use even before it is officially published t
```
-### Gradle
+#### Gradle
- - Add the JitPack repository to your build file. Add it in your root build.gradle at the end of repositories:
+Add the JitPack repository to your build file. Add it in your root build.gradle at the end of repositories:
-```
+```groovy
allprojects {
repositories {
- ...
+ // ...
maven { url 'https://jitpack.io' }
}
}
```
- - Add the dependency:
+Add the dependency:
-```
+```groovy
dependencies {
implementation 'com.github.appium:java-client:latest commit id from master branch'
}
```
+## Drivers Support
+
+Appium java client has dedicated classes to support the following Appium drivers:
+
+- [UiAutomator2](https://github.com/appium/appium-uiautomator2-driver) and [Espresso](https://github.com/appium/appium-espresso-driver): [AndroidDriver](src/main/java/io/appium/java_client/android/AndroidDriver.java)
+- [XCUITest](https://github.com/appium/appium-xcuitest-driver): [IOSDriver](src/main/java/io/appium/java_client/ios/IOSDriver.java)
+- [Windows](https://github.com/appium/appium-windows-driver): [WindowsDriver](src/main/java/io/appium/java_client/windows/WindowsDriver.java)
+- [Safari](https://github.com/appium/appium-safari-driver): [SafariDriver](src/main/java/io/appium/java_client/safari/SafariDriver.java)
+- [Gecko](https://github.com/appium/appium-geckodriver): [GeckoDriver](src/main/java/io/appium/java_client/gecko/GeckoDriver.java)
+- [Mac2](https://github.com/appium/appium-mac2-driver): [Mac2Driver](src/main/java/io/appium/java_client/mac/Mac2Driver.java)
+
+To automate other platforms that are not listed above you could use
+[AppiumDriver](src/main/java/io/appium/java_client/AppiumDriver.java) or its custom derivatives.
+
+Appium java client is built on top of Selenium and implements same interfaces that the foundation
+[RemoteWebDriver](https://github.com/SeleniumHQ/selenium/blob/trunk/java/src/org/openqa/selenium/remote/RemoteWebDriver.java)
+does. However, Selenium lib is mostly focused on web browsers automation while
+Appium is universal and covers wide range of possible platforms, e.g. mobile and desktop
+operating systems, IOT devices, etc. Thus, the foundation `AppiumDriver` class in this package
+extends `RemoteWebDriver` with additional features, and makes it more flexible, so it is not so
+strictly focused on web-browser related operations.
+
+## Appium Server Service Wrapper
+
+Appium java client provides a dedicated class to control Appium server execution.
+The class is [AppiumDriverLocalService](src/main/java/io/appium/java_client/service/local/AppiumDriverLocalService.java).
+It allows to run and verify the Appium server **locally** from your test framework code
+and provides several convenient shortcuts. The service could be used as below:
+
+```java
+AppiumDriverLocalService service = AppiumDriverLocalService.buildDefaultService();
+service.start();
+try {
+ // do stuff with drivers
+} finally {
+ service.stop();
+}
+```
+
+You could customize the service behavior, for example, provide custom
+command line arguments or change paths to server executables
+using [AppiumServiceBuilder](src/main/java/io/appium/java_client/service/local/AppiumServiceBuilder.java)
+
+**Note**
+
+> AppiumDriverLocalService does not support the server management on non-local hosts
+
+## Usage Examples
+
+### UiAutomator2
+
+```java
+UiAutomator2Options options = new UiAutomator2Options()
+ .setUdid('123456')
+ .setApp("/home/myapp.apk");
+AndroidDriver driver = new AndroidDriver(
+ // The default URL in Appium 1 is http://127.0.0.1:4723/wd/hub
+ new URL("http://127.0.0.1:4723"), options
+);
+try {
+ WebElement el = driver.findElement(AppiumBy.xpath, "//Button");
+ el.click();
+ driver.getPageSource();
+} finally {
+ driver.quit();
+}
+```
+
+### XCUITest
+
+```java
+XCUITestOptions options = new XCUITestOptions()
+ .setUdid('123456')
+ .setApp("/home/myapp.ipa");
+IOSDriver driver = new IOSDriver(
+ // The default URL in Appium 1 is http://127.0.0.1:4723/wd/hub
+ new URL("http://127.0.0.1:4723"), options
+);
+try {
+ WebElement el = driver.findElement(AppiumBy.accessibilityId, "myId");
+ el.click();
+ driver.getPageSource();
+} finally {
+ driver.quit();
+}
+```
+
+### Any generic driver that does not have a dedicated class
+
+```java
+BaseOptions options = new BaseOptions()
+ .setPlatformName("myplatform")
+ .setAutomationName("mydriver")
+ .amend("mycapability1", "capvalue1")
+ .amend("mycapability2", "capvalue2");
+AppiumDriver driver = new AppiumDriver(
+ // The default URL in Appium 1 is http://127.0.0.1:4723/wd/hub
+ new URL("http://127.0.0.1:4723"), options
+);
+try {
+ WebElement el = driver.findElement(AppiumBy.className, "myClass");
+ el.click();
+ driver.getPageSource();
+} finally {
+ driver.quit();
+}
+```
+
+Check the corresponding driver's READMEs to know the list of capabilities and features it supports.
+
+You could find much more code examples by checking client's
+[unit and integration tests](src/test/java/io/appium/java_client).
+
## Changelog
*8.2.0*
- **[ENHANCEMENTS]**
diff --git a/docs/Functions.md b/docs/Functions.md
deleted file mode 100644
index bdf962f7c..000000000
--- a/docs/Functions.md
+++ /dev/null
@@ -1,147 +0,0 @@
-Appium java client has some features based on [Java 8 Functional interfaces](https://www.oreilly.com/learning/java-8-functional-interfaces).
-
-# Conditions
-
-```java
-io.appium.java_client.functions.AppiumFunction
-```
-It extends
-```java
-java.util.function.Function
-```
-and
-```java
-com.google.common.base.Function
-```
-to make end user available to use _org.openqa.selenium.support.ui.Wait_. There is additional interface
-```java
-io.appium.java_client.functions.ExpectedCondition
-```
-which extends
-```java
-io.appium.java_client.functions.AppiumFunction
-```
-
-and
-
-```java
-org.openqa.selenium.support.ui.ExpectedCondition
-```
-
-This feature provides the ability to create complex condition of the waiting for something.
-
-```java
-//waiting for elements
- private final AppiumFunction> searchingFunction = input -> {
- List result = input.findElements(By.tagName("a"));
-
- if (result.size() > 0) {
- return result;
- }
- return null;
-};
-
-//waiting for some context using regular expression pattern
-private final AppiumFunction contextFunction = input -> {
- Set contexts = driver.getContextHandles();
- String current = driver.getContext();
- contexts.forEach(context -> {
- Matcher m = input.matcher(context);
- if (m.find()) {
- driver.context(context);
- }
- });
- if (!current.equals(driver.getContext())) {
- return driver;
- }
- return null;
-};
-```
-
-## using one function as pre-condition
-
-```java
-@Test public void tezt() {
- ....
- Wait wait = new FluentWait<>(Pattern.compile("WEBVIEW"))
- .withTimeout(30, TimeUnit.SECONDS);
- List elements = wait.until(searchingFunction.compose(contextFunction));
- ....
-}
-```
-
-## using one function as post-condition
-
-```java
-import org.openqa.selenium.support.ui.FluentWait;
-import org.openqa.selenium.support.ui.Wait;
-
-@Test public void tezt() {
- ....
- Wait wait = new FluentWait<>(Pattern.compile("WEBVIEW"))
- .withTimeout(30, TimeUnit.SECONDS);
- List elements = wait.until(contextFunction.andThen(searchingFunction));
- ....
-}
-```
-
-# Touch action supplier
-
-[About touch actions](https://github.com/appium/java-client/blob/master/docs/Touch-actions.md)
-
-You can use suppliers to declare touch/multitouch actions for some screens/tests. Also it is possible to
-create gesture libraries/utils using suppliers. Appium java client provides this interface
-
-```java
-io.appium.java_client.functions.ActionSupplier
-```
-
-## Samples
-
-```java
-private final ActionSupplier horizontalSwipe = () -> {
- driver.findElementById("io.appium.android.apis:id/gallery");
-
- AndroidElement gallery = driver.findElementById("io.appium.android.apis:id/gallery");
- List images = gallery
- .findElementsByClassName("android.widget.ImageView");
- Point location = gallery.getLocation();
- Point center = gallery.getCenter();
-
- return new TouchAction(driver).press(images.get(2), -10, center.y - location.y)
- .waitAction(2000).moveTo(gallery, 10, center.y - location.y).release();
-};
-
-private final ActionSupplier verticalSwiping = () ->
- new TouchAction(driver).press(driver.findElementByAccessibilityId("Gallery"))
- .waitAction(2000).moveTo(driver.findElementByAccessibilityId("Auto Complete")).release();
-
-@Test public void tezt() {
- ...
- horizontalSwipe.get().perform();
- ...
- verticalSwiping.get().perform();
- ...
-}
-```
-
-```java
-public class GestureUtils {
-
- public static ActionSupplier swipe(final AppiumDriver> driver, final params) {
- return () -> {
- new TouchAction(driver).press(params)
- .waitAction(params).moveTo(params).release();
- };
- }
-}
-
-public class SomeTest {
- @Test public void tezt() {
- ...
- GestureUtils.swipe(driver, params).get().perform();
- ...
- }
-}
-
-```
\ No newline at end of file
diff --git a/docs/Page-objects.md b/docs/Page-objects.md
index 7bc36a267..ce7a04f1f 100644
--- a/docs/Page-objects.md
+++ b/docs/Page-objects.md
@@ -46,16 +46,15 @@ List someElements;
# The example for the crossplatform mobile native testing
```java
-import io.appium.java_client.MobileElement;
import io.appium.java_client.pagefactory.*;
@AndroidFindBy(someStrategy)
@iOSFindBy(someStrategy)
-MobileElement someElement;
+WebElement someElement;
@AndroidFindBy(someStrategy) //for the crossplatform mobile native
@iOSFindBy(someStrategy) //testing
-List someElements;
+List someElements;
```
# The fully cross platform example
diff --git a/docs/Tech-stack.md b/docs/Tech-stack.md
deleted file mode 100644
index cbaa01b2e..000000000
--- a/docs/Tech-stack.md
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
- + **AspectJ** and **CGlib**
-
-This project is based on [Selenium java client](https://github.com/SeleniumHQ/selenium/tree/master/java/client). It already depends on it and extends it to mobile platforms.
-
-This project is built by [gradle](https://gradle.org/)
-
-Also tech stack includes [Spring framework](https://spring.io/projects/spring-framework) in binding with AspectJ. This is used by [event firing feature](https://github.com/appium/java-client/blob/master/docs/The-event_firing.md). Also **CGlib** is used by [Page Object tools](https://github.com/appium/java-client/blob/master/docs/Page-objects.md).
-
-It is the client framework. It is the thin client which just sends requests to Appium server and receives responses. Also it has some
-high-level features which were designed to simplify user's work.
-
-# It supports:
-
-
-
-
\ No newline at end of file
diff --git a/docs/The-starting-of-an-Android-app.md b/docs/The-starting-of-an-Android-app.md
deleted file mode 100644
index 466756677..000000000
--- a/docs/The-starting-of-an-Android-app.md
+++ /dev/null
@@ -1,156 +0,0 @@
-# Steps:
-
-- you have to prepare environment for Android. [Details are provided here](https://appium.io/docs/en/drivers/android-uiautomator2/#basic-setup)
-
-- it needs to launch the appium server. You can launch Appium desktop application. If you use the server installed via npm then
-
- _$ node **the_path_to_main.js_file** --arg1 value1 --arg2 value2_
-It is not necessary to use arguments. [The list of arguments](https://appium.io/docs/en/writing-running-appium/server-args/)
-
-
-# The starting of an app
-
-It looks like creation of a common [RemoteWebDriver](https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/remote/RemoteWebDriver.html) instance.
-
-[Common capabilities](https://appium.io/docs/en/writing-running-appium/caps/#general-capabilities)
-
-[Android-specific capabilities](https://appium.io/docs/en/writing-running-appium/caps/#android-only)
-
-[Common capabilities provided by Java client](https://javadoc.io/page/io.appium/java-client/latest/io/appium/java_client/remote/MobileCapabilityType.html)
-
-[Android-specific capabilities provided by Java client](https://javadoc.io/page/io.appium/java-client/latest/io/appium/java_client/remote/AndroidMobileCapabilityType.html)
-
-```java
-import java.io.File;
-import org.openqa.selenium.remote.DesiredCapabilities;
-import io.appium.java_client.AppiumDriver;
-import io.appium.java_client.android.AndroidDriver;
-import io.appium.java_client.MobileElement;
-import java.net.URL;
-
-...
-File app = new File("The absolute or relative path to an *.apk file");
-DesiredCapabilities capabilities = new DesiredCapabilities();
-capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
-capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
-capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, MobilePlatform.ANDROID);
-//you are free to set additional capabilities
-AppiumDriver driver = new AppiumDriver<>(
-new URL("http://target_ip:used_port/wd/hub"), //if it needs to use locally started server
-//then the target_ip is 127.0.0.1 or 0.0.0.0
-//the default port is 4723
-capabilities);
-```
-
-or
-
-```java
-import java.io.File;
-import org.openqa.selenium.remote.DesiredCapabilities;
-import io.appium.java_client.AppiumDriver;
-import io.appium.java_client.MobileElement;
-import java.net.URL;
-
-...
-File app = new File("The absolute or relative path to an *.apk file");
-DesiredCapabilities capabilities = new DesiredCapabilities();
-capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
-capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
-//you are free to set additional capabilities
-AppiumDriver driver = new AndroidDriver<>(
-new URL("http://target_ip:used_port/wd/hub"), //if it needs to use locally started server
-//then the target_ip is 127.0.0.1 or 0.0.0.0
-//the default port is 4723
-capabilities);
-```
-
-
-## If it needs to start browser then
-
-This capability should be used
-
-```java
-capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, MobileBrowserType.CHROME);
-//if it is necessary to use the default Android browser then MobileBrowserType.BROWSER
-//is your choice
-```
-
-## There are three automation types
-
-```java
-capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, AutomationName.SELENDROID);
-```
-
-This automation type is usually recommended for old versions (<4.2) of Android.
-
-Default Android UIAutomator does not require any specific capability. However you can
-```java
-capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, AutomationName.APPIUM);
-```
-
-You have to define this automation type to be able to use Android UIAutomator2 for new Android versions
-```java
-capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, AutomationName.ANDROID_UIAUTOMATOR2);
-```
-
-# Possible cases
-
-You can use ```io.appium.java_client.AppiumDriver``` and ```io.appium.java_client.android.AndroidDriver``` as well. The main difference
-is that ```AndroidDriver``` implements all API that describes interaction with Android native/hybrid app. ```AppiumDriver``` allows to
-use Android-specific API eventually.
-
- _The sample of the activity starting by_ ```io.appium.java_client.AppiumDriver```
-
- ```java
- import io.appium.java_client.android.StartsActivity;
- import io.appium.java_client.android.Activity;
-
-...
-
-StartsActivity startsActivity = new StartsActivity() {
- @Override
- public Response execute(String driverCommand, Map parameters) {
- return driver.execute(driverCommand, parameters);
- }
-
- @Override
- public Response execute(String driverCommand) {
- return driver.execute(driverCommand);
- }
-};
-
-Activity activity = new Activity("app package goes here", "app activity goes here")
- .setWaitAppPackage("app wait package goes here");
- .setWaitAppActivity("app wait activity goes here");
-StartsActivity startsActivity.startActivity(activity);
- ```
-
-_Samples of the searching by AndroidUIAutomator using_ ```io.appium.java_client.AppiumDriver```
-
-```java
-import io.appium.java_client.FindsByAndroidUIAutomator;
-import io.appium.java_client.android.AndroidElement;
-
-...
-
-FindsByAndroidUIAutomator findsByAndroidUIAutomator =
- new FindsByAndroidUIAutomator() {
- @Override
- public AndroidElement findElement(String by, String using) {
- return driver.findElement(by, using);
- }
-
- @Override
- public List findElements(String by, String using) {
- return driver.findElements(by, using);
- };
-};
-
-findsByAndroidUIAutomator.findElementByAndroidUIAutomator("automatorString");
-```
-
-```java
-driver.findElement(MobileBy.AndroidUIAutomator("automatorString"));
-```
-
-All that ```AndroidDriver``` can do by design.
diff --git a/docs/The-starting-of-an-app-using-Appium-node-server-started-programmatically.md b/docs/The-starting-of-an-app-using-Appium-node-server-started-programmatically.md
index 5d0fc1e13..9397385c5 100644
--- a/docs/The-starting-of-an-app-using-Appium-node-server-started-programmatically.md
+++ b/docs/The-starting-of-an-app-using-Appium-node-server-started-programmatically.md
@@ -7,30 +7,6 @@
It works the similar way as common [ChromeDriver](https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/chrome/ChromeDriver.html), [InternetExplorerDriver](https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/ie/InternetExplorerDriver.html) of Selenium project or [PhantomJSDriver](https://cdn.rawgit.com/detro/ghostdriver/master/binding/java/docs/javadoc/org/openqa/selenium/phantomjs/PhantomJSDriver.html). They use subclasses of the [DriverService](https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/remote/service/DriverService.html).
-# Which capabilities this feature provides
-
-This feature provides abilities and options of the starting of a local Appium node server. End users still able to open apps as usual
-
-```java
- DesiredCapabilities capabilities = new DesiredCapabilities();
- capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, "");
- 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("remoteOrLocalAddress"), capabilities);
-```
-
-when the server is launched locally\remotely. Also user is free to launch a local Appium node server and open their app for the further testing the following way:
-
-```java
- DesiredCapabilities capabilities = new DesiredCapabilities();
- capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, "");
- capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
- capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
- capabilities.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 120);
- driver = new AndroidDriver<>(capabilities);
-```
-
# How to prepare the local service before the starting
@@ -49,6 +25,7 @@ when the server is launched locally\remotely. Also user is free to launch a loca
### FYI
There are possible problems related to local environment which could break this:
+
```java
AppiumDriverLocalService service = AppiumDriverLocalService.buildDefaultService();
```
diff --git a/docs/The-starting-of-an-iOS-app.md b/docs/The-starting-of-an-iOS-app.md
deleted file mode 100644
index 19b5ba2a0..000000000
--- a/docs/The-starting-of-an-iOS-app.md
+++ /dev/null
@@ -1,122 +0,0 @@
-# Steps:
-
-- you have to prepare environment for iOS. [Details are provided here](https://appium.io/docs/en/drivers/ios-xcuitest/#basic-setup)
-
-- it needs to launch the appium server. You can launch Appium desktop application. If you use the server installed via npm then
-
- _$ node **the_path_to_js_file** --arg1 value1 --arg2 value2_
-It is not necessary to use arguments. [The list of arguments](https://appium.io/docs/en/writing-running-appium/server-args/)
-
-# The starting of an app
-
-It looks like creation of a common [RemoteWebDriver](https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/remote/RemoteWebDriver.html) instance.
-
-[Common capabilities](https://appium.io/docs/en/writing-running-appium/caps/#general-capabilities)
-
-[iOS-specific capabilities](https://appium.io/docs/en/writing-running-appium/caps/#ios-only)
-
-[Common capabilities provided by Java client](https://javadoc.io/page/io.appium/java-client/latest/io/appium/java_client/remote/MobileCapabilityType.html)
-
-[iOS-specific capabilities provided by Java client](https://javadoc.io/page/io.appium/java-client/latest/io/appium/java_client/remote/IOSMobileCapabilityType.html)
-
-
-```java
-import java.io.File;
-import org.openqa.selenium.remote.DesiredCapabilities;
-import io.appium.java_client.AppiumDriver;
-import io.appium.java_client.MobileElement;
-import java.net.URL;
-
-...
-File app = new File("The absolute or relative path to an *.app, *.zip or ipa file");
-DesiredCapabilities capabilities = new DesiredCapabilities();
-capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "iPhone Simulator");
-capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "The_target_version");
-capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, MobilePlatform.IOS);
-//The_target_version is the supported iOS version, e.g. 8.1, 8.2, 9.2 etc
-capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
-//you are free to set additional capabilities
-AppiumDriver driver = new AppiumDriver<>(
-new URL("http://target_ip:used_port/wd/hub"), //if it needs to use locally started server
-//then the target_ip is 127.0.0.1 or 0.0.0.0
-//the default port is 4723
-capabilities);
-```
-
-or
-
-```java
-import java.io.File;
-import org.openqa.selenium.remote.DesiredCapabilities;
-import io.appium.java_client.AppiumDriver;
-import io.appium.java_client.ios.IOSDriver;
-import io.appium.java_client.MobileElement;
-import java.net.URL;
-
-...
-File app = new File("The absolute or relative path to an *.app, *.zip or ipa file");
-DesiredCapabilities capabilities = new DesiredCapabilities();
-capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "iPhone Simulator");
-capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "The_target_version");
-//The_target_version is the supported iOS version, e.g. 8.1, 8.2, 9.2 etc
-capabilities.setCapability(MobileCapabilityType.APP, app.getAbsolutePath());
-//you are free to set additional capabilities
-AppiumDriver driver = new IOSDriver<>(
-new URL("http://target_ip:used_port/wd/hub"), //if it needs to use locally started server
-//then the target_ip is 127.0.0.1 or 0.0.0.0
-//the default port is 4723
-capabilities);
-```
-
-## If it needs to start browser then
-
-```java
-capabilities.setCapability(MobileCapabilityType.BROWSER_NAME, MobileBrowserType.SAFARI);
-```
-
-## There are two automation types
-
-Default iOS Automation (v < iOS 10.x) does not require any specific capability. However you can
-```java
-capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, AutomationName.APPIUM);
-```
-
-You have to define this automation type to be able to use XCUIT mode for new iOS versions (v > 10.x)
-```java
-capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, AutomationName.IOS_XCUI_TEST);
-```
-
-# Possible cases
-
-You can use ```io.appium.java_client.AppiumDriver``` and ```io.appium.java_client.ios.IOSDriver``` as well. The main difference
-is that ```IOSDriver``` implements all API that describes interaction with iOS native/hybrid app. ```AppiumDriver``` allows to
-use iOS-specific API eventually.
-
-_Samples of the searching by iOSNsPredicateString using_ ```io.appium.java_client.AppiumDriver```
-
-```java
-import io.appium.java_client.FindsByIosNSPredicate;
-import io.appium.java_client.ios.IOSElement;
-
-...
-
-FindsByIosNSPredicate findsByIosNSPredicate = new FindsByIosNSPredicate() {
- @Override
- public IOSElement findElement(String by, String using) {
- return driver.findElement(by, using);
- }
-
- @Override
- public List findElements(String by, String using) {
- return driver.findElements(by, using);
- }
-};
-
-findsByIosNSPredicate.findElementByIosNsPredicate("some predicate");
-```
-
-```java
-driver.findElement(MobileBy.iOSNsPredicateString("some predicate"));
-```
-
-All that ```IOSDriver``` can do by design.
diff --git a/docs/Touch-actions.md b/docs/Touch-actions.md
deleted file mode 100644
index 920a8d898..000000000
--- a/docs/Touch-actions.md
+++ /dev/null
@@ -1,44 +0,0 @@
-Appium server side provides abilities to emulate touch actions. It is possible construct single, complex and multiple touch actions.
-
-# How to use a single touch action
-
-```java
-import io.appium.java_client.TouchAction;
-
-...
-//tap
-new TouchAction(driver)
- .tap(driver
- .findElementById("io.appium.android.apis:id/start")).perform();
-```
-
-# How to construct complex actions
-
-```java
-import io.appium.java_client.TouchAction;
-
-...
-//swipe
-TouchAction swipe = new TouchAction(driver).press(images.get(2), -10, center.y - location.y)
- .waitAction(2000).moveTo(gallery, 10, center.y - location.y).release();
-swipe.perform();
-```
-
-# How to construct multiple touch action.
-
-```java
-import io.appium.java_client.TouchAction;
-import io.appium.java_client.MultiTouchAction;
-
-...
-//tap by few fingers
- MultiTouchAction multiTouch = new MultiTouchAction(driver);
-
-for (int i = 0; i < fingers; i++) {
- TouchAction tap = new TouchAction(driver);
- multiTouch.add(tap.press(element).waitAction(duration).release());
-}
-
-multiTouch.perform();
-```
-