MCPcopy Index your code
hub / github.com/ionic-team/ionic-framework / moveElement

Function moveElement

core/src/utils/test/playwright/drag-element.ts:118–149  ·  view source on GitHub ↗
(page: E2EPage, startX: number, startY: number, dragByX = 0, dragByY = 0)

Source from the content-addressed store, hash-verified

116};
117
118const moveElement = async (page: E2EPage, startX: number, startY: number, dragByX = 0, dragByY = 0) => {
119 const steps = 10;
120 const browser = page.context().browser()!.browserType().name();
121
122 const viewport = page.viewportSize();
123 if (viewport === null) {
124 throw new Error(
125 'Cannot get viewport size. See https://playwright.dev/docs/api/class-page#page-viewport-size for more information'
126 );
127 }
128
129 validateDragByX(startX, dragByX, viewport.width);
130 validateDragByY(startY, dragByY, viewport.height);
131
132 const endX = startX + dragByX;
133 const endY = startY + dragByY;
134
135 // Drag the element.
136 for (let i = 1; i <= steps; i++) {
137 const middleX = startX + (endX - startX) * (i / steps);
138 const middleY = startY + (endY - startY) * (i / steps);
139
140 await page.mouse.move(middleX, middleY);
141
142 // Safari needs to wait for a repaint to occur before moving the mouse again.
143 if (browser === 'webkit' && i % 2 === 0) {
144 // Repainting every 2 steps is enough to keep the drag gesture smooth.
145 // Anything past 4 steps will cause the drag gesture to be flaky.
146 await page.evaluate(() => new Promise(requestAnimationFrame));
147 }
148 }
149};

Callers 2

dragElementByFunction · 0.85
dragElementByYAxisFunction · 0.85

Calls 2

validateDragByXFunction · 0.85
validateDragByYFunction · 0.85

Tested by

no test coverage detected