{"id":50331999,"url":"https://github.com/wimi321/mobile-webview-testing","last_synced_at":"2026-05-29T10:04:15.998Z","repository":{"id":352517884,"uuid":"1215095276","full_name":"wimi321/mobile-webview-testing","owner":"wimi321","description":"Agent skill for testing Capacitor \u0026 WebView apps on real Android devices — CDP + ADB, no Appium required. Works with Claude Code, Codex, Gemini CLI, Copilot, Cursor, and 18+ AI agents.","archived":false,"fork":false,"pushed_at":"2026-04-19T23:40:16.000Z","size":45,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-20T01:29:02.459Z","etag":null,"topics":["adb","agent-skills","ai-agent","android","capacitor","cdp","chrome-devtools-protocol","ionic","mobile-testing","react","skill-md","testing-tools","webview"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wimi321.png","metadata":{"files":{"readme":"README.ar.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-19T13:27:33.000Z","updated_at":"2026-04-19T23:40:20.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/wimi321/mobile-webview-testing","commit_stats":null,"previous_names":["wimi321/mobile-webview-testing"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/wimi321/mobile-webview-testing","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wimi321%2Fmobile-webview-testing","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wimi321%2Fmobile-webview-testing/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wimi321%2Fmobile-webview-testing/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wimi321%2Fmobile-webview-testing/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wimi321","download_url":"https://codeload.github.com/wimi321/mobile-webview-testing/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wimi321%2Fmobile-webview-testing/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33646458,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-29T02:00:06.066Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["adb","agent-skills","ai-agent","android","capacitor","cdp","chrome-devtools-protocol","ionic","mobile-testing","react","skill-md","testing-tools","webview"],"created_at":"2026-05-29T10:04:14.996Z","updated_at":"2026-05-29T10:04:15.991Z","avatar_url":"https://github.com/wimi321.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/assets/skill-icon.svg\" width=\"120\" height=\"120\" alt=\"Mobile WebView Testing Skill\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\" dir=\"rtl\"\u003eمهارة اختبار WebView للأجهزة المحمولة\u003c/h1\u003e\n\n\u003cp align=\"center\" dir=\"rtl\"\u003e\n  \u003cstrong\u003eاجعل أي وكيل ذكاء اصطناعي يختبر تطبيقك على هاتف Android حقيقي\u003c/strong\u003e\u003cbr\u003e\n  \u003csub\u003eChrome DevTools Protocol + ADB. بدون Appium. بدون Selenium. بدون خادم Java.\u003c/sub\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-blue.svg\" alt=\"License\"\u003e\u003c/a\u003e\u0026nbsp;\n  \u003ca href=\"https://agentskills.io/specification\"\u003e\u003cimg src=\"https://img.shields.io/badge/Agent_Skill-v1.0-8B5CF6\" alt=\"Agent Skill\"\u003e\u003c/a\u003e\u0026nbsp;\n  \u003ca href=\"#التوافق\"\u003e\u003cimg src=\"https://img.shields.io/badge/18%2B_AI_agents-متوافق-10B981\" alt=\"Compatible Agents\"\u003e\u003c/a\u003e\u0026nbsp;\n  \u003ca href=\"https://github.com/wimi321/mobile-webview-testing/stargazers\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/wimi321/mobile-webview-testing?style=social\" alt=\"Stars\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"README.md\"\u003eEnglish\u003c/a\u003e · \u003ca href=\"README.zh-CN.md\"\u003e简体中文\u003c/a\u003e · \u003ca href=\"README.ja.md\"\u003e日本語\u003c/a\u003e · \u003ca href=\"README.ko.md\"\u003e한국어\u003c/a\u003e · \u003ca href=\"README.es.md\"\u003eEspañol\u003c/a\u003e · \u003cstrong\u003eالعربية\u003c/strong\u003e\n\u003c/p\u003e\n\n---\n\n\u003e [!TIP]\n\u003e **التثبيت في 10 ثوانٍ** — يعمل مع Claude Code وCodex وGemini CLI وCopilot وCursor والمزيد:\n\u003e ```\n\u003e npx skills add wimi321/mobile-webview-testing\n\u003e ```\n\n\u003cbr\u003e\n\n\u003cdiv dir=\"rtl\"\u003e\n\n## لماذا هذه المهارة موجودة\n\nبنيت تطبيقًا بـ Capacitor أو Ionic. يعمل بشكل مثالي في المتصفح. الآن تحتاج لاختباره على هاتف حقيقي.\n\nهذا ما ستكتشفه:\n\n| الأداة | المشكلة |\n|--------|---------|\n| `uiautomator` | **لا يرى محتوى WebView.** واجهة التطبيق بالكامل غير مرئية لأدوات الأتمتة الأصلية — تحصل على 3 عقد XML بدلاً من 300. |\n| Appium | **خادم Java بحجم 500MB.** مشاكل مستمرة في تبديل سياق WebView. أكثر من 30 دقيقة للإعداد. |\n| Cypress / Playwright | **لا يعملان على الأجهزة الحقيقية.** اختبارات المحاكي تنجح لكن الهاتف الحقيقي يفشل. GPU وذاكرة وسلوك مختلف. |\n| React DevTools | **لا وصول عبر CLI.** لا يمكن الأتمتة، لا يمكن كتابة سكربتات، وكلاء الذكاء الاصطناعي لا يستطيعون استخدامه. |\n\n**هذه المهارة تحل المشاكل الأربع.** تعلّم أي وكيل ذكاء اصطناعي اختبار تطبيق WebView عبر Chrome DevTools Protocol — نفس البروتوكول الذي يستخدمه Chrome داخليًا. بدون تبعيات إضافية سوى `adb` و Python.\n\n\u003cbr\u003e\n\n## ما الذي تفعله\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\" valign=\"top\"\u003e\n\n**أتمتة WebView**\n- الاتصال بأي WebView عبر CDP\n- تنفيذ JavaScript، استعلام DOM، النقر على العناصر\n- التنقل بين الشاشات\n- انتظار تحميل العناصر\n\n\u003c/td\u003e\n\u003ctd width=\"50%\" valign=\"top\"\u003e\n\n**الوصول لحالة إطار العمل**\n- React: `__reactProps` + `onChange`\n- Vue 2/3: `__vue__` + `dispatchEvent`\n- Angular: `ng.getComponent` + zone\n- Svelte: `dispatchEvent` أصلي\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\" valign=\"top\"\u003e\n\n**التعامل مع واجهة المستخدم الأصلية**\n- حوارات الأذونات عبر `uiautomator`\n- منتقي الملفات، أوراق المشاركة\n- إشعارات النظام\n- هجين: CDP للويب، uiautomator للأصلي\n\n\u003c/td\u003e\n\u003ctd width=\"50%\" valign=\"top\"\u003e\n\n**التحكم بالجهاز**\n- لقطات شاشة مع التحقق بالرؤية الاصطناعية\n- تبديل WiFi/بيانات لاختبار وضع عدم الاتصال\n- تصفية Logcat والتقاط وحدة التحكم\n- نقل الملفات الكبيرة لتخزين التطبيق\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n\u003cbr\u003e\n\n## البدء السريع\n\n**المتطلبات:** هاتف Android مع تصحيح USB مفعّل + `adb` في PATH + Python 3 (`pip3 install websockets`)\n\n### الخطوة 1 — تثبيت المهارة\n\n```bash\nnpx skills add wimi321/mobile-webview-testing\n```\n\n### الخطوة 2 — توصيل الهاتف\n\n```bash\nadb devices   # تأكد من ظهور جهازك\n```\n\n### الخطوة 3 — اطلب من وكيل الذكاء الاصطناعي الاختبار\n\nيقوم الوكيل بتفعيل هذه المهارة تلقائيًا عند ذكر اختبار الأجهزة المحمولة:\n\n```\n\"اختبر تدفق تسجيل الدخول على هاتف Android المتصل\"\n\"تحقق من أن التطبيق يعمل بدون اتصال على الجهاز الحقيقي\"\n\"تأكد من عرض تخطيط RTL العربي بشكل صحيح على الهاتف\"\n```\n\n\u003cbr\u003e\n\n## كيف تعمل\n\n```mermaid\ngraph RL\n    A[\"🤖 وكيل AI\"] --\u003e|\"تفعيل المهارة\"| B[\"📱 ADB\"]\n    B --\u003e|\"pidof + forward\"| C[\"🔌 CDP Socket\"]\n    C --\u003e|\"WebSocket\"| D[\"🌐 WebView DOM\"]\n    B --\u003e|\"uiautomator\"| E[\"📋 واجهة أصلية\"]\n    B --\u003e|\"screencap\"| F[\"📸 لقطة شاشة\"]\n    F --\u003e|\"رؤية\"| A\n    \n    style A fill:#8B5CF6,stroke:#7C3AED,color:#fff\n    style D fill:#3B82F6,stroke:#2563EB,color:#fff\n    style C fill:#10B981,stroke:#059669,color:#fff\n    style E fill:#F59E0B,stroke:#D97706,color:#fff\n```\n\n\u003cbr\u003e\n\n## 8 رؤى أساسية\n\n\u003e دروس مكتسبة بصعوبة من اختبار تطبيقات إنتاجية. التفاصيل في [COMMON-PITFALLS.md](mobile-webview-testing/references/COMMON-PITFALLS.md).\n\n| # | المشكلة | الحل |\n|---|---------|------|\n| 1 | `uiautomator` لا يرى شيئًا في WebView | استخدم CDP — الطريقة الوحيدة للوصول إلى DOM |\n| 2 | `input.value = 'x'` لا يحدّث React | استخدم `__reactProps` واستدعِ `onChange()` مباشرة |\n| 3 | ثاني CDP eval يرمي `SyntaxError` | غلّف كل JS في IIFE — CDP يشارك النطاق العالمي |\n| 4 | CDP يتوقف بعد `force-stop` | PID جديد = مقبس جديد، إعادة اتصال كاملة مطلوبة |\n| 5 | النقر يصيب العنصر الخطأ | استخدم محددات CSS (CDP) أو حدود `uiautomator dump` |\n| 6 | بث `AIRPLANE_MODE` مرفوض | استخدم `svc wifi disable` + `svc data disable` |\n| 7 | التطبيق لا يقرأ الملفات المرسلة | استخدم أنبوب `run-as` — التخزين المحدد يحجب `/sdcard/` |\n| 8 | حالة Vue/Angular لا تتحدث | `dispatchEvent(new Event('input'))` يعمل (بخلاف React) |\n\n\u003cbr\u003e\n\n## التوافق\n\nتتبع هذه المهارة [معيار Agent Skills المفتوح](https://agentskills.io/specification) وتعمل مع أي وكيل ذكاء اصطناعي متوافق:\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eمُختبر بالكامل\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eClaude Code\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eمتوافق\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eCodex CLI · Gemini CLI · GitHub Copilot · Cursor · Cline · Windsurf · OpenCode · Aider · Continue والمزيد\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n\u003cbr\u003e\n\n## مقارنة مع الأساليب الأخرى\n\n|  | هذه المهارة | Appium | Maestro | Cypress | يدوي |\n|---|:-:|:-:|:-:|:-:|:-:|\n| جهاز حقيقي | **نعم** | نعم | نعم | لا | نعم |\n| WebView DOM | **CDP** | تبديل سياق | CDP | لا ينطبق | بالعين |\n| حالة React | **`__reactProps`** | لا | لا | نعم | لا |\n| أصلي + ويب | **نعم** | نعم | نعم | لا | نعم |\n| حجم التثبيت | **~0 MB** | ~500 MB | ~200 MB | ~300 MB | 0 MB |\n| وقت الإعداد | **30 ثانية** | 30+ دقيقة | 10 دقائق | 5 دقائق | — |\n| بالذكاء الاصطناعي | **نعم** | لا | لا | لا | لا |\n\n\u003cbr\u003e\n\n## وُلدت من الإنتاج\n\nاستُخلصت هذه المهارة من اختبارات حقيقية لتطبيق [Beacon](https://github.com/wimi321/Beacon) — تطبيق استجابة طوارئ يعمل أولاً بدون اتصال ويشغّل Gemma 4 على الجهاز عبر LiteRT. كل مشكلة وحل ومقتطف كود اكتُشف أثناء اختبار تطبيق Capacitor إنتاجي على هاتف Android فعلي.\n\nليست نظرية. مُختبرة في الميدان.\n\n\u003cbr\u003e\n\n## المساهمة\n\nالمساهمات مرحب بها! المجالات ذات الأولوية:\n\n- **دعم iOS** — بروتوكول Safari Web Inspector يختلف عن CDP\n- **أطر عمل إضافية** — Ember، Preact، Solid، Lit\n- **سكربتات جديدة** — تحليل الأداء، كشف تسرب الذاكرة، تدقيق إمكانية الوصول\n- **ترجمات** — المساعدة في ترجمة المزيد من اللغات\n\n\u003cbr\u003e\n\n## الترخيص\n\n[MIT](LICENSE)\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwimi321%2Fmobile-webview-testing","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwimi321%2Fmobile-webview-testing","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwimi321%2Fmobile-webview-testing/lists"}