Friday, April 11, 2025

Appium 2.0 and 1.0 comparison.

Appium 2.0 is a major architectural upgrade from Appium 1.0,.



Appium 1.x vs Appium 2.0 – Real-Time Differences


🔸 1. Architecture: Monolithic vs Plugin-based

Appium 1.x:

"In our previous project, we used Appium 1.x, where all drivers and platforms (Android, iOS) were bundled together. This meant whenever we upgraded Appium, everything—whether we used it or not—was affected."

Appium 2.0:

"Now with Appium 2.0, we're using a plugin-based architecture. We only install the drivers we actually need—like UiAutomator2 or XCUITest. This gives us more control and keeps the environment lightweight."

🧠 Real Use Case: In my team, we built a Docker setup that only installs the Android driver, which reduces build time by ~30% compared to 1.x.


🔸 2. Drivers Installed Separately

Appium 1.x:

"Drivers like uiautomator2 or xcuitest came pre-bundled. Upgrading or customizing them was difficult."

Appium 2.0:

"Now, drivers are installed and managed individually using the Appium CLI. For example:

appium driver install uiautomator2

This helped us debug driver-specific issues faster."


🔸 3. Support for Custom Drivers & Plugins

Appium 2.0:

"We created a custom plugin that logs all actions to a dashboard, which wasn't possible in 1.x. The plugin architecture gave us flexibility to extend Appium without changing the core."

🧠 Real Use Case: We used a plugin to integrate visual logs with our test results for better analysis.


🔸 4. W3C Standard Capabilities Only

Appium 1.x:

"It accepted non-standard capabilities like automationName, appPackage, deviceName."

Appium 2.0:

"Now everything has to follow the W3C WebDriver standard. Capabilities like platformName or deviceName must be grouped under alwaysMatch and firstMatch."

💡 Example JSON Capabilities in 2.0:

{
  "capabilities": {
    "alwaysMatch": {
      "platformName": "Android",
      "appium:deviceName": "emulator-5554"
    }
  }
}

🔸 5. CLI Commands & Dev Experience

Appium 2.0:

"Appium CLI has improved. We can list installed drivers and plugins, install new ones, and even update them easily."

appium driver list
appium plugin install --source npm my-plugin

🧠 In one project, we used CLI to script driver upgrades as part of our CI pipeline.


🔸 6. Better Version Control

"With Appium 2.0, we can freeze versions of individual drivers. So if Android driver v2.20 has a bug, we don’t need to upgrade it just to get Appium working."


📌 Summary Table

Feature Appium 1.x Appium 2.0
Architecture Monolithic Plugin-based
Driver Installation Bundled Install separately
Custom Drivers/Plugins
W3C Standard Partial Enforced
CLI Support Basic Enhanced
CI/CD Flexibility Limited High

If you're asked this in an interview, you can close your answer with something like:

“Overall, Appium 2.0 gave our team better modularity, faster builds, and the ability to scale with custom plugins. It's more aligned with how modern automation frameworks are evolving.”

=======================================================================


Perfect. Let's approach this as if you're explaining it from a tester’s hands-on perspective — focusing on what actually changed for you while writing and maintaining tests in Appium 2.0 vs 1.x.


✅ Appium 2.0 Advantages for Testers (Real-World View)


🔹 1. Cleaner, Modular Code with Plugin Support

Appium 1.x:

  • Everything was bundled.

  • You often had to write workaround methods or import extra utilities.

Appium 2.0:

  • You can use official plugins like:

    • element-wait (for smart waits),

    • gestures (for swipe, scroll),

    • or even your own custom logging plugin.

Advantage:

“I used the gestures plugin to simplify scrolling/swiping code across Android & iOS, which reduced 30+ lines of platform-specific code to 5 lines.”


🔹 2. Improved Gesture Support (Scroll, Swipe, Tap)

Appium 1.x:

  • You had to use TouchAction which wasn’t always stable.

new TouchAction(driver)
  .press({x: 100, y: 500})
  .moveTo({x: 100, y: 100})
  .release()
  .perform();

Appium 2.0:

  • Now with W3C Actions API and plugins, gestures are more natural and readable.

await driver.performActions([{
  type: 'pointer',
  id: 'finger1',
  parameters: { pointerType: 'touch' },
  actions: [
    { type: 'pointerMove', duration: 0, x: 100, y: 500 },
    { type: 'pointerDown', button: 0 },
    { type: 'pointerMove', duration: 500, x: 100, y: 100 },
    { type: 'pointerUp', button: 0 }
  ]
}]);

✅ Bonus: You can even install the Gestures Plugin and use built-in scroll/tap/swipe commands.


🔹 3. Improved Locator Strategies

Appium 1.x:

  • XPath was often used by default, which is slow and brittle.

Appium 2.0:

  • More drivers encourage UI selectors:

    • Android: uiautomator, accessibility id, resource-id

    • iOS: predicate string, class chain

Advantage:

“We updated our locators from XPath to accessibility ids, which reduced test flakiness and improved speed by ~40%.”


🔹 4. Better Error Messages and Debugging

Appium 1.x:

  • Errors were sometimes vague, like “element not found.”

Appium 2.0:

  • Plugin support and improved driver logs give better traceability.

  • Can attach plugins for screenshots or trace dumps when tests fail.

🧠 Real Usage:

“We used a plugin to capture screenshots on failure and store them in CI automatically — this reduced debug time by 50%.”


🔹 5. Reusable Test Sessions (Storage State)

Appium 2.0 lets you save authentication/session states, just like Playwright.

“In Appium 2.0, we reused login sessions by exporting session data and loading it back into new tests, saving login time on every run.”


🔹 6. Improved CI/CD Integration

  • Tests can be optimized per driver (e.g., only install Android driver in Android jobs).

  • Cleaner Docker builds using only the drivers you need.

“We reduced our CI build image size from 2.2GB to 1.1GB using custom driver setup in Appium 2.0.”


🔹 7. Consistent API Across Drivers

All drivers follow W3C WebDriver standard.

Benefit for testers:

“No more learning different commands between Android and iOS. Scroll, tap, and wait commands work the same way.”


🧪 Summary: Tester-Centric Benefits

Feature Appium 1.x Appium 2.0 Real Advantage
Code Cleanliness ✅ OK ✅✅ Cleaner Plugins reduce boilerplate
Gestures ❌ TouchAction only ✅ W3C + plugins Reliable scrolling/swipes
Locators ❌ Mostly XPath ✅ Native selectors Faster, stable tests
Error Logs ❌ Basic ✅ Detailed Easier debugging
Session Reuse ❌ No ✅ Yes Saves time in login
Docker Support ❌ Bulky ✅ Modular Smaller images
Plugin Ecosystem ❌ None ✅ Active Extend Appium easily

🚀 Interview Tip

“From a tester’s point of view, Appium 2.0 improved our coding experience, test speed, and stability. Especially when working across multiple platforms, these small quality-of-life improvements made a big difference in our CI pipeline and team productivity.”


==============================================================


Absolutely! Here's a hands-on Appium 2.0 Cheat Sheet focused on scroll, swipe, gestures, setup, and must-know commands — perfect for day-to-day testing and interviews.


Appium 2.0 Cheat Sheet – Setup + Scroll/Swipe


🔧 Basic Setup

1. Install Appium 2.x

npm install -g appium@next

2. Install Drivers

appium driver install uiautomator2     # For Android
appium driver install xcuitest         # For iOS

3. Run Appium Server

appium --base-path /wd/hub

📲 Desired Capabilities (W3C Format)

{
  "platformName": "Android",
  "appium:deviceName": "emulator-5554",
  "appium:automationName": "UiAutomator2",
  "appium:app": "/path/to/app.apk"
}

🧭 Swipe Example (W3C Actions API)

await driver.performActions([
  {
    type: 'pointer',
    id: 'finger1',
    parameters: { pointerType: 'touch' },
    actions: [
      { type: 'pointerMove', duration: 0, x: 300, y: 1000 },
      { type: 'pointerDown', button: 0 },
      { type: 'pointerMove', duration: 1000, x: 300, y: 300 },
      { type: 'pointerUp', button: 0 }
    ]
  }
]);

📜 Scroll into View (Android UiAutomator2)

await driver.findElement("android=uiautomator", 
  'new UiScrollable(new UiSelector().scrollable(true)).scrollIntoView(new UiSelector().text("Target Text"))');

💡 Tap, Long Press, Drag & Drop (W3C Style)

// Tap
await driver.performActions([{
  type: 'pointer', id: 'finger1', parameters: { pointerType: 'touch' },
  actions: [
    { type: 'pointerMove', duration: 0, x: 200, y: 600 },
    { type: 'pointerDown', button: 0 },
    { type: 'pointerUp', button: 0 }
  ]
}]);
// Long Press
await driver.performActions([{
  type: 'pointer', id: 'finger1', parameters: { pointerType: 'touch' },
  actions: [
    { type: 'pointerMove', duration: 0, x: 200, y: 600 },
    { type: 'pointerDown', button: 0 },
    { type: 'pause', duration: 2000 },
    { type: 'pointerUp', button: 0 }
  ]
}]);

🔍 Locators – Best Practices

Platform Recommended Locators
Android accessibility id, resource-id, uiautomator
iOS accessibility id, predicate string, class chain

⚙️ CLI Commands You Should Know

appium driver list                         # List installed drivers
appium driver install uiautomator2         # Install driver
appium plugin list                         # List installed plugins
appium plugin install appium-wait-plugin   # Example plugin

📦 Session Reuse (Store Session Details)

const session = await driver.getSession(); // Save session ID

Then reattach in the next test:

await remote({ sessionId: 'saved-session-id', capabilities });

🎯 Tips for Interview

  • Mention W3C gestures = modern, reliable scroll/swipe

  • Use uiautomator2 or accessibility id for speed

  • Explain how plugins help (e.g., auto screenshots, custom logs)

  • Highlight modularity: install only the driver/platform you need

  • Say: "Appium 2.0 helped our team reduce test flakiness and speed up execution by 30-40%"


No comments:

Post a Comment