I’m gonna give you a game changing function: function listenForEventOnce(target, name, timeout) { return new Promise((resolve, reject) => { const timer = timeout ? setTimeout(reject, timeout) : null; target.addEventListener(name, () => { if (timer) clearTimeout(timer); resolve(); }, {once: true}); }); }
You can then write a test like this: await listenForEventOnce(document.body, 'load'); // do stuff after load event. await listenForEventOnce(document.querySelector('input'), 'focus'); await listenForEventOnce(visualViewport, 'scroll', 5000); // After the input element is focused, then the visual viewport scrolled or 5 seconds has passed. - R. Niwa
_______________________________________________ webkit-dev mailing list webkit-dev@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-dev