fix: LifecycleWatcher sub frames handling (#10841)

This commit is contained in:
Nikolay Vitkov 2023-09-04 16:16:37 +02:00 committed by GitHub
parent 12bdd70651
commit 06c1588016
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 31 additions and 2 deletions

View File

@ -22,6 +22,7 @@ import {Deferred} from '../util/Deferred.js';
import {TimeoutError} from './Errors.js';
import {CDPFrame, FrameEmittedEvents} from './Frame.js';
import {FrameManagerEmittedEvents} from './FrameManager.js';
import {HTTPRequest} from './HTTPRequest.js';
import {NetworkManager, NetworkManagerEmittedEvents} from './NetworkManager.js';
import {
@ -100,8 +101,9 @@ export class LifecycleWatcher {
this.#timeout = timeout;
this.#eventListeners = [
addEventListener(
frame,
FrameEmittedEvents.LifecycleEvent,
// Revert if TODO #1 is done
frame._frameManager,
FrameManagerEmittedEvents.LifecycleEvent,
this.#checkLifecycleComplete.bind(this)
),
addEventListener(
@ -254,6 +256,10 @@ export class LifecycleWatcher {
return false;
}
}
// TODO(#1): Its possible we don't need this check
// CDP provided the correct order for Loading Events
// And NetworkIdle is a global state
// Consider removing
for (const child of frame.childFrames()) {
if (
child._hasStartedLoading &&

View File

@ -1181,6 +1181,12 @@
"parameters": ["webDriverBiDi"],
"expectations": ["FAIL"]
},
{
"testIdPattern": "[navigation.spec] navigation Page.goto should navigate to page with iframe and networkidle0",
"platforms": ["darwin", "linux", "win32"],
"parameters": ["webDriverBiDi"],
"expectations": ["FAIL"]
},
{
"testIdPattern": "[navigation.spec] navigation Page.goto should send referer",
"platforms": ["darwin", "linux", "win32"],
@ -2939,6 +2945,12 @@
"parameters": ["cdp", "firefox"],
"expectations": ["SKIP"]
},
{
"testIdPattern": "[navigation.spec] navigation Page.goto should navigate to page with iframe and networkidle0",
"platforms": ["darwin", "linux", "win32"],
"parameters": ["cdp", "firefox"],
"expectations": ["TIMEOUT"]
},
{
"testIdPattern": "[navigation.spec] navigation Page.goto should navigate to URL with hash and fire requests without hash",
"platforms": ["darwin", "linux", "win32"],

View File

@ -129,6 +129,17 @@ describe('navigation', function () {
});
expect(response!.status()).toBe(200);
});
it('should navigate to page with iframe and networkidle0', async () => {
const {page, server} = await getTestState();
const response = await page.goto(
server.PREFIX + '/frames/one-frame.html',
{
waitUntil: 'networkidle0',
}
);
expect(response!.status()).toBe(200);
});
it('should navigate to empty page with networkidle2', async () => {
const {page, server} = await getTestState();