diff --git a/docs/api/puppeteer.frame.md b/docs/api/puppeteer.frame.md
index 288d934cd38af..a69bb57dbe2a2 100644
--- a/docs/api/puppeteer.frame.md
+++ b/docs/api/puppeteer.frame.md
@@ -80,6 +80,7 @@ console.log(text);
| [isDetached()](./puppeteer.frame.isdetached.md) | | |
| [isOOPFrame()](./puppeteer.frame.isoopframe.md) | | |
| [name()](./puppeteer.frame.name.md) | | |
+| [page()](./puppeteer.frame.page.md) | | |
| [parentFrame()](./puppeteer.frame.parentframe.md) | | |
| [select(selector, values)](./puppeteer.frame.select.md) | | Triggers a change
and input
event once all the provided options have been selected. |
| [setContent(html, options)](./puppeteer.frame.setcontent.md) | | Set the content of the frame. |
diff --git a/docs/api/puppeteer.frame.page.md b/docs/api/puppeteer.frame.page.md
new file mode 100644
index 0000000000000..201dd209ff57f
--- /dev/null
+++ b/docs/api/puppeteer.frame.page.md
@@ -0,0 +1,19 @@
+---
+sidebar_label: Frame.page
+---
+
+# Frame.page() method
+
+**Signature:**
+
+```typescript
+class Frame {
+ page(): Page;
+}
+```
+
+**Returns:**
+
+[Page](./puppeteer.page.md)
+
+a page associated with the frame.
diff --git a/src/common/FrameManager.ts b/src/common/FrameManager.ts
index 647360c0558e7..0312ac294f04c 100644
--- a/src/common/FrameManager.ts
+++ b/src/common/FrameManager.ts
@@ -769,6 +769,13 @@ export class Frame {
);
}
+ /**
+ * @returns a page associated with the frame.
+ */
+ page(): Page {
+ return this._frameManager.page();
+ }
+
/**
* @remarks
*
diff --git a/test/src/frame.spec.ts b/test/src/frame.spec.ts
index e7804d23ffab9..6bc21aa53a407 100644
--- a/test/src/frame.spec.ts
+++ b/test/src/frame.spec.ts
@@ -116,6 +116,15 @@ describe('Frame specs', function () {
});
});
+ describe('Frame.page', function () {
+ it('should retrieve the page from a frame', async () => {
+ const {page, server} = getTestState();
+ await page.goto(server.EMPTY_PAGE);
+ const mainFrame = page.mainFrame();
+ expect(mainFrame.page()).toEqual(page);
+ });
+ });
+
describe('Frame Management', function () {
itFailsFirefox('should handle nested frames', async () => {
const {page, server} = getTestState();