What Is New In Appium 2.0?


1. Appium 2 Installation
  
npm i -g appium@next
  
2. Driver Installation
  
From Appium 2.0 drivers can be installed/uninstalled or updated independently. For example,
  if an update is available for XCUITest then rather than waiting for a new Appium server 
  release we can update the driver only by using CLI commands.
  
  Install IOS Driver in Appium 2:
  
  appium driver install xcuitest
  
  Install Android Driver in Appium 2:
  
  appium driver install uiautomator2
  
  How to Update Driver:
  
  appium driver update xcuitest
  
  Update Multiple drivers :
  
  appium driver update xcuitest,uiautomator2
  
  How to check all available/Installed drivers
  
  appium driver list
  
  
3. Capabilities In Appium 2.0
  
Now User needs to include the vendor prefix in the non-standard capabilities names. 
  For Example, if you wish to provide deviceName in capabilities, it should consist of the
  vendor prefix “appium:deviceName“.
  
  Appium 1 (Older way):
Earlier in the Appium 1. x version we used to define capabilities using DesiredCapabilities 
  class to set various properties and preferences that define how an automation session should be 
  established with a mobile device or an emulator.

DesiredCapabilities androidCaps = new DesiredCapabilities();
       androidCaps.setCapability("deviceName", "Pixel XL API 30");
       androidCaps.setCapability("automationName", "UIAutomator2");
       androidCaps.setCapability("udid", "emulator-5554"); 
       androidCaps.setCapability("platformName", "Android");
 
     androidCaps.setCapability("app",System.getProperty("user.dir") + "/src/test/resources/files/Bilgikolik.apk");
                
      androidCaps.setCapability("appPackage", "com.testapp.app");
      androidCaps.setCapability("appActivity", "com.testapp.app");
  driver = new AndroidDriver(newURL("http://127.0.0.1:4723"),androidCaps);
Appium 2 Capabilities
In Appium 2, we use UiAutomator2Options class that provides information to Appium about 
  the desired configuration for the test session. Refer below code.

UiAutomator2Options capabilities = new UiAutomator2Options();
 capabilities.setPlatformName("Android").setAutomationName("UIAutomator2")
               .setAppPackage("Package Name").setAppActivity("Activity Name")
               .setApp("App Path");
AndroidDriver driver = new AndroidDriver(new URL("http://0.0.0.0:4723/"),c
  
  
  
  
4. Appium Inspector
  
  Appium 2.0 segregated Appium Inspector from Appium Desktop. Also, the Appium team provided
  the browser version of the Appium inspector.  To test against local servers, you’ll need to
  start the server with --allow-cors so that the browser-based version of Appium Inspector can 
  access the Appium server to start sessions.
  
  
  
5. Changes In Drivers and Classes
  
  
SelendroidDriver class is removed.
MobileElement classes including AndroidElement and iOSElement classes are removed. It is recommended 
  to use WebElement.
@AndroidFindBy(xpath ="//android.widget.TextView[@text='Continue']")
 private WebElement Continue;
Mobile By Class has been removed, and AppiumBy Class has been introduced.
Older Way:

driver.findElement(MobileBy.id("loginbutton")).click();
New Way:

driver.findElement(AppiumBy.id("loginbutton")).click();
All locator names in AppiumBy have been aligned to follow the camelCase naming strategy, 
  e.g. MobileBy.AccessibilityId was changed to AppiumBy.accessibilityId.
Appium Driver is directly inherited from Selenium’s RemoteWebDriver. There is no intermediate
  layer between AppiumDriver and RemoteWebDriver.
ResetApp, launch apps, and closeApp methods have been depreciated.
Appium Inspector is split out from Appium Desktop. Appium Inspector can be used with its web
  version without downloading anything.
  
  
  
6. TouchAction/MultiTouchAction
  
  From Appium 2.0 both TouchAction and MultiTouchAction class has been depreciated.W3c Action 
  API will be used for automating gestures. For Example, the double Click Gesture can be achieved using the below code:

driver.executeScript("mobile: doubleClickGesture", ImmutableMap.of(
   "elementId", ((RemoteWebElement) element).getId());
  
  Reference Link Click here