function waitForRender() { return new Promise(resolve => requestAnimationFrame(() => requestAnimationFrame(resolve))); } async function clickOn(element) { await waitForRender(); let rect = element.getBoundingClientRect(); let actions = new test_driver.Actions(); // FIXME: Switch to pointerMove(0, 0, {origin: element}) once // https://github.com/web-platform-tests/wpt/issues/41257 is fixed. await actions .pointerMove(Math.round(rect.x + rect.width / 2), Math.round(rect.y + rect.height / 2), {}) .pointerDown({button: actions.ButtonType.LEFT}) .pointerUp({button: actions.ButtonType.LEFT}) .send(); await waitForRender(); } async function hoverOver(element) { await waitForRender(); let rect = element.getBoundingClientRect(); let actions = new test_driver.Actions(); // FIXME: Switch to pointerMove(0, 0, {origin: element}) once // https://github.com/web-platform-tests/wpt/issues/41257 is fixed. await actions .pointerMove(Math.round(rect.x + rect.width / 2), Math.round(rect.y + rect.height / 2), {}) .send(); await waitForRender(); }