Webåºç¨æµè¯å·¥å ·å ãä½¿ç¨ Playwright è¿è¡å端èªå¨åæµè¯ãUI è°è¯ãæªå¾æè·ãæµè§å¨æ¥å¿æ¥çãå½éè¦æµè¯æ¬å° Web åºç¨ãéªè¯å端åè½ãè°è¯ UI è¡ä¸ºæ¶ä½¿ç¨æ¤æè½ã
Install
npx skillscat add enoch-robinson/agent-skill-collection/webapp-testing Install via the SkillsCat registry.
SKILL.md
Web Application Testing
ä½¿ç¨ Playwright æµè¯æ¬å° Web åºç¨ã
å³çæ
ä»»å¡ â æ¯éæ HTMLï¼
ââ æ¯ â ç´æ¥è¯»å HTML è¯å«éæ©å¨ â ç¼å Playwright èæ¬
ââ å¦ï¼å¨æåºç¨ï¼â æå¡å¨å·²è¿è¡ï¼
ââ å¦ â å
å¯å¨æå¡å¨
ââ æ¯ â 侦å¯åæä½ï¼
1. 导èªå¹¶çå¾
networkidle
2. æªå¾ææ£æ¥ DOM
3. è¯å«éæ©å¨
4. æ§è¡æä½åºç¡ç¨æ³
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
page.goto('http://localhost:5173')
page.wait_for_load_state('networkidle') # å
³é®ï¼çå¾
JS æ§è¡
# æä½
page.click('button#submit')
page.fill('input[name="email"]', 'test@example.com')
# æªå¾
page.screenshot(path='screenshot.png', full_page=True)
browser.close()å¯å¨æå¡å¨åæµè¯
# åæå¡å¨
npm run dev &
sleep 3
python test_script.py
# æä½¿ç¨èæ¬ç®¡ç
python with_server.py --server "npm run dev" --port 5173-- python test.pyå¸¸ç¨æä½
å ç´ å®ä½
# ææ¬
page.click('text=ç»å½')
# CSS éæ©å¨
page.click('#submit-btn')
page.click('.form-input')
# è§è²
page.click('role=button[name="æäº¤"]')
# ç»å
page.locator('form').locator('button').click()çå¾ çç¥
# çå¾
å
ç´ åºç°
page.wait_for_selector('#content')
# çå¾
ç½ç»ç©ºé²
page.wait_for_load_state('networkidle')
# åºå®çå¾
ï¼ä¸æ¨èï¼ä½ææ¶å¿
è¦ï¼
page.wait_for_timeout(1000)表åæä½
page.fill('input[name="username"]', 'admin')
page.fill('input[name="password"]', '123456')
page.click('button[type="submit"]')æªå¾è°è¯
# å
¨é¡µæªå¾
page.screenshot(path='full.png', full_page=True)
# å
ç´ æªå¾
page.locator('#header').screenshot(path='header.png')è·åå 容
# é¡µé¢ HTML
html = page.content()
# å
ç´ ææ¬
text = page.locator('#result').text_content()
# ææå¹é
å
ç´
buttons = page.locator('button').all()常è§é·é±
| â é误 | â æ£ç¡® |
|---|---|
| ä¸çå¾ ç´æ¥æä½ | å
wait_for_load_state('networkidle') |
| 硬ç¼ç çå¾ æ¶é´ | ä½¿ç¨ wait_for_selector |
| å¿è®°å ³éæµè§å¨ | ä½¿ç¨ with è¯å¥æ browser.close() |
æä½³å®è·µ
- å§ç»ä½¿ç¨
headless=Trueè¿è¡ - 卿åºç¨å¿
é¡»çå¾
networkidle - ä½¿ç¨æè¿°æ§éæ©å¨ï¼
text=ãrole=ãID - æ·»å éå½çå¾ é¿å ç«ææ¡ä»¶
- æµè¯å®æåå ³éæµè§å¨