用途:为使用 Patrol 编写 Flutter 端到端(E2E)测试提供一套推荐架构与规则,来源为 leancodepl/patrol-webinar 的 patrol-tests 技能。
主要能力与架构:测试用自定义 testApp 包装器,每个测试文件只含一个测试;按 Modules(面向用户的功能,如 Auth、Home、Downloads、Player)、System(原生交互,如开启飞行模式)、ApiClients(聚合后端、邮件服务器等 API 客户端)组织。测试文件只调用模块方法,不直接使用 Patrol API;新步骤先写在测试文件中,通过后再重构进模块。
使用方式:编写前先读测试步骤与关键文件(模块聚合器、测试包装器、main keys.dart、相关功能文件),复用已有模块函数;为所需元素分配测试键;开发中频繁运行测试。可用 Patrol MCP:patrol-run({ "testFile": "patrol_test/your_test.dart" })、patrol-screenshot({ "platform": "android" })、patrol-quit({})、patrol-status({})、patrol-native-tree({})。仅用 Patrol MCP 运行单个测试、patrol test 运行全部,不用 flutter test。
规则要点:直接使用 Patrol API 的文件需 import 'package:patrol/patrol.dart';;scrollTo() 返回 Future<PatrolFinder>,可链式 await $(key).scrollTo().tap(),禁止双重 await;用 $(ParentWidget).containing($(childKey)) 定位父组件;只用 key 查找组件;tap、scrollTo、enterText 前后不加等待方法,断言放在测试末尾,优先 waitUntilVisible;原生权限优先 $.platform.mobile.grantPermissionWhenInUse;不要自行写 patrolSetUp/patrolTearDown。
测试键:只为参与测试的组件加 key,不改组件签名、不重构、不新建组件;每个功能目录最多一个 keys.dart,键按字母排序,主 lib/keys.dart 只聚合;用 key: keys.feature.widgetName 模式,动态或枚举生成的组件用参数化键。
限制:资料未提供安装命令、收费、平台支持范围与效果数据。