Skip to content
Skillpedia
Mobile apps48k · #2190

appium-skill

Helps your agent create automation scripts for Android and iOS mobile apps. Allows testing on real devices or emulators.

What it does

This tool generates automated test scripts for mobile apps (Android and iOS). It helps ensure apps work correctly by allowing tests on real phones or emulators.

When to use it

  • ✓When you need to create tests for a mobile app.
  • ✓When you want to test your app on different phones (Android/iOS).
  • ✓To automate the verification of features in mobile applications.

Example of what to ask your AI

“Create a test for app X on Android, using Java, and run it on an emulator.”

Want more? Open the sections below.

How to use

The easiest way: copy the message below and paste it into Claude, ChatGPT, Cursor or any AI. It reads the skill and follows the instructions.

Skill link

https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/appium-skill/SKILL.md

Ready-to-paste message

Use this skill to help me: https://github.com/sickn33/agentic-awesome-skills/blob/main/plugins/agentic-awesome-skills-claude/skills/appium-skill/SKILL.md Read the SKILL.md file at that link and follow its instructions for my task.
How it works

The tool analyzes your request, detects the operating system (Android/iOS) and the desired programming language (Java, Python, JavaScript). It then generates the test code with the correct configurations.

Installation

Easiest way: copy the skill link and paste it into Claude, ChatGPT or Cursor asking it to follow the instructions.

In the terminal (Claude Code, Codex, Cursor), in your project folder:

npx skills add sickn33/agentic-awesome-skills --skill appium-skill

Or download just the file:

curl -L https://raw.githubusercontent.com/sickn33/agentic-awesome-skills/main/plugins/agentic-awesome-skills-claude/skills/appium-skill/SKILL.md -o SKILL.md
Technical content (original SKILL.md)

Original text by the author, straight from GitHub.

Appium Automation Skill

When to Use

Use this skill when you need generates production-grade Appium mobile automation scripts for Android and iOS in Java, Python, or JavaScript. Supports real device and emulator testing locally and on TestMu AI cloud with 100+ real devices. Use when the user asks to automate mobile apps, test on Android/iOS, write...

You are a senior mobile QA architect. You write production-grade Appium tests for Android and iOS apps that run locally or on TestMu AI cloud real devices.

Step 1 — Execution Target

User says "test mobile app" / "automate app"
│
├─ Mentions "cloud", "TestMu", "LambdaTest", "real device farm"?
│  └─ TestMu AI cloud (100+ real devices)
│
├─ Mentions "emulator", "simulator", "local"?
│  └─ Local Appium server
│
├─ Mentions specific devices (Pixel 8, iPhone 16)?
│  └─ Suggest TestMu AI cloud for real device coverage
│
└─ Ambiguous? → Default local emulator, mention cloud for real devices

Step 2 — Platform Detection

├─ Mentions "Android", "APK", "Play Store", "Pixel", "Samsung", "Galaxy"?
│  └─ Android — automationName: UiAutomator2
│
├─ Mentions "iOS", "iPhone", "iPad", "IPA", "App Store", "Swift"?
│  └─ iOS — automationName: XCUITest
│
└─ Both? → Create separate capability sets for each

Step 3 — Language Detection

Signal Language Client
Default / "Java" Java io.appium:java-client
"Python", "pytest" Python Appium-Python-Client
"JavaScript", "Node" JavaScript webdriverio with Appium

For non-Java languages → read reference/<language>-patterns.md

Core Patterns — Java (Default)

Desired Capabilities — Android

UiAutomator2Options options = new UiAutomator2Options()
    .setDeviceName("Pixel 7")
    .setPlatformVersion("13")
    .setApp("/path/to/app.apk")
    .setAutomationName("UiAutomator2")
    .setAppPackage("com.example.app")
    .setAppActivity("com.example.app.MainActivity")
    .setNoReset(true);

AndroidDriver driver = new AndroidDriver(
    new URL("http://localhost:4723"), options
);

Desired Capabilities — iOS

XCUITestOptions options = new XCUITestOptions()
    .setDeviceName("iPhone 16")
    .setPlatformVersion("18")
    .setApp("/path/to/app.ipa")
    .setAutomationName("XCUITest")
    .setBundleId("com.example.app")
    .setNoReset(true);

IOSDriver driver = new IOSDriver(
    new URL("http://localhost:4723"), options
);

Locator Strategy Priority

1. AccessibilityId       ← Best: works cross-platform
2. ID (resource-id)      ← Android: "com.app:id/login_btn"
3. Name / Label          ← iOS: accessibility label
4. Class Name            ← Widget type
5. XPath                 ← Last resort: slow, fragile
// ✅ Best — cross-platform
driver.findElement(AppiumBy.accessibilityId("loginButton"));

// ✅ Good — Android resource ID
driver.findElement(AppiumBy.id("com.example:id/login_btn"));

// ✅ Good — iOS predicate
driver.findElement(AppiumBy.iOSNsPredicateString("label == 'Login'"));

// ✅ Good — Android UiAutomator
driver.findElement(AppiumBy.androidUIAutomator(
    "new UiSelector().text("Login")"
));

// ❌ Avoid — slow, fragile
driver.findElement(AppiumBy.xpath("//android.widget.Button[@text='Login']"));

Wait Strategy

WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(15));

// Wait for element visible
WebElement el = wait.until(
    ExpectedConditions.visibilityOfElementLocated(AppiumBy.accessibilityId("dashboard"))
);

// Wait for element clickable
wait.until(ExpectedConditions.elementToBeClickable(AppiumBy.id("submit"))).click();

Gestures

// Tap
WebElement el = driver.findElement(AppiumBy.accessibilityId("item"));
el.click();

// Long press
PointerInput finger = new PointerInput(PointerInput.Kind.TOUCH, "finger");
Sequence longPress = new Sequence(finger, 0);
longPress.addAction(finger.createPointerMove(Duration.ofMillis(0),
    PointerInput.Origin.viewport(), el.getLocation().x, el.getLocation().y));
longPress.addAction(finger.createPointerDown(PointerInput.MouseButton.LEFT.asArg()));
longPress.addAction(new Pause(finger, Duration.ofMillis(2000)));
longPress.addAction(finger.createPointerUp(PointerInput.MouseButton.LEFT.asArg()));
driver.perform(List.of(longPress));

// Swipe up (scroll down)
Dimension size = driver.manage().window().getSize();
int startX = size.width / 2;
int startY = (int) (size.height * 0.8);
int endY = (int) (size.height * 0.2);

…
FAQ

What are 'Desired Capabilities'?

These are settings that tell Appium how the test should run, such as which device to use, which app to test, and which operating system.

What's the difference between testing on an emulator and a real phone?

Emulators simulate a phone on your computer, making them faster for initial tests. Real phones are physical devices and provide more accurate results on how the app truly functions.

Why use 'AccessibilityId' to find elements?

It's the most reliable and fastest way to find buttons and fields in an app, as it works on both Android and iOS and is less prone to changes in the app's design.

Details

Original description by the author

Generates production-grade Appium mobile automation scripts for Android and iOS in Java, Python, or JavaScript. Supports real device and emulator testing locally and on TestMu AI cloud with 100+ real devices.

repo: sickn33/agentic-awesome-skills

Popularity

GitHub stars
48k
Ranking position
#2190
License
MIT
Updated
10/15/2026

Is this skill useful?

0

Sign in to vote.

Comments

  • …

More skills from this repository

Similar skills