webapp-testing
npx skills add https://github.com/marcelleon/skills-zh --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) # å§ç»å¨æ 头模å¼ä¸å¯å¨ 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/ä¸å¯ç¨çèæ¬ä¹ä¸æ¯å¦å¯ä»¥æä¾å¸®å©ãè¿äºèæ¬å¯é å°å¤ç常è§çã夿ç工使µç¨ï¼èä¸ä¼ä½¿ä¸ä¸æçªå£æ··ä¹±ã使ç¨--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– å¨èªå¨åæé´æè·æ§å¶å°æ¥å¿