This commit is contained in:
2026-04-12 01:06:31 +07:00
commit 10d660cbcb
1066 changed files with 228596 additions and 0 deletions

View File

@@ -0,0 +1,89 @@
# Interactive Testing Patterns
## Form Testing
```javascript
// Text input validation
test('validates email format', async ({ page }) => {
await page.fill('[name="email"]', 'invalid');
await page.click('button[type="submit"]');
await expect(page.locator('.error')).toContainText('Invalid email');
});
// Select dropdowns
await page.selectOption('select#country', 'US');
await page.selectOption('select#country', { label: 'United States' });
await page.selectOption('select#tags', ['tag1', 'tag2']); // Multi-select
// Checkboxes & radios
await page.check('input[name="terms"]');
await expect(page.locator('input[name="terms"]')).toBeChecked();
await page.uncheck('input[name="newsletter"]');
await page.check('input[value="premium"]'); // Radio
// File uploads
await page.setInputFiles('input[type="file"]', 'path/to/file.pdf');
await page.setInputFiles('input[type="file"]', ['file1.pdf', 'file2.pdf']);
// Date picker
await page.fill('input[type="date"]', '2025-12-25');
await page.click('.date-picker-trigger');
await page.click('.calendar-day:text("25")');
```
## Keyboard Navigation
```javascript
test('keyboard accessibility', async ({ page }) => {
await page.keyboard.press('Tab');
await expect(page.locator(':focus')).toHaveAttribute('data-testid', 'first-btn');
await page.keyboard.press('Enter'); // Activate
await page.keyboard.press('Escape'); // Close modal
await page.keyboard.press('Shift+Tab'); // Navigate backward
});
```
## Drag & Drop
```javascript
await page.dragAndDrop('#source', '#target');
// Manual control
const source = page.locator('#draggable');
await source.hover();
await page.mouse.down();
await page.locator('#dropzone').hover();
await page.mouse.up();
```
## Hover & Modals
```javascript
await button.hover();
await expect(page.locator('.tooltip')).toBeVisible();
// Modal workflow
await page.click('button:text("Open")');
await expect(page.locator('[role="dialog"]')).toBeVisible();
await page.click('[aria-label="Close"]');
await expect(page.locator('[role="dialog"]')).not.toBeVisible();
```
## Scroll & Wait Patterns
```javascript
await page.locator('#footer').scrollIntoViewIfNeeded();
await page.evaluate(() => window.scrollTo(0, document.body.scrollHeight));
// Wait patterns
await page.waitForLoadState('networkidle');
await Promise.all([page.waitForResponse('**/api/data'), page.click('button.load')]);
```
## Disable Animations
```javascript
await page.addStyleTag({
content: '* { animation-duration: 0s !important; transition-duration: 0s !important; }'
});
```