Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions examples/playwright-nvda/tests/chromium/chromium.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ test.describe("Chromium Playwright NVDA", () => {
const osName = platform();
const osVersion = release();
const browserVersion = browser.version();
const screenReaderName = nvda.name;
const screenReaderVersion = nvda.version;
const { retry } = test.info();
const recordingFilePath = `./recordings/playwright-nvda-${osName}-${osVersion}-${browserName}-${browserVersion}-attempt-${retry}-${+new Date()}.mov`;

Expand All @@ -25,6 +27,8 @@ test.describe("Chromium Playwright NVDA", () => {
osVersion,
browserName,
browserVersion,
screenReaderName,
screenReaderVersion,
retry,
});

Expand Down
4 changes: 4 additions & 0 deletions examples/playwright-nvda/tests/firefox/firefox.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ test.describe("Firefox Playwright VoiceOver", () => {
const osName = platform();
const osVersion = release();
const browserVersion = browser.version();
const screenReaderName = nvda.name;
const screenReaderVersion = nvda.version;
const { retry } = test.info();
const recordingFilePath = `./recordings/playwright-nvda-${osName}-${osVersion}-${browserName}-${browserVersion}-attempt-${retry}-${+new Date()}.mov`;

Expand All @@ -25,6 +27,8 @@ test.describe("Firefox Playwright VoiceOver", () => {
osVersion,
browserName,
browserVersion,
screenReaderName,
screenReaderVersion,
retry,
});

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import { platform, release } from "os";
import { delay } from "../../../../src/delay";
import { expect } from "@playwright/test";
import { log } from "../../../log";
import { screenReaderTest as test } from "../../../../src";

test.describe("Chromium Playwright Screen Reader", () => {
test("I can capture screen reader output from Playwright commands", async ({
browser,
browserName,
page,
screenReader,
}) => {
const osName = platform();
const osVersion = release();
const browserVersion = browser.version();
const screenReaderName = screenReader.name;
const screenReaderVersion = screenReader.version;
const { retry } = test.info();

console.table({
osName,
osVersion,
browserName,
browserVersion,
screenReaderName,
screenReaderVersion,
retry,
});

log("Navigating to live region test page.");

await page.goto("about:blank", {
waitUntil: "load",
});

await page.setContent(`
<main>
<h1>Example 1</h1>
<button id="trigger">Update</button>
</main>

<div role="alert" id="live"></div>

<script>
document.querySelector("#trigger").addEventListener("click", () => {
document.querySelector("#live").textContent = "testing testing 123"
});
</script>
`);

const button = page.locator("#trigger");
await button.waitFor();
await delay(500);

await screenReader.navigateToWebContent();
await delay(500);

log(`Performing capture: Playwright focus`);
const { spokenPhrase: focusSpokenPhrase } = await screenReader.capture(() =>
button.focus(),
);
log(`Screen reader output: "${focusSpokenPhrase}".`);

log(`Performing capture: Playwright click`);
const { spokenPhrase: clickSpokenPhrase } = await screenReader.capture(
() => button.click(),
{
// Capture full output as there is potential for multiple phrases:
//
// 1. The button itself
// 2. And the live region announcement
//
// And the default capture of "initial" will cut off the announcement.
capture: true,
},
);
log(`Screen reader output: "${clickSpokenPhrase}".`);

expect(clickSpokenPhrase).toContain("testing testing 123");
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,17 @@ test.describe("Chromium Playwright Screen Reader", () => {
const osName = platform();
const osVersion = release();
const browserVersion = browser.version();
const screenReaderName = screenReader.name;
const screenReaderVersion = screenReader.version;
const { retry } = test.info();

console.table({
osName,
osVersion,
browserName,
browserVersion,
screenReaderName,
screenReaderVersion,
retry,
});

Expand Down
4 changes: 4 additions & 0 deletions examples/playwright-voiceover/tests/chromium/chromium.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ test.describe("Chromium Playwright VoiceOver", () => {
const osName = platform();
const osVersion = release();
const browserVersion = browser.version();
const screenReaderName = voiceOver.name;
const screenReaderVersion = voiceOver.version;
const { retry } = test.info();
const recordingFilePath = `./recordings/playwright-voiceover-${osName}-${osVersion}-${browserName}-${browserVersion}-attempt-${retry}-${+new Date()}.mov`;

Expand All @@ -26,6 +28,8 @@ test.describe("Chromium Playwright VoiceOver", () => {
osVersion,
browserName,
browserVersion,
screenReaderName,
screenReaderVersion,
retry,
});

Expand Down
4 changes: 4 additions & 0 deletions examples/playwright-voiceover/tests/firefox/firefox.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ test.describe("Firefox Playwright VoiceOver", () => {
const osName = platform();
const osVersion = release();
const browserVersion = browser.version();
const screenReaderName = voiceOver.name;
const screenReaderVersion = voiceOver.version;
const { retry } = test.info();
const recordingFilePath = `./recordings/playwright-voiceover-${osName}-${osVersion}-${browserName}-${browserVersion}-attempt-${retry}-${+new Date()}.mov`;

Expand All @@ -26,6 +28,8 @@ test.describe("Firefox Playwright VoiceOver", () => {
osVersion,
browserName,
browserVersion,
screenReaderName,
screenReaderVersion,
retry,
});

Expand Down
4 changes: 4 additions & 0 deletions examples/playwright-voiceover/tests/webkit/webkit.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ test.describe("Webkit Playwright VoiceOver", () => {
const osName = platform();
const osVersion = release();
const browserVersion = browser.version();
const screenReaderName = voiceOver.name;
const screenReaderVersion = voiceOver.version;
const { retry } = test.info();
const recordingFilePath = `./recordings/playwright-voiceover-${osName}-${osVersion}-${browserName}-${browserVersion}-attempt-${retry}-${+new Date()}.mov`;

Expand All @@ -26,6 +28,8 @@ test.describe("Webkit Playwright VoiceOver", () => {
osVersion,
browserName,
browserVersion,
screenReaderName,
screenReaderVersion,
retry,
});

Expand Down
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
"test:voiceover:webkit": "playwright test --config ./examples/playwright-voiceover/webkit.config.ts ./examples/playwright-voiceover/tests/webkit/"
},
"devDependencies": {
"@guidepup/guidepup": "^0.32.1",
"@guidepup/guidepup": "^0.33.0",
"@guidepup/record": "^0.1.0",
"@playwright/test": "^1.60.0",
"@types/node": "^24.10.1",
Expand All @@ -58,7 +58,7 @@
"typescript": "^5.9.3"
},
"peerDependencies": {
"@guidepup/guidepup": ">=0.27.0",
"@guidepup/guidepup": ">=0.33.0",
"@playwright/test": "^1.57.0"
},
"resolutions": {
Expand Down
19 changes: 12 additions & 7 deletions src/nvdaTest.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
import { test } from "@playwright/test";
import { nvda, WindowsKeyCodes, WindowsModifiers } from "@guidepup/guidepup";
import type { CommandOptions, NVDA } from "@guidepup/guidepup";
import {
type CommandOptions,
nvda,
type NVDA,
type StartOptions,
WindowsKeyCodes,
WindowsModifiers,
} from "@guidepup/guidepup";
import { applicationNameMap } from "./applicationNameMap";
import { delay } from "./delay";

Expand All @@ -9,6 +15,7 @@ type Prettify<T> = {
} & {};

type CaptureCommandOptions = Prettify<Pick<CommandOptions, "capture">>;
type CaptureStartOptions = Prettify<Pick<StartOptions, "capture" | "settings">>;

/**
* [API Reference](https://www.guidepup.dev/docs/api/class-nvda)
Expand Down Expand Up @@ -39,9 +46,7 @@ export interface NVDAPlaywright extends NVDA {
*
* This command should be used after page navigation.
*/
navigateToWebContent(
options?: Pick<CommandOptions, "capture">,
): Promise<void>;
navigateToWebContent(options?: CaptureCommandOptions): Promise<void>;
}

const nvdaPlaywright: NVDAPlaywright = nvda as NVDAPlaywright;
Expand Down Expand Up @@ -149,11 +154,11 @@ export const nvdaTest = test.extend<{
*/
nvda: NVDAPlaywright;
/**
* [API Reference](https://www.guidepup.dev/docs/api/class-command-options)
* [API Reference](https://www.guidepup.dev/docs/api/class-start-options)
*
* Options to start NVDA with, see also [nvda.start([options])](https://www.guidepup.dev/docs/api/class-nvda#nvda-start).
*/
nvdaStartOptions: CaptureCommandOptions;
nvdaStartOptions: CaptureStartOptions;
}>({
nvdaStartOptions: { capture: "initial" },
nvda: async ({ browserName, page, nvdaStartOptions }, use) => {
Expand Down
Loading
Loading