webapp-testing
npx skills add https://github.com/leastbit/claude_skills_zh-cn --skill webapp-testing
Agent 安装分布
Skill 文档
Web åºç¨ç¨åºæµè¯
è¦æµè¯æ¬å° Web åºç¨ç¨åºï¼è¯·ç¼ååçç Python Playwright èæ¬ã
å¯ç¨çè¾ å©èæ¬:
scripts/with_server.py– 管çæå¡å¨çå½å¨æï¼æ¯æå¤æå¡å¨ï¼
å¡å¿
å
è¿è¡å¸¦æ --help åæ°çèæ¬ä»¥æ¥çç¨æ³ãé¤éæ¨å¨å°è¯è¿è¡èæ¬ååç°ç»å¯¹éè¦èªå®ä¹è§£å³æ¹æ¡ï¼å¦åä¸è¦é
读æºç ãè¿äºèæ¬å¯è½é常åºå¤§ï¼ä»èæ±¡ææ¨çä¸ä¸æçªå£ãå®ä»¬æ¨å¨ä½ä¸ºé»çèæ¬ç´æ¥è°ç¨ï¼è䏿¯æå
¥å°æ¨çä¸ä¸æçªå£ä¸ã
å³çæ ï¼éæ©æ¨çæ¹æ³
ç¨æ·ä»»å¡ â æ¯éæ HTML åï¼
ââ æ¯ â ç´æ¥è¯»å HTML æä»¶ä»¥è¯å«éæ©å¨ (selectors)
â ââ æå â 使ç¨éæ©å¨ç¼å Playwright èæ¬
â ââ 失败/ä¸å®æ´ â è§ä¸ºå¨æï¼è§ä¸æï¼
â
ââ å¦ (卿 Web åºç¨) â æå¡å¨æ¯å¦å·²å¨è¿è¡ï¼
ââ å¦ â è¿è¡ï¼python scripts/with_server.py --help
â ç¶å使ç¨è¾
å©å·¥å
· + ç¼åç®åç Playwright èæ¬
â
ââ æ¯ â 侦å¯å¹¶è¡å¨ï¼
1. 导èªå¹¶çå¾
networkidle
2. æªå¾ææ£æ¥ DOM
3. 仿¸²æç¶æä¸è¯å«éæ©å¨ (selectors)
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) # å§ç»ä»¥æ 头模å¼å¯å¨ 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() -
仿£æ¥ç»æä¸è¯å«éæ©å¨ (selectors)
-
使ç¨åç°ç鿩卿§è¡æä½
常è§é·é±
â ä¸è¦å¨å¨æåºç¨çå¾
networkidle ä¹åæ£æ¥ DOM
â
å¡å¿
卿£æ¥åçå¾
page.wait_for_load_state('networkidle')
æä½³å®è·µ
- å°æç»èæ¬è§ä¸ºé»ç – è¦å®æä¸é¡¹ä»»å¡ï¼è¯·èè
scripts/ä¸å¯ç¨çèæ¬ä¹ä¸æ¯å¦ææå¸®å©ãè¿äºèæ¬å¯ä»¥å¯é å°å¤ç常è§ç夿工使µï¼èä¸ä¼å¼ä¹±ä¸ä¸æçªå£ã使ç¨--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:// URLconsole_logging.py– å¨èªå¨åè¿ç¨ä¸æè·æ§å¶å°æ¥å¿ (console logs)