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: grpo-rl-training description: GRPO reinforcement learning training with TRL. Use when applying Group Relative Policy Optimization for reasoning and task-specific model training. --- # GRPO/RL Training with TRL Expert-level guidance for implementing Group Relative Policy Optimization (GRPO) using the Transformer Reinforcement Learning (TRL) library. This skill provides battle-tested patterns, critical insights, and production-r
tools
<!-- AUTO-GENERATED by export-skills.py — DO NOT EDIT --> --- name: graphql-architect description: Master modern GraphQL with federation, performance optimization, --- ## Use this skill when - Working on graphql architect tasks or workflows - Needing guidance, best practices, or checklists for graphql architect ## Do not use this skill when - The task is unrelated to graphql architect - You need a different domain or tool outside this scope ## Instructions - Clarify goals, constraints, and
development
<!-- AUTO-GENERATED by export-skills.py — DO NOT EDIT --> --- name: grafana-dashboards description: Create and manage production Grafana dashboards for real-time visualization of system and application metrics. Use when building monitoring dashboards, visualizing metrics, or creating operational observability interfaces. --- # Grafana Dashboards Create and manage production-ready Grafana dashboards for comprehensive system observability. ## Do not use this skill when - The task is unrelated
development
<!-- AUTO-GENERATED by export-skills.py — DO NOT EDIT --> --- name: gptq description: GPTQ post-training quantization for generative models. Use when quantizing large models to 4-bit with calibration-based weight compression. --- # GPTQ (Generative Pre-trained Transformer Quantization) Post-training quantization method that compresses LLMs to 4-bit with minimal accuracy loss using group-wise quantization. ## When to use GPTQ **Use GPTQ when:** - Need to fit large models (70B+) on limited GPU