agentsclimarketplace

Maestro flutter

Skill aleksandr-chaika/flutter-clean-arch-skills/skills/maestro-flutter

Complete Flutter development pipeline — Clean Architecture + BLoC + Maestro QE. Autonomous agents for PM, dev, review, testing

Install
npx -y skills add aleksandr-chaika/flutter-clean-arch-skills --skill maestro-flutter

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 5 stars5 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Maestro E2E testing knowledge for Flutter apps. YAML-based flows, TestKeys, visual regression, Maestro MCP integration. Background knowledge for QE E2E testing phase.

SKILL.md

3.4 KB, as published. Nobody here has run it

Maestro Flutter E2E Testing Guide

Reference Guide

TopicReferenceUse When
Flow Patternsreferences/flow-patterns.mdWriting YAML flows, Flutter-specific tips
CI & Visual Regressionreferences/ci-visual-regression.mdCI/CD setup, visual comparison, troubleshooting

Core Principles

  1. ADD semantic labelsKey() / Semantics on all interactive widgets
  2. WRITE flows in YAML — simple, readable, no code
  3. RUN on emulator first, then real devices
  4. CAPTURE screenshots at key assertion points
  5. USE visual regression for Pixel Perfect validation

TestKeys Pattern (MANDATORY)

// lib/core/constants/test_keys.dart
abstract class TestKeys {
  static const emailField = Key('email_field');
  static const passwordField = Key('password_field');
  static const loginButton = Key('login_button');
  static const registerButton = Key('register_button');
  static const homeTab = Key('home_tab');
  static const profileTab = Key('profile_tab');
  static const loadingIndicator = Key('loading_indicator');
  static const errorMessage = Key('error_message');
}

Project Structure

.maestro/
├── config.yaml
└── flows/
    ├── auth/
    │   ├── login.yaml
    │   └── register.yaml
    ├── {feature}/
    │   └── {action}.yaml
    └── smoke_test.yaml

Flow YAML Syntax

appId: com.example.myapp
name: User Login
---
- launchApp:
    clearState: true
- extendedWaitUntil:
    visible: "Welcome"
    timeout: 10000
- tapOn:
    id: "email_field"
- inputText: ${TEST_EMAIL}
- tapOn:
    id: "password_field"
- inputText: ${TEST_PASSWORD}
- tapOn:
    id: "login_button"
- waitForAnimationToEnd
- assertVisible:
    id: "home_tab"
- takeScreenshot: "login_success"

Key Commands

CommandDescription
tapOn: { id: "key" }Tap by widget Key
inputText: "value"Type text
assertVisible: "text"Assert visible
assertNotVisible: "text"Assert gone
extendedWaitUntilWait for element
waitForAnimationToEndWait animations
takeScreenshot: "name"Screenshot
runFlow: path.yamlReuse flow
launchApp: { clearState: true }Fresh start

Running Tests

flutter build apk --debug
maestro test .maestro/flows/

Testing Pyramid

              ┌─────────────────┐
              │    Maestro      │  10% — Full user journeys
              └────────┬────────┘
            ┌──────────┴──────────┐
            │   Widget Tests      │  20% — UI components
            └──────────┬──────────┘
  ┌────────────────────┴────────────────────┐
  │              Unit Tests                  │  70% — Business logic
  │  (BLoC, UseCases, Repositories)          │  mocktail, bloc_test
  └──────────────────────────────────────────┘

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.