skills/codex/android-app-testing/SKILL.md
<!-- AUTO-GENERATED by export-skills.py — DO NOT EDIT --> --- name: android-app-testing description: Automated testing for Android applications using Appium with Espresso driver. Use when testing native Android apps (.apk files), verifying mobile UI functionality, automating gestures (swipe, scroll, tap), or running blackbox tests on Android devices/emulators. Covers Espresso (fast, source-required) and UI Automator 2 (black-box) approaches. --- # Android App Testing Test Android applications
npx skillsauth add frank-luongt/faos-skills-marketplace skills/codex/android-app-testingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Test Android applications using Appium with Espresso driver for fast, reliable automation.
Key Advantage: Espresso driver is 2x faster than UI Automator 2 with automatic UI synchronization -- no manual waits needed.
Do you have app source code?
Yes -> Use Espresso driver (FAST, automatic waits)
No -> Use UI Automator 2 driver (black-box testing)
Use Espresso whenever possible (requires app source code but 2x faster).
appium driver install espressopip install Appium-Python-Clientadb devicesfrom appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.webdriver.common.appiumby import AppiumBy
# Configure for Espresso (fast)
options = UiAutomator2Options()
options.platform_name = "Android"
options.automation_name = "Espresso" # Use Espresso for speed
options.app = "/path/to/app.apk"
options.device_name = "Android Emulator"
options.auto_grant_permissions = True
# Start session
driver = webdriver.Remote("http://localhost:4723", options=options)
# Espresso automatically waits - just find and interact
driver.find_element(by=AppiumBy.ID, value="username").send_keys("testuser")
driver.find_element(by=AppiumBy.ID, value="login_button").click()
# Verify result
assert driver.find_element(by=AppiumBy.ID, value="home_screen").is_displayed()
driver.quit()
| Strategy | Speed | Example |
|---|---|---|
| ID | Fastest | AppiumBy.ID, "button_login" |
| Accessibility ID | Fast | AppiumBy.ACCESSIBILITY_ID, "login" |
| Class Name | Medium | AppiumBy.CLASS_NAME, "android.widget.Button" |
| XPath | Slowest | Avoid unless necessary |
# Tap at coordinates
driver.execute_script('mobile: clickGesture', {'x': 100, 'y': 200})
# Swipe
driver.execute_script('mobile: swipeGesture', {
'left': 100, 'top': 500, 'width': 200, 'height': 200,
'direction': 'up', 'percent': 0.75
})
# Long press
driver.execute_script('mobile: longClickGesture', {
'elementId': element.id, 'duration': 2000
})
driver.save_screenshot('/tmp/screen.png')buttons = driver.find_elements(by=AppiumBy.CLASS_NAME, value="android.widget.Button")
for btn in buttons:
print(f"Button: {btn.text} (ID: {btn.get_attribute('resource-id')})")
| Avoid | Why | Instead |
|---|---|---|
| XPath locators | Very slow | Use ID or Accessibility ID |
| TouchAction class | Removed in Appium 2.0+ | Use mobile: gesture scripts |
| time.sleep() with Espresso | Espresso has automatic waits | Let Espresso handle synchronization |
| Missing finally block | Leaves sessions open | Always driver.quit() in finally |
| Testing before Appium server starts | Tests fail immediately | Start Appium server first: appium |
development
<!-- AUTO-GENERATED by export-skills.py — DO NOT EDIT --> --- name: databricks-mlflow-evaluation --- # MLflow 3 GenAI Evaluation ## Before Writing Any Code 1. **Read GOTCHAS.md** - 15+ common mistakes that cause failures 2. **Read CRITICAL-interfaces.md** - Exact API signatures and data schemas ## End-to-End Workflows Follow these workflows based on your goal. Each step indicates which reference files to read. ### Workflow 1: First-Time Evaluation Setup For users new to MLflow GenAI evalu
development
<!-- AUTO-GENERATED by export-skills.py — DO NOT EDIT --> --- name: databricks-lakebase-provisioned --- # Lakebase Provisioned Patterns and best practices for using Lakebase Provisioned (Databricks managed PostgreSQL) for OLTP workloads. ## When to Use Use this skill when: - Building applications that need a PostgreSQL database for transactional workloads - Adding persistent state to Databricks Apps - Implementing reverse ETL from Delta Lake to an operational database - Storing chat/agent m
tools
<!-- AUTO-GENERATED by export-skills.py — DO NOT EDIT --> --- name: databricks-jobs --- # Databricks Lakeflow Jobs ## Overview Databricks Jobs orchestrate data workflows with multi-task DAGs, flexible triggers, and comprehensive monitoring. Jobs support diverse task types and can be managed via Python SDK, CLI, or Asset Bundles. ## Reference Files | Use Case | Reference File | | ----------------------
development
<!-- AUTO-GENERATED by export-skills.py — DO NOT EDIT --> --- name: databricks-genie --- # Databricks Genie Create and query Databricks Genie Spaces - natural language interfaces for SQL-based data exploration. ## Overview Genie Spaces allow users to ask natural language questions about structured data in Unity Catalog. The system translates questions into SQL queries, executes them on a SQL warehouse, and presents results conversationally. ## When to Use This Skill Use this skill when: -