diff --git a/tests/assets/load-event/load-event.html b/tests/assets/load-event/load-event.html
new file mode 100644
index 0000000000..edd5ae2260
--- /dev/null
+++ b/tests/assets/load-event/load-event.html
@@ -0,0 +1,23 @@
+
+
+
+
+
+ Load Event Test
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/assets/load-event/module.js b/tests/assets/load-event/module.js
new file mode 100644
index 0000000000..0418190a3c
--- /dev/null
+++ b/tests/assets/load-event/module.js
@@ -0,0 +1,3 @@
+import {foo} from '/slow.js';
+console.log('foo is', foo);
+window.results.push('module');
diff --git a/tests/page/page-goto.spec.ts b/tests/page/page-goto.spec.ts
index 9cca4f2d64..04a4e5a729 100644
--- a/tests/page/page-goto.spec.ts
+++ b/tests/page/page-goto.spec.ts
@@ -526,3 +526,21 @@ it('should not crash when RTCPeerConnection is used', async ({ page, server, bro
});
});
});
+
+it('should properly wait for load', async ({page, server, browserName}) => {
+ it.fixme(browserName === 'webkit', 'WebKit has a bug where Page.frameStoppedLoading is sent too early.');
+ server.setRoute('/slow.js', async (req, res) => {
+ await new Promise(x => setTimeout(x, 100));
+ res.writeHead(200, {'Content-Type': 'application/javascript'});
+ res.end(`window.results.push('slow module');export const foo = 'slow';`);
+ });
+ await page.goto(server.PREFIX + '/load-event/load-event.html');
+ const results = await page.evaluate('window.results');
+ expect(results).toEqual([
+ 'script tag after after module',
+ 'slow module',
+ 'module',
+ 'DOMContentLoaded',
+ 'load'
+ ]);
+});