feat: implement pinch gesture in GestureSimulator
This commit is contained in:
@@ -31,4 +31,27 @@ test.describe('GestureSimulator - Swipe', () => {
|
|||||||
const afterScrollY = await page.evaluate(() => window.scrollY);
|
const afterScrollY = await page.evaluate(() => window.scrollY);
|
||||||
expect(afterScrollY).toBeLessThan(initialScrollY);
|
expect(afterScrollY).toBeLessThan(initialScrollY);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('should perform pinch zoom', async ({ page }) => {
|
||||||
|
await page.goto('/products');
|
||||||
|
const simulator = new GestureSimulator(page);
|
||||||
|
|
||||||
|
const image = page.locator('.product-image').first();
|
||||||
|
await image.click();
|
||||||
|
|
||||||
|
await simulator.pinch({
|
||||||
|
centerX: 200,
|
||||||
|
centerY: 300,
|
||||||
|
startDistance: 100,
|
||||||
|
endDistance: 50,
|
||||||
|
duration: 300,
|
||||||
|
});
|
||||||
|
|
||||||
|
const transform = await image.evaluate((el) => {
|
||||||
|
const style = window.getComputedStyle(el);
|
||||||
|
return style.transform;
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(transform).toBeTruthy();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
@@ -69,4 +69,32 @@ export class GestureSimulator {
|
|||||||
duration: 800,
|
duration: 800,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async pinch(options: PinchOptions): Promise<void> {
|
||||||
|
const { centerX, centerY, startDistance, endDistance, duration } = options;
|
||||||
|
|
||||||
|
const startDistanceX = startDistance / 2;
|
||||||
|
const startDistanceY = startDistance / 2;
|
||||||
|
const endDistanceX = endDistance / 2;
|
||||||
|
const endDistanceY = endDistance / 2;
|
||||||
|
|
||||||
|
const steps = 10;
|
||||||
|
const stepDuration = duration / steps;
|
||||||
|
|
||||||
|
await this.page.touchscreen.tap(centerX - startDistanceX, centerY - startDistanceY);
|
||||||
|
await this.page.touchscreen.tap(centerX + startDistanceX, centerY + startDistanceY);
|
||||||
|
|
||||||
|
for (let i = 1; i <= steps; i++) {
|
||||||
|
const progress = i / steps;
|
||||||
|
const currentDistanceX = startDistanceX + (endDistanceX - startDistanceX) * progress;
|
||||||
|
const currentDistanceY = startDistanceY + (endDistanceY - startDistanceY) * progress;
|
||||||
|
|
||||||
|
await this.page.touchscreen.touchMove(centerX - currentDistanceX, centerY - currentDistanceY);
|
||||||
|
await this.page.touchscreen.touchMove(centerX + currentDistanceX, centerY + currentDistanceY);
|
||||||
|
await this.page.waitForTimeout(stepDuration);
|
||||||
|
}
|
||||||
|
|
||||||
|
await this.page.touchscreen.touchEnd();
|
||||||
|
await this.page.touchscreen.touchEnd();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user