feat: implement swipe gesture in GestureSimulator
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
import { test, expect } from '@playwright/test';
|
||||
import { GestureSimulator } from '../../utils/GestureSimulator';
|
||||
|
||||
test.describe('GestureSimulator - Swipe', () => {
|
||||
test('should perform swipe up', async ({ page }) => {
|
||||
await page.goto('/');
|
||||
const simulator = new GestureSimulator(page);
|
||||
|
||||
const initialScrollY = await page.evaluate(() => window.scrollY);
|
||||
expect(initialScrollY).toBe(0);
|
||||
|
||||
await simulator.slowSwipeUp();
|
||||
|
||||
const afterScrollY = await page.evaluate(() => window.scrollY);
|
||||
expect(afterScrollY).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
test('should perform swipe down', async ({ page }) => {
|
||||
await page.goto('/');
|
||||
const simulator = new GestureSimulator(page);
|
||||
|
||||
await page.evaluate(() => {
|
||||
window.scrollTo(0, 1000);
|
||||
});
|
||||
|
||||
const initialScrollY = await page.evaluate(() => window.scrollY);
|
||||
expect(initialScrollY).toBeGreaterThan(0);
|
||||
|
||||
await simulator.quickSwipeDown();
|
||||
|
||||
const afterScrollY = await page.evaluate(() => window.scrollY);
|
||||
expect(afterScrollY).toBeLessThan(initialScrollY);
|
||||
});
|
||||
});
|
||||
@@ -24,4 +24,49 @@ export interface DragOptions {
|
||||
|
||||
export class GestureSimulator {
|
||||
constructor(private page: Page) {}
|
||||
|
||||
async swipe(options: SwipeOptions): Promise<void> {
|
||||
const { startX, startY, endX, endY, duration } = options;
|
||||
|
||||
await this.page.touchscreen.tap(startX, startY);
|
||||
|
||||
const steps = 10;
|
||||
const stepDuration = duration / steps;
|
||||
|
||||
for (let i = 1; i <= steps; i++) {
|
||||
const x = startX + (endX - startX) * (i / steps);
|
||||
const y = startY + (endY - startY) * (i / steps);
|
||||
|
||||
await this.page.touchscreen.touchMove(x, y);
|
||||
await this.page.waitForTimeout(stepDuration);
|
||||
}
|
||||
|
||||
await this.page.touchscreen.touchEnd();
|
||||
}
|
||||
|
||||
async quickSwipeDown(): Promise<void> {
|
||||
const viewport = this.page.viewportSize();
|
||||
if (!viewport) return;
|
||||
|
||||
await this.swipe({
|
||||
startX: viewport.width / 2,
|
||||
startY: viewport.height * 0.3,
|
||||
endX: viewport.width / 2,
|
||||
endY: viewport.height * 0.7,
|
||||
duration: 300,
|
||||
});
|
||||
}
|
||||
|
||||
async slowSwipeUp(): Promise<void> {
|
||||
const viewport = this.page.viewportSize();
|
||||
if (!viewport) return;
|
||||
|
||||
await this.swipe({
|
||||
startX: viewport.width / 2,
|
||||
startY: viewport.height * 0.7,
|
||||
endX: viewport.width / 2,
|
||||
endY: viewport.height * 0.3,
|
||||
duration: 800,
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user