From a58037df8c7ab8678a27935ee13d1566632ff634 Mon Sep 17 00:00:00 2001 From: ankur22 Date: Fri, 30 Jun 2023 14:50:29 +0100 Subject: [PATCH 1/5] Update browser.contexts to browser.context We've made a change which means that there is now a 1-to-1 mapping between browser and a browserContext. This means that there can only ever be one browserContext open at any given point per browser. So the contexts method on browser now only needs to return the current browserContext. --- .../07 k6-experimental/01 browser.md | 2 +- .../07 k6-experimental/01 browser/contexts.md | 24 ++++++++++++------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser.md b/src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser.md index 2adfee6b72..6542805a7f 100644 --- a/src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser.md +++ b/src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser.md @@ -35,7 +35,7 @@ The browser module is the entry point for all your tests, and it is what interac | Method | Description | |-------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------| -| [browser.contexts()](/javascript-api/k6-experimental/browser/contexts) | Lets you access all open [BrowserContext](/javascript-api/k6-experimental/browser/browsercontext/)s. | +| [browser.context()](/javascript-api/k6-experimental/browser/contexts) | Returns the current [BrowserContext](/javascript-api/k6-experimental/browser/browsercontext/). | | [browser.isConnected](/javascript-api/k6-experimental/browser/isconnected) | Indicates whether the [CDP](https://chromedevtools.github.io/devtools-protocol/) connection to the browser process is active or not. | | [browser.newContext([options])](/javascript-api/k6-experimental/browser/newcontext/) | Creates and returns a new [BrowserContext](/javascript-api/k6-experimental/browser/browsercontext/). | | [browser.newPage([options])](/javascript-api/k6-experimental/browser/newpage) | Creates a new [Page](/javascript-api/k6-experimental/browser/page/) in a new [BrowserContext](/javascript-api/k6-experimental/browser/browsercontext/) and returns the page. | diff --git a/src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser/contexts.md b/src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser/contexts.md index 35df1a87c9..00f658f01c 100644 --- a/src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser/contexts.md +++ b/src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser/contexts.md @@ -1,15 +1,21 @@ --- title: 'contexts()' -excerpt: 'Browser module: contexts method' +excerpt: 'Browser module: context method' --- -Access all open [BrowserContext](/javascript-api/k6-experimental/browser/browsercontext/)s. +Returns the current [BrowserContext](/javascript-api/k6-experimental/browser/browsercontext/). + +
+ +A 1-to-1 mapping between [Browser](/javascript-api/k6-experimental/browser) and `BrowserContext` means you cannot run `BrowserContexts` concurrently. If you wish to create a new `BrowserContext` while one already exists, you will need to [close](/javascript-api/k6-experimental/browser/browsercontext/close) the current one, and create a new one with either [newContext](/javascript-api/k6-experimental/browser/newcontext/) or [newPage](/javascript-api/k6-experimental/browser/newpage). All resources associated to the closed `BrowserContext` will also be closed and cleaned up (such as [Page](/javascript-api/k6-experimental/browser/page/)s). + +
### Returns -| Type | Description | -| ----- | ------------------------------------------------------------------------------ | -| Array | Array of [BrowserContext](/javascript-api/k6-experimental/browser/browsercontext/) objects | +| Type | Description | +| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| object \| null | The current [BrowserContext](/javascript-api/k6-experimental/browser/browsercontext/) if one has been created, otherwise `null`. | ### Example @@ -31,11 +37,13 @@ export const options = { } export default function () { - console.log(browser.contexts().length); // 0 + console.log(browser.context()); // null - const context = browser.newContext(); - console.log(browser.contexts().length); // 1 + const page = browser.newPage(); + const context = browser.context(); + console.log(context); // {"base_event_emitter":{}} + page.close(); context.close(); } ``` From 84a4d8aae27852a8dfa3dafa0c63cf23568e33ba Mon Sep 17 00:00:00 2001 From: ankur22 Date: Fri, 30 Jun 2023 15:10:39 +0100 Subject: [PATCH 2/5] Rename contexts to context --- .../docs/02 javascript api/07 k6-experimental/01 browser.md | 2 +- .../07 k6-experimental/01 browser/{contexts.md => context.md} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser/{contexts.md => context.md} (98%) diff --git a/src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser.md b/src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser.md index 6542805a7f..55bf2311d2 100644 --- a/src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser.md +++ b/src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser.md @@ -35,7 +35,7 @@ The browser module is the entry point for all your tests, and it is what interac | Method | Description | |-------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------| -| [browser.context()](/javascript-api/k6-experimental/browser/contexts) | Returns the current [BrowserContext](/javascript-api/k6-experimental/browser/browsercontext/). | +| [browser.context()](/javascript-api/k6-experimental/browser/context) | Returns the current [BrowserContext](/javascript-api/k6-experimental/browser/browsercontext/). | | [browser.isConnected](/javascript-api/k6-experimental/browser/isconnected) | Indicates whether the [CDP](https://chromedevtools.github.io/devtools-protocol/) connection to the browser process is active or not. | | [browser.newContext([options])](/javascript-api/k6-experimental/browser/newcontext/) | Creates and returns a new [BrowserContext](/javascript-api/k6-experimental/browser/browsercontext/). | | [browser.newPage([options])](/javascript-api/k6-experimental/browser/newpage) | Creates a new [Page](/javascript-api/k6-experimental/browser/page/) in a new [BrowserContext](/javascript-api/k6-experimental/browser/browsercontext/) and returns the page. | diff --git a/src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser/contexts.md b/src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser/context.md similarity index 98% rename from src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser/contexts.md rename to src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser/context.md index 00f658f01c..58f9014ed8 100644 --- a/src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser/contexts.md +++ b/src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser/context.md @@ -1,5 +1,5 @@ --- -title: 'contexts()' +title: 'context()' excerpt: 'Browser module: context method' --- From e0af3d26ae419e389d8313024c573a34ff616ba7 Mon Sep 17 00:00:00 2001 From: ankur22 Date: Fri, 30 Jun 2023 14:52:02 +0100 Subject: [PATCH 3/5] Update newContext to reflect 1-to-1 change The discription on browser.newContext needs to reflect the new change where only one browserContext can be open at any given time per browser. We need to notify the user how they can work with this new behaviour. --- .../01 browser/newcontext--options--.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser/newcontext--options--.md b/src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser/newcontext--options--.md index 2338b5f43a..fda7e53d7c 100644 --- a/src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser/newcontext--options--.md +++ b/src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser/newcontext--options--.md @@ -3,7 +3,13 @@ title: 'newContext([options])' excerpt: 'Browser module: newContext method' --- -Creates and returns a new [BrowserContext](/javascript-api/k6-experimental/browser/browsercontext/). +Creates and returns a new [BrowserContext](/javascript-api/k6-experimental/browser/browsercontext/), if one hasn't already been initialized for the [Browser](/javascript-api/k6-experimental/browser). If one has already been initialized an error is thrown. + +
+ +A 1-to-1 mapping between [Browser](/javascript-api/k6-experimental/browser) and `BrowserContext` means you cannot run `BrowserContexts` concurrently. Due to this restriction, if one already exists, it must be [close](/javascript-api/k6-experimental/browser/browsercontext/close)d first before creating a new one. + +
From 4ff194edcb406d158338e6e37f3875e433a1be7e Mon Sep 17 00:00:00 2001 From: ankur22 Date: Fri, 30 Jun 2023 14:53:50 +0100 Subject: [PATCH 4/5] Update newPage to reflect 1-to-1 change The description on browser.newPage needs to reflect the new change where only one browserContext can be open at any given time per browser. We need to notify the user how they can work with this new behaviour. --- .../07 k6-experimental/01 browser/newpage--options--.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser/newpage--options--.md b/src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser/newpage--options--.md index cee4d2456e..e0a24efc4a 100644 --- a/src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser/newpage--options--.md +++ b/src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser/newpage--options--.md @@ -3,7 +3,13 @@ title: 'newPage([options])' excerpt: 'Browser module: newPage method' --- -Creates a new [Page](/javascript-api/k6-experimental/browser/page/) in a new [BrowserContext](/javascript-api/k6-experimental/browser/browsercontext/) and returns the page. You do not need to create a new `BrowserContext` prior to using `newPage`. +Creates and returns a new [Page](/javascript-api/k6-experimental/browser/page/) in a new [BrowserContext](/javascript-api/k6-experimental/browser/browsercontext/) if a `BrowserContext` hasn't already been initialized for the [Browser](/javascript-api/k6-experimental/browser). If a `BrowserContext` has already been initialized an error is thrown. + +
+ +A 1-to-1 mapping between [Browser](/javascript-api/k6-experimental/browser) and `BrowserContext` means you cannot run `BrowserContexts` concurrently. Due to this restriction, if one already exists, it must be [retrieved](/javascript-api/k6-experimental/browser/context) and [close](/javascript-api/k6-experimental/browser/browsercontext/close)d first before creating a new one. + +
From b99e5b339c512bfe07a3d14658e648338c729dcb Mon Sep 17 00:00:00 2001 From: Ankur Date: Wed, 5 Jul 2023 10:44:19 +0100 Subject: [PATCH 5/5] Update src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser/context.md Co-authored-by: ka3de --- .../07 k6-experimental/01 browser/context.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser/context.md b/src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser/context.md index 58f9014ed8..0a71c445b4 100644 --- a/src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser/context.md +++ b/src/data/markdown/docs/02 javascript api/07 k6-experimental/01 browser/context.md @@ -39,9 +39,9 @@ export const options = { export default function () { console.log(browser.context()); // null - const page = browser.newPage(); - const context = browser.context(); - console.log(context); // {"base_event_emitter":{}} + const page1 = browser.newPage(); // implicitly creates a new browserContext + const context = browser.context(); // underlying live browserContext associated with browser + const page2 = context.newPage(); // shares the browserContext with page1 page.close(); context.close();