[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-9400":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":23,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":35,"readmeContent":36,"aiSummary":37,"trendingCount":16,"starSnapshotCount":16,"syncStatus":38,"lastSyncTime":39,"discoverSource":40},9400,"patrol","leancodepl\u002Fpatrol","leancodepl","Flutter-first UI testing framework. Ready for action!","https:\u002F\u002Fpatrol.leancode.co",null,"Dart",1339,224,12,186,0,1,18,78,3,20.06,"Apache License 2.0",false,"master",[26,27,28,29,30,31,32,33,34],"dart","flutter","flutter-test","greybox-testing","hacktoberfest","integration-testing","testing","ui-automation","whitebox-testing","2026-06-12 02:02:07","# Patrol\n\n[![patrol on pub.dev][patrol_badge]][patrol_link]\n[![patrol_cli on pub.dev][patrol_cli_badge]][patrol_cli_link]\n[![patrol_finders on pub.dev][patrol_finders_badge]][patrol_finders_link]\n[![patrol_discord]][patrol_discord_link]\n[![code style][leancode_lint_badge]][leancode_lint_link]\n[![patrol_github_stars]][patrol_github_link]\n[![patrol_x]][patrol_x_link]\n\nA powerful, multiplatform E2E UI testing framework for Flutter apps that overcomes the limitations of integration_test by handling native interactions. Developed by LeanCode since 2022, battle-tested and shaped by production-grade experience.\n\n[![Patrol promotional graphics][promo_graphics]][docs]\n\n## Learn more about Patrol:\n\n- [Our extensive documentation][docs]\n- [How Patrol 4.0 Makes Cross-Platform Flutter Testing Possible][article_4x]\n- [Simplifying Flutter Web Testing: Patrol Web][article_web]\n- [Patrol VS Code Extension - A Better Way to Run and Debug Flutter UI Tests][article_vscode]\n\n## How can we help you:\n\nPatrol is an open-source framework created and maintained by LeanCode.\nHowever, if your company wants to scale fast and accelerate Patrol’s\nadoption, we offer a set of value-added services on top of the core framework.\n\nYou can find out more below:\n\n- 🚀  [Automate Flutter app testing with Patrol][automate_flutter_app_testing_with_patrol]\n- 🚀  [Patrol Setup & Patrol Training][patrol_setup_and_training]\n\n## Patrol custom finders\n\nFlutter's finders are powerful, but not very intuitive to use.\n\nWe took them and made something awesome.\n\nThanks to Patrol's custom finders, you'll take your tests from this:\n\n```dart\ntestWidgets('signs up', (WidgetTester tester) async {\n  await tester.pumpWidget(AwesomeApp());\n  await tester.pumpAndSettle();\n\n  await tester.enterText(\n    find.byKey(Key('emailTextField')),\n    'charlie@root.me',\n  );\n  await tester.pumpAndSettle();\n\n  await tester.enterText(\n    find.byKey(Key('nameTextField')),\n    'Charlie',\n  );\n  await tester.pumpAndSettle();\n\n  await tester.enterText(\n    find.byKey(Key('passwordTextField')),\n    'ny4ncat',\n  );\n  await tester.pumpAndSettle();\n\n  await tester.tap(find.byKey(Key('termsCheckbox')));\n  await tester.pumpAndSettle();\n\n  await tester.tap(find.byKey(Key('signUpButton')));\n  await tester.pumpAndSettle();\n\n  expect(find.text('Welcome, Charlie!'), findsOneWidget);\n});\n```\n\nto this:\n\n```dart\npatrolTest('signs up', (PatrolIntegrationTester $) async {\n  await $.pumpWidgetAndSettle(AwesomeApp());\n\n  await $(#emailTextField).enterText('charlie@root.me');\n  await $(#nameTextField).enterText('Charlie');\n  await $(#passwordTextField).enterText('ny4ncat');\n  await $(#termsCheckbox).tap();\n  await $(#signUpButton).tap();\n\n  await $('Welcome, Charlie!').waitUntilVisible();\n});\n```\n\n[Learn more about custom finders in the docs][docs_finders]!\n\nPatrol's custom finders are also available standalone in [the patrol_finders\npackage][patrol_finders_link].\n\n## Patrol native automation\n\nFlutter's default [integration_test] package can't interact with the OS your\nFlutter app is running on. This makes it impossible to test many critical\nbusiness features, such as:\n\n- granting runtime permissions\n- signing into the app which through WebView or Google Services\n- tapping on notifications\n- [much more!](https:\u002F\u002Fpatrol.leancode.co\u002Fnative\u002Ffeature-parity)\n\nPatrol's native automation feature solves these problems:\n\n```dart\nvoid main() {\n  patrolTest('showtime', (PatrolIntegrationTester $) async {\n    await $.pumpWidgetAndSettle(AwesomeApp());\n    \u002F\u002F prepare network conditions\n    await $.platform.mobile.enableCellular();\n    await $.platform.mobile.disableWifi();\n\n    \u002F\u002F toggle system theme\n    await $.platform.mobile.enableDarkMode();\n\n    \u002F\u002F handle native location permission request dialog\n    await $.platform.mobile.selectFineLocation();\n    await $.platform.mobile.grantPermissionWhenInUse();\n\n    \u002F\u002F tap on the first notification\n    await $.platform.mobile.openNotifications();\n    await $.platform.mobile.tapOnNotificationByIndex(0);\n  });\n}\n\n```\n\n## CLI\n\nSee [packages\u002Fpatrol_cli][github_patrol_cli].\n\nThe CLI is needed to enable Patrol's native automation feature in integration\ntests. It also makes development of integration tests much faster thanks to [Hot\nRestart].\n\nTo run widget tests, you can continue to use `flutter test`.\n\n## Package\n\nSee [packages\u002Fpatrol][github_patrol].\n\n## CI\u002FCD Workflows\n\nSee [.github\u002FWORKFLOWS.md][github_workflows] for detailed documentation about all GitHub Actions workflows, including test schedules, Flutter versions, and deployment pipelines.\n\n## Patrol contracts generator\n\n1. (Optionally) add new request type:\n\n```dart\nclass OpenAppRequest {\n  late String appId;\n}\n```\n\n2. Add new method to `NativeAutomator`:\n\n```dart\nabstract class NativeAutomator\u003CIOSServer, AndroidServer, DartClient> {\n  ...\n  void openApp(OpenAppRequest request);\n  ...\n}\n```\n\n3. Run `gen_from_schema` script, few files will be updated\n\n## Develop patrol_cli\n\nIf you have previously activated patrol_cli run:\n\n```bash\ndart pub global deactivate patrol_cli\n```\n\nthen\n\n```bash\ncd packages\u002Fpatrol_cli\nflutter pub global activate -s path .\n```\n\n## 🛠️ Maintained by LeanCode\n\n\u003Cdiv align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fleancode.co\u002F?utm_source=github.com&utm_medium=referral&utm_campaign=patrol-readme\">\n    \u003Cimg src=\"https:\u002F\u002Fleancodepublic.blob.core.windows.net\u002Fpublic\u002Fwide.png\" alt=\"LeanCode Logo\" height=\"100\" \u002F>\n  \u003C\u002Fa>\n\u003C\u002Fdiv>\n\nThis package is built with 💙 by **[LeanCode](https:\u002F\u002Fleancode.co?utm_source=github.com&utm_medium=referral&utm_campaign=patrol-readme)**.\nWe are **top-tier experts** focused on Flutter Enterprise solutions.\n\n### Why LeanCode?\n\n- **Creators of [Patrol](https:\u002F\u002Fpatrol.leancode.co\u002F?utm_source=github.com&utm_medium=referral&utm_campaign=patrol-readme)** – the next-gen testing framework for Flutter.\n\n- **Production-Ready** – We use this package in apps with millions of users.\n- **Full-Cycle Product Development** – We take your product from scratch to long-term maintenance.\n\n\u003Cdiv align=\"center\">\n  \u003Cbr \u002F>\n\n  **Need help with your Flutter project?**\n\n  [**👉 Hire our team**](https:\u002F\u002Fleancode.co\u002Fget-estimate?utm_source=github.com&utm_medium=referral&utm_campaign=patrol-readme)\n  &nbsp;&nbsp;•&nbsp;&nbsp;\n  [Check our other packages](https:\u002F\u002Fpub.dev\u002Fpackages?q=publisher%3Aleancode.co&sort=downloads)\n\n\u003C\u002Fdiv>\n\n[patrol_badge]: https:\u002F\u002Fimg.shields.io\u002Fpub\u002Fv\u002Fpatrol?label=patrol\n[patrol_finders_badge]: https:\u002F\u002Fimg.shields.io\u002Fpub\u002Fv\u002Fpatrol_finders?label=patrol_finders\n[patrol_cli_badge]: https:\u002F\u002Fimg.shields.io\u002Fpub\u002Fv\u002Fpatrol_cli?label=patrol_cli\n[leancode_lint_badge]: https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fcode%20style-leancode__lint-black\n[patrol_github_stars]: https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fleancodepl\u002Fpatrol\n[patrol_x]: https:\u002F\u002Fimg.shields.io\u002Ftwitter\u002Ffollow\u002Fpatrol_leancode\n[patrol_discord]: https:\u002F\u002Fimg.shields.io\u002Fdiscord\u002F1167030497612922931?color=blue&logo=discord\n[patrol_link]: https:\u002F\u002Fpub.dev\u002Fpackages\u002Fpatrol\n[patrol_finders_link]: https:\u002F\u002Fpub.dev\u002Fpackages\u002Fpatrol_finders\n[patrol_cli_link]: https:\u002F\u002Fpub.dev\u002Fpackages\u002Fpatrol_cli\n[leancode_lint_link]: https:\u002F\u002Fpub.dev\u002Fpackages\u002Fleancode_lint\n[patrol_x_link]: https:\u002F\u002Fx.com\u002Fpatrol_leancode\n[patrol_github_link]: https:\u002F\u002Fgithub.com\u002Fleancodepl\u002Fpatrol\n[patrol_discord_link]: https:\u002F\u002Fdiscord.gg\u002FukBK5t4EZg\n[github_patrol]: https:\u002F\u002Fgithub.com\u002Fleancodepl\u002Fpatrol\u002Ftree\u002Fmaster\u002Fpackages\u002Fpatrol\n[github_patrol_cli]: https:\u002F\u002Fgithub.com\u002Fleancodepl\u002Fpatrol\u002Ftree\u002Fmaster\u002Fpackages\u002Fpatrol_cli\n[github_workflows]: https:\u002F\u002Fgithub.com\u002Fleancodepl\u002Fpatrol\u002Fblob\u002Fmaster\u002F.github\u002FWORKFLOWS.md\n[docs]: https:\u002F\u002Fpatrol.leancode.co\u002F?utm_source=github.com&utm_medium=referral&utm_campaign=patrol-readme\n[docs_finders]: https:\u002F\u002Fpatrol.leancode.co\u002Ffinders\u002Foverview\n[promo_graphics]: assets\u002Fpromo_banner.png\n[article_web]: https:\u002F\u002Fleancode.co\u002Fblog\u002Fpatrol-web-support?utm_source=github.com&utm_medium=referral&utm_campaign=patrol-readme\n[article_4x]: https:\u002F\u002Fleancode.co\u002Fblog\u002Fpatrol-4-0-release?utm_source=github.com&utm_medium=referral&utm_campaign=patrol-readme\n[article_vscode]: https:\u002F\u002Fleancode.co\u002Fblog\u002Fpatrol-vs-code-extension?utm_source=github.com&utm_medium=referral&utm_campaign=patrol-readme\n[integration_test]: https:\u002F\u002Fgithub.com\u002Fflutter\u002Fflutter\u002Ftree\u002Fmaster\u002Fpackages\u002Fintegration_test\n[automate_flutter_app_testing_with_patrol]: https:\u002F\u002Fleancode.co\u002Fproducts\u002Fautomated-ui-testing-in-flutter?utm_source=github.com&utm_medium=referral&utm_campaign=patrol-readme\n[patrol_setup_and_training]: https:\u002F\u002Fleancode.co\u002Fproducts\u002Fpatrol-setup-training?utm_source=github.com&utm_medium=referral&utm_campaign=patrol-readme\n","Patrol 是一个专为 Flutter 应用设计的端到端 UI 测试框架，旨在克服 integration_test 的局限性，支持跨平台的原生交互测试。该项目采用 Dart 语言编写，具备强大的自定义查找器功能，简化了测试代码的编写过程，使开发者能够以更直观的方式进行 UI 自动化测试。此外，Patrol 还提供了对 Web 端的支持及与 VS Code 的集成扩展，进一步提升了开发效率。适合于需要高效、稳定地执行跨平台 UI 测试的 Flutter 项目场景使用。",2,"2026-06-11 03:22:29","top_language"]