feat(playwright-core): add remove cookies api

This patch contains removeCookies method to remove cookies from BrowserContext by it's names
This commit is contained in:
PaulTriandafilov 2024-02-27 21:28:44 +02:00
parent 9a38aedf09
commit 8d7e4a4f0e
9 changed files with 114 additions and 1 deletions

View file

@ -1010,6 +1010,21 @@ Creates a new page in the browser context.
Returns all open pages in the context.
## async method: BrowserContext.removeCookies
* since: v1.42
Removes cookies from context.
**Usage**
```js
await browserContext.removeCookies([cookieName1, cookieName2]);
```
### param: BrowserContext.removeCookies.cookieNames
* since: v1.42
- `cookieNames` <[string]|[Array]<[string]>> - list of cookie names to remove from context
## property: BrowserContext.request
* since: v1.16
* langs:

View file

@ -269,6 +269,13 @@ export class BrowserContext extends ChannelOwner<channels.BrowserContextChannel>
await this._channel.clearCookies();
}
async removeCookies(cookieNames: string | string[]): Promise<void> {
if (typeof cookieNames === 'string')
cookieNames = [cookieNames];
await this._channel.removeCookies({ cookieNames: cookieNames as string[] });
}
async grantPermissions(permissions: string[], options?: { origin?: string }): Promise<void> {
await this._channel.grantPermissions({ permissions, ...options });
}

View file

@ -828,6 +828,10 @@ scheme.BrowserContextAddInitScriptParams = tObject({
scheme.BrowserContextAddInitScriptResult = tOptional(tObject({}));
scheme.BrowserContextClearCookiesParams = tOptional(tObject({}));
scheme.BrowserContextClearCookiesResult = tOptional(tObject({}));
scheme.BrowserContextRemoveCookiesParams = tObject({
cookieNames: tArray(tString),
});
scheme.BrowserContextRemoveCookiesResult = tOptional(tObject({}));
scheme.BrowserContextClearPermissionsParams = tOptional(tObject({}));
scheme.BrowserContextClearPermissionsResult = tOptional(tObject({}));
scheme.BrowserContextCloseParams = tObject({

View file

@ -276,6 +276,15 @@ export abstract class BrowserContext extends SdkObject {
return await this.doGetCookies(urls as string[]);
}
async removeCookies(cookieNames: string | string[]): Promise<void> {
const setCookies = await this.cookies();
const newCookiesSet = setCookies.filter(c => !cookieNames.includes(c.name));
await this.clearCookies();
await this.addCookies(newCookiesSet);
}
setHTTPCredentials(httpCredentials?: types.Credentials): Promise<void> {
return this.doSetHTTPCredentials(httpCredentials);
}

View file

@ -224,6 +224,10 @@ export class BrowserContextDispatcher extends Dispatcher<BrowserContext, channel
await this._context.clearCookies();
}
async removeCookies(params: channels.BrowserContextRemoveCookiesParams): Promise<void> {
await this._context.removeCookies(params.cookieNames);
}
async grantPermissions(params: channels.BrowserContextGrantPermissionsParams): Promise<void> {
await this._context.grantPermissions(params.permissions, params.origin);
}

View file

@ -8438,6 +8438,19 @@ export interface BrowserContext {
*/
pages(): Array<Page>;
/**
* Removes cookies from context.
*
* **Usage**
*
* ```js
* await browserContext.removeCookies([cookieName1, cookieName2]);
* ```
*
* @param cookieNames
*/
removeCookies(cookieNames: string|ReadonlyArray<string>): Promise<void>;
/**
* Routing provides the capability to modify network requests that are made by any page in the browser context. Once
* route is enabled, every request matching the url pattern will stall unless it's continued, fulfilled or aborted.

View file

@ -1427,6 +1427,7 @@ export interface BrowserContextChannel extends BrowserContextEventTarget, EventT
addCookies(params: BrowserContextAddCookiesParams, metadata?: CallMetadata): Promise<BrowserContextAddCookiesResult>;
addInitScript(params: BrowserContextAddInitScriptParams, metadata?: CallMetadata): Promise<BrowserContextAddInitScriptResult>;
clearCookies(params?: BrowserContextClearCookiesParams, metadata?: CallMetadata): Promise<BrowserContextClearCookiesResult>;
removeCookies(params: BrowserContextRemoveCookiesParams, metadata?: CallMetadata): Promise<BrowserContextRemoveCookiesResult>;
clearPermissions(params?: BrowserContextClearPermissionsParams, metadata?: CallMetadata): Promise<BrowserContextClearPermissionsResult>;
close(params: BrowserContextCloseParams, metadata?: CallMetadata): Promise<BrowserContextCloseResult>;
cookies(params: BrowserContextCookiesParams, metadata?: CallMetadata): Promise<BrowserContextCookiesResult>;
@ -1523,6 +1524,13 @@ export type BrowserContextAddInitScriptResult = void;
export type BrowserContextClearCookiesParams = {};
export type BrowserContextClearCookiesOptions = {};
export type BrowserContextClearCookiesResult = void;
export type BrowserContextRemoveCookiesParams = {
cookieNames: string[],
};
export type BrowserContextRemoveCookiesOptions = {
};
export type BrowserContextRemoveCookiesResult = void;
export type BrowserContextClearPermissionsParams = {};
export type BrowserContextClearPermissionsOptions = {};
export type BrowserContextClearPermissionsResult = void;

View file

@ -1032,6 +1032,12 @@ BrowserContext:
clearCookies:
removeCookies:
parameters:
cookieNames:
type: array
items: string
clearPermissions:
close:
@ -3222,7 +3228,7 @@ ElectronApplication:
events:
close:
console:
parameters:
parameters:
$mixin: ConsoleMessage
Android:

View file

@ -0,0 +1,47 @@
/**
* Copyright 2018 Google Inc. All rights reserved.
* Modifications copyright (c) Microsoft Corporation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { contextTest as it, expect } from '../config/browserTest';
it('should remove cookies', async ({ context, page, server }) => {
await page.goto(server.EMPTY_PAGE);
await context.addCookies([{
url: server.EMPTY_PAGE,
name: 'cookie1',
value: '1'
},
{
url: server.EMPTY_PAGE,
name: 'cookie2',
value: '2'
},
{
url: server.EMPTY_PAGE,
name: 'cookie3',
value: '3'
}]);
expect(await page.evaluate('document.cookie')).toBe('cookie1=1; cookie2=2; cookie3=3');
await context.removeCookies(['cookie1', 'cookie2']);
expect(await page.evaluate('document.cookie')).toBe('cookie3=3');
await page.reload();
expect(await page.evaluate('document.cookie')).toBe('cookie3=3');
await context.removeCookies('cookie3');
expect(await page.evaluate('document.cookie')).toBe('');
await page.reload();
expect(await page.evaluate('document.cookie')).toBe('');
});