fix: consider existing frames when waiting for a frame (#8200)
This commit is contained in:
parent
bdc9671465
commit
0955225b51
@ -2039,7 +2039,7 @@ export class Page extends EventEmitter {
|
||||
return false;
|
||||
}
|
||||
|
||||
return Promise.race([
|
||||
const eventRace = Promise.race([
|
||||
helper.waitForEvent(
|
||||
this._frameManager,
|
||||
FrameManagerEmittedEvents.FrameAttached,
|
||||
@ -2055,6 +2055,18 @@ export class Page extends EventEmitter {
|
||||
this._sessionClosePromise()
|
||||
),
|
||||
]);
|
||||
|
||||
return Promise.race([
|
||||
eventRace,
|
||||
(async () => {
|
||||
for (const frame of this.frames()) {
|
||||
if (await predicate(frame)) {
|
||||
return frame;
|
||||
}
|
||||
}
|
||||
await eventRace;
|
||||
})(),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -371,6 +371,21 @@ describeChromeOnly('OOPIF', function () {
|
||||
await target.page();
|
||||
browser1.disconnect();
|
||||
});
|
||||
|
||||
describe('waitForFrame', () => {
|
||||
it('should resolve immediately if the frame already exists', async () => {
|
||||
const { server } = getTestState();
|
||||
|
||||
await page.goto(server.EMPTY_PAGE);
|
||||
await utils.attachFrame(
|
||||
page,
|
||||
'frame2',
|
||||
server.CROSS_PROCESS_PREFIX + '/empty.html'
|
||||
);
|
||||
|
||||
await page.waitForFrame((frame) => frame.url().endsWith('/empty.html'));
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user