webapp-testing
npx skills add https://github.com/yamato-snow/skills --skill webapp-testing
Agent 安装分布
Skill 文档
Webã¢ããªã±ã¼ã·ã§ã³ãã¹ã
ãã¼ã«ã«Webã¢ããªã±ã¼ã·ã§ã³ããã¹ãããã«ã¯ããã¤ãã£ãPython Playwrightã¹ã¯ãªãããè¨è¿°ã
å©ç¨å¯è½ãªãã«ãã¼ã¹ã¯ãªããï¼
scripts/with_server.py– ãµã¼ãã¼ã©ã¤ããµã¤ã¯ã«ã管çï¼è¤æ°ãµã¼ãã¼ããµãã¼ãï¼
ã¹ã¯ãªããã¯å¿
ãæåã«--helpã§å®è¡ãã¦ä½¿ç¨æ¹æ³ã確èªãã«ã¹ã¿ãã¤ãºãããã½ãªã¥ã¼ã·ã§ã³ã絶対ã«å¿
è¦ã§ãããã¨ããããã¾ã§ã½ã¼ã¹ãèªã¾ãªãããããã®ã¹ã¯ãªããã¯é常ã«å¤§ãããªãå¯è½æ§ããããã³ã³ããã¹ãã¦ã£ã³ãã¦ãæ±æãããã³ã³ããã¹ãã¦ã£ã³ãã¦ã«åãè¾¼ãã®ã§ã¯ãªãããã©ãã¯ããã¯ã¹ã¹ã¯ãªããã¨ãã¦ç´æ¥å¼ã³åºãããã«åå¨ããã
決å®ããªã¼ï¼ã¢ããã¼ãã®é¸æ
ã¦ã¼ã¶ã¼ã¿ã¹ã¯ â éçHTMLãï¼
ââ ã¯ã â HTMLãã¡ã¤ã«ãç´æ¥èªãã§ã»ã¬ã¯ã¿ã¼ãç¹å®
â ââ æå â ã»ã¬ã¯ã¿ã¼ã使ç¨ãã¦Playwrightã¹ã¯ãªãããè¨è¿°
â ââ 失æ/ä¸å®å
¨ â åçã¨ãã¦æ±ãï¼ä¸è¨ï¼
â
ââ ãããï¼åçwebappï¼â ãµã¼ãã¼ã¯ãã§ã«å®è¡ä¸ãï¼
ââ ããã â å®è¡ï¼python scripts/with_server.py --help
â æ¬¡ã«ãã«ãã¼ãä½¿ç¨ + ç°¡ç¥åãããPlaywrightã¹ã¯ãªãããè¨è¿°
â
ââ ã¯ã â åµå¯ãã¦ããã¢ã¯ã·ã§ã³ï¼
1. ããã²ã¼ããã¦networkidleãå¾
æ©
2. ã¹ã¯ãªã¼ã³ã·ã§ãããæ®ããDOMãæ¤æ»
3. ã¬ã³ããªã³ã°ãããç¶æ
ããã»ã¬ã¯ã¿ã¼ãç¹å®
4. çºè¦ããã»ã¬ã¯ã¿ã¼ã§ã¢ã¯ã·ã§ã³ãå®è¡
ä¾ï¼with_server.pyã®ä½¿ç¨
ãµã¼ãã¼ãèµ·åããã«ã¯ãã¾ã--helpãå®è¡ããæ¬¡ã«ãã«ãã¼ã使ç¨ï¼
åä¸ãµã¼ãã¼ï¼
python scripts/with_server.py --server "npm run dev" --port 5173 -- python your_automation.py
è¤æ°ãµã¼ãã¼ï¼ä¾ï¼ããã¯ã¨ã³ã + ããã³ãã¨ã³ãï¼ï¼
python scripts/with_server.py \
--server "cd backend && python server.py" --port 3000 \
--server "cd frontend && npm run dev" --port 5173 \
-- python your_automation.py
èªååã¹ã¯ãªããã使ããã«ã¯ãPlaywrightãã¸ãã¯ã®ã¿ãå«ããï¼ãµã¼ãã¼ã¯èªåçã«ç®¡çãããï¼ï¼
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=True) # 常ã«headlessã¢ã¼ãã§chromiumãèµ·å
page = browser.new_page()
page.goto('http://localhost:5173') # ãµã¼ãã¼ã¯ãã§ã«å®è¡ä¸ã§æºåå®äº
page.wait_for_load_state('networkidle') # éè¦ï¼JSã®å®è¡ãå¾
æ©
# ... èªååãã¸ãã¯
browser.close()
åµå¯ãã¦ããã¢ã¯ã·ã§ã³ãã¿ã¼ã³
-
ã¬ã³ããªã³ã°ãããDOMãæ¤æ»ï¼
page.screenshot(path='/tmp/inspect.png', full_page=True) content = page.content() page.locator('button').all() -
æ¤æ»çµæããã»ã¬ã¯ã¿ã¼ãç¹å®
-
çºè¦ããã»ã¬ã¯ã¿ã¼ã使ç¨ãã¦ã¢ã¯ã·ã§ã³ãå®è¡
ããããè½ã¨ãç©´
â åçã¢ããªã§networkidleãå¾
æ©ããåã«DOMãæ¤æ»ããªã
â
æ¤æ»åã«page.wait_for_load_state('networkidle')ãå¾
æ©ãã
ãã¹ããã©ã¯ãã£ã¹
- ãã³ãã«ãããã¹ã¯ãªããããã©ãã¯ããã¯ã¹ã¨ãã¦ä½¿ç¨ – ã¿ã¹ã¯ãéæããã«ã¯ã
scripts/ã§å©ç¨å¯è½ãªã¹ã¯ãªããã®1ã¤ãå½¹ç«ã¤ãã©ãããæ¤è¨ããããã®ã¹ã¯ãªããã¯ãã³ã³ããã¹ãã¦ã£ã³ãã¦ãä¹±ããã¨ãªããä¸è¬çã§è¤éãªã¯ã¼ã¯ããã¼ã確å®ã«å¦çãä½¿ç¨æ¹æ³ã確èªããã«ã¯--helpã使ç¨ããç´æ¥å¼ã³åºãã - åæã¹ã¯ãªããã«ã¯
sync_playwright()ãä½¿ç¨ - å®äºæã¯å¸¸ã«ãã©ã¦ã¶ãéãã
- 説æçãªã»ã¬ã¯ã¿ã¼ã使ç¨ï¼
text=ãrole=ãCSSã»ã¬ã¯ã¿ã¼ãã¾ãã¯ID - é©åãªå¾
æ©ã追å ï¼
page.wait_for_selector()ã¾ãã¯page.wait_for_timeout()
ãªãã¡ã¬ã³ã¹ãã¡ã¤ã«
- examples/ – ä¸è¬çãªãã¿ã¼ã³ã示ãä¾ï¼
element_discovery.py– ãã¼ã¸ä¸ã®ãã¿ã³ããªã³ã¯ãå ¥åãçºè¦static_html_automation.py– ãã¼ã«ã«HTMLã«file:// URLã使ç¨console_logging.py– èªååä¸ã®ã³ã³ã½ã¼ã«ãã°ã®ãã£ããã£