first commit
Security: Sync from Public / sync-from-public (push) Has been cancelled
Test: Benchmark Nightly / build (push) Has been cancelled
Test: Benchmark Nightly / Notify Cats on failure (push) Has been cancelled
CI: Python / Checks (push) Has been cancelled
Test: Evals Python / Workflow Comparison Python (push) Has been cancelled
Util: Check Docs URLs / check-docs-urls (push) Has been cancelled
Test: Visual Storybook / Cloudflare Pages (push) Has been cancelled
Test: E2E Performance / build-and-test-performance (push) Has been cancelled
Test: Workflows Nightly / Run Workflow Tests (push) Has been cancelled
Util: Cleanup CI Docker Images / Delete stale CI images (push) Has been cancelled
Test: Benchmark Destroy Env / build (push) Has been cancelled
Util: Update Node Popularity / update-popularity (push) Has been cancelled
Test: E2E Coverage Weekly / Coverage Tests (push) Has been cancelled
Security: Sync from Public / sync-from-public (push) Has been cancelled
Test: Benchmark Nightly / build (push) Has been cancelled
Test: Benchmark Nightly / Notify Cats on failure (push) Has been cancelled
CI: Python / Checks (push) Has been cancelled
Test: Evals Python / Workflow Comparison Python (push) Has been cancelled
Util: Check Docs URLs / check-docs-urls (push) Has been cancelled
Test: Visual Storybook / Cloudflare Pages (push) Has been cancelled
Test: E2E Performance / build-and-test-performance (push) Has been cancelled
Test: Workflows Nightly / Run Workflow Tests (push) Has been cancelled
Util: Cleanup CI Docker Images / Delete stale CI images (push) Has been cancelled
Test: Benchmark Destroy Env / build (push) Has been cancelled
Util: Update Node Popularity / update-popularity (push) Has been cancelled
Test: E2E Coverage Weekly / Coverage Tests (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
import type { Page } from '@playwright/test';
|
||||
|
||||
export class ClipboardHelper {
|
||||
constructor(private readonly page: Page) {}
|
||||
|
||||
/**
|
||||
* Grant clipboard permissions
|
||||
* @param mode - Permission mode: 'read', 'write', or 'readwrite' (default)
|
||||
*/
|
||||
async grant(mode: 'read' | 'write' | 'readwrite' = 'readwrite'): Promise<void> {
|
||||
let permissions = ['clipboard-read', 'clipboard-write'];
|
||||
|
||||
if (mode === 'read') {
|
||||
permissions = ['clipboard-read'];
|
||||
} else if (mode === 'write') {
|
||||
permissions = ['clipboard-write'];
|
||||
}
|
||||
|
||||
await this.page.context().grantPermissions(permissions);
|
||||
}
|
||||
|
||||
/**
|
||||
* Write text to clipboard using page.evaluate.
|
||||
* @param text - The text to write to clipboard
|
||||
*/
|
||||
async writeText(text: string): Promise<void> {
|
||||
await this.page.evaluate(async (data) => {
|
||||
await navigator.clipboard.writeText(data);
|
||||
}, text);
|
||||
}
|
||||
|
||||
/**
|
||||
* Write text to clipboard and simulate paste keyboard action.
|
||||
* @param text - The text to write to clipboard and paste
|
||||
*/
|
||||
async paste(text: string): Promise<void> {
|
||||
await this.grant();
|
||||
await this.writeText(text);
|
||||
await this.page.keyboard.press('ControlOrMeta+V');
|
||||
}
|
||||
|
||||
/**
|
||||
* Read text from clipboard using page.evaluate.
|
||||
* @returns The text from clipboard
|
||||
*/
|
||||
async readText(): Promise<string> {
|
||||
return await this.page.evaluate(() => navigator.clipboard.readText());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user