Skip to content

Commit 2fde1ce

Browse files
authored
fix(webdriver): frameElement() should return handles in the main world (#13287)
1 parent 1626553 commit 2fde1ce

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

packages/puppeteer-core/src/api/Frame.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,9 @@ export abstract class Frame extends EventEmitter<FrameEvents> {
424424
for await (using iframe of transposeIterableHandle(list)) {
425425
const frame = await iframe.contentFrame();
426426
if (frame?._id === this._id) {
427-
return (iframe as HandleFor<HTMLIFrameElement>).move();
427+
return (await parentFrame
428+
.mainRealm()
429+
.adoptHandle(iframe)) as HandleFor<HTMLIFrameElement>;
428430
}
429431
}
430432
return null;

test/src/frame.spec.ts

+18
Original file line numberDiff line numberDiff line change
@@ -341,5 +341,23 @@ describe('Frame specs', function () {
341341
}),
342342
).toBe('iframe');
343343
});
344+
345+
it('should return ElementHandle in the correct world', async () => {
346+
const {page, server} = await getTestState();
347+
await attachFrame(page, 'theFrameId', server.EMPTY_PAGE);
348+
await page.evaluate(() => {
349+
// @ts-expect-error different page context
350+
globalThis['isMainWorld'] = true;
351+
}, server.EMPTY_PAGE);
352+
expect(page.frames()).toHaveLength(2);
353+
using frame1 = await page.frames()[1]!.frameElement();
354+
assert(frame1);
355+
assert(
356+
await frame1.evaluate(() => {
357+
// @ts-expect-error different page context
358+
return globalThis['isMainWorld'];
359+
}),
360+
);
361+
});
344362
});
345363
});

0 commit comments

Comments
 (0)