feat(playwright-core): add remove cookies api
Fix review comments
This commit is contained in:
parent
32fd26cdff
commit
c3f0319942
|
|
@ -1014,6 +1014,7 @@ Returns all open pages in the context.
|
||||||
* since: v1.43
|
* since: v1.43
|
||||||
|
|
||||||
Removes cookies from context.
|
Removes cookies from context.
|
||||||
|
The method will throw an error if either name, domain or path has not been passed.
|
||||||
|
|
||||||
**Usage**
|
**Usage**
|
||||||
|
|
||||||
|
|
@ -1024,9 +1025,9 @@ await browserContext.removeCookies({ path: '/api/v1' });
|
||||||
await browserContext.removeCookies({ name: 'session-id', domain: 'my-origin.com' });
|
await browserContext.removeCookies({ name: 'session-id', domain: 'my-origin.com' });
|
||||||
```
|
```
|
||||||
|
|
||||||
### param: BrowserContext.removeCookies.criteria
|
### param: BrowserContext.removeCookies.filter
|
||||||
* since: v1.43
|
* since: v1.43
|
||||||
- `criteria` <[Object]>
|
- `filter` <[Object]>
|
||||||
- `name` ?<[string]>
|
- `name` ?<[string]>
|
||||||
- `domain` ?<[string]>
|
- `domain` ?<[string]>
|
||||||
- `path` ?<[string]>
|
- `path` ?<[string]>
|
||||||
|
|
|
||||||
|
|
@ -269,8 +269,8 @@ export class BrowserContext extends ChannelOwner<channels.BrowserContextChannel>
|
||||||
await this._channel.clearCookies();
|
await this._channel.clearCookies();
|
||||||
}
|
}
|
||||||
|
|
||||||
async removeCookies(criteria: network.RemoveNetworkCookieParam): Promise<void> {
|
async removeCookies(filter: network.RemoveNetworkCookieParam): Promise<void> {
|
||||||
await this._channel.removeCookies({ criteria });
|
await this._channel.removeCookies({ filter });
|
||||||
}
|
}
|
||||||
|
|
||||||
async grantPermissions(permissions: string[], options?: { origin?: string }): Promise<void> {
|
async grantPermissions(permissions: string[], options?: { origin?: string }): Promise<void> {
|
||||||
|
|
|
||||||
|
|
@ -829,7 +829,7 @@ scheme.BrowserContextAddInitScriptResult = tOptional(tObject({}));
|
||||||
scheme.BrowserContextClearCookiesParams = tOptional(tObject({}));
|
scheme.BrowserContextClearCookiesParams = tOptional(tObject({}));
|
||||||
scheme.BrowserContextClearCookiesResult = tOptional(tObject({}));
|
scheme.BrowserContextClearCookiesResult = tOptional(tObject({}));
|
||||||
scheme.BrowserContextRemoveCookiesParams = tObject({
|
scheme.BrowserContextRemoveCookiesParams = tObject({
|
||||||
criteria: tObject({
|
filter: tObject({
|
||||||
name: tOptional(tString),
|
name: tOptional(tString),
|
||||||
domain: tOptional(tString),
|
domain: tOptional(tString),
|
||||||
path: tOptional(tString),
|
path: tOptional(tString),
|
||||||
|
|
|
||||||
|
|
@ -276,16 +276,16 @@ export abstract class BrowserContext extends SdkObject {
|
||||||
return await this.doGetCookies(urls as string[]);
|
return await this.doGetCookies(urls as string[]);
|
||||||
}
|
}
|
||||||
|
|
||||||
async removeCookies(criteria: {name?: string, domain?: string, path?: string}): Promise<void> {
|
async removeCookies(filter: {name?: string, domain?: string, path?: string}): Promise<void> {
|
||||||
if (!criteria.name && !criteria.domain && !criteria.path)
|
if (!filter.name && !filter.domain && !filter.path)
|
||||||
return;
|
throw new Error(`Either name, domain or path are required`);
|
||||||
|
|
||||||
const currentCookies = await this.cookies();
|
const currentCookies = await this.cookies();
|
||||||
|
|
||||||
const cookiesToKeep = currentCookies.filter(cookie => {
|
const cookiesToKeep = currentCookies.filter(cookie => {
|
||||||
return !((!criteria.name || criteria.name === cookie.name) &&
|
return !((!filter.name || filter.name === cookie.name) &&
|
||||||
(!criteria.domain || criteria.domain === cookie.domain) &&
|
(!filter.domain || filter.domain === cookie.domain) &&
|
||||||
(!criteria.path || criteria.path === cookie.path));
|
(!filter.path || filter.path === cookie.path));
|
||||||
});
|
});
|
||||||
|
|
||||||
await this.clearCookies();
|
await this.clearCookies();
|
||||||
|
|
|
||||||
|
|
@ -225,7 +225,7 @@ export class BrowserContextDispatcher extends Dispatcher<BrowserContext, channel
|
||||||
}
|
}
|
||||||
|
|
||||||
async removeCookies(params: channels.BrowserContextRemoveCookiesParams): Promise<void> {
|
async removeCookies(params: channels.BrowserContextRemoveCookiesParams): Promise<void> {
|
||||||
await this._context.removeCookies(params.criteria);
|
await this._context.removeCookies(params.filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
async grantPermissions(params: channels.BrowserContextGrantPermissionsParams): Promise<void> {
|
async grantPermissions(params: channels.BrowserContextGrantPermissionsParams): Promise<void> {
|
||||||
|
|
|
||||||
6
packages/playwright-core/types/types.d.ts
vendored
6
packages/playwright-core/types/types.d.ts
vendored
|
|
@ -8439,7 +8439,7 @@ export interface BrowserContext {
|
||||||
pages(): Array<Page>;
|
pages(): Array<Page>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Removes cookies from context.
|
* Removes cookies from context. The method will throw an error if either name, domain or path has not been passed.
|
||||||
*
|
*
|
||||||
* **Usage**
|
* **Usage**
|
||||||
*
|
*
|
||||||
|
|
@ -8450,9 +8450,9 @@ export interface BrowserContext {
|
||||||
* await browserContext.removeCookies({ name: 'session-id', domain: 'my-origin.com' });
|
* await browserContext.removeCookies({ name: 'session-id', domain: 'my-origin.com' });
|
||||||
* ```
|
* ```
|
||||||
*
|
*
|
||||||
* @param criteria
|
* @param filter
|
||||||
*/
|
*/
|
||||||
removeCookies(criteria: {
|
removeCookies(filter: {
|
||||||
name?: string;
|
name?: string;
|
||||||
|
|
||||||
domain?: string;
|
domain?: string;
|
||||||
|
|
|
||||||
|
|
@ -1525,7 +1525,7 @@ export type BrowserContextClearCookiesParams = {};
|
||||||
export type BrowserContextClearCookiesOptions = {};
|
export type BrowserContextClearCookiesOptions = {};
|
||||||
export type BrowserContextClearCookiesResult = void;
|
export type BrowserContextClearCookiesResult = void;
|
||||||
export type BrowserContextRemoveCookiesParams = {
|
export type BrowserContextRemoveCookiesParams = {
|
||||||
criteria: {
|
filter: {
|
||||||
name?: string,
|
name?: string,
|
||||||
domain?: string,
|
domain?: string,
|
||||||
path?: string,
|
path?: string,
|
||||||
|
|
|
||||||
|
|
@ -1034,7 +1034,7 @@ BrowserContext:
|
||||||
|
|
||||||
removeCookies:
|
removeCookies:
|
||||||
parameters:
|
parameters:
|
||||||
criteria:
|
filter:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
name: string?
|
name: string?
|
||||||
|
|
|
||||||
|
|
@ -209,7 +209,7 @@ it('should remove cookies by name, domain and path', async ({ context, page, ser
|
||||||
expect(await page.evaluate('document.cookie')).toBe('cookie1=1');
|
expect(await page.evaluate('document.cookie')).toBe('cookie1=1');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should not remove cookies when empty object passed', async ({ context, page, server }) => {
|
it('should throw if empty object is passed', async ({ context, page, server }) => {
|
||||||
await context.addCookies([{
|
await context.addCookies([{
|
||||||
name: 'cookie1',
|
name: 'cookie1',
|
||||||
value: '1',
|
value: '1',
|
||||||
|
|
@ -225,6 +225,7 @@ it('should not remove cookies when empty object passed', async ({ context, page,
|
||||||
]);
|
]);
|
||||||
await page.goto('https://www.example.com/');
|
await page.goto('https://www.example.com/');
|
||||||
expect(await page.evaluate('document.cookie')).toBe('cookie1=1; cookie2=2');
|
expect(await page.evaluate('document.cookie')).toBe('cookie1=1; cookie2=2');
|
||||||
await context.removeCookies({ });
|
const error = await context.removeCookies({ }).catch(e => e);
|
||||||
|
expect(error.message).toContain(`Either name, domain or path are required`);
|
||||||
expect(await page.evaluate('document.cookie')).toBe('cookie1=1; cookie2=2');
|
expect(await page.evaluate('document.cookie')).toBe('cookie1=1; cookie2=2');
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue