1+ import { test , expect } from '@playwright/test' ;
2+ import { exec } from 'child_process' ;
3+ import { promisify } from 'util' ;
4+
5+ const execAsync = promisify ( exec ) ;
6+
7+ // Helper function to speak text (blocking - waits for speech to complete)
8+ async function speak ( text : string ) {
9+ try {
10+ // Use PowerShell's speech synthesis on Windows
11+ await execAsync ( `powershell -Command "Add-Type -AssemblyName System.Speech; (New-Object System.Speech.Synthesis.SpeechSynthesizer).Speak('${ text } ')"` ) ;
12+ } catch ( error ) {
13+ console . log ( `Voice: ${ text } ` ) ; // Fallback to console if speech fails
14+ }
15+ }
16+
17+ test ( 'test' , async ( { page } ) => {
18+ // Increase timeout to allow for voice narration
19+ test . setTimeout ( 120000 ) ; // 2 minutes
20+ await speak ( 'Navigating to dashboard' ) ;
21+ await page . goto ( 'http://localhost:4200/dashboard' ) ;
22+
23+ await speak ( 'Opening Employees menu' ) ;
24+ await page . getByRole ( 'button' , { name : 'Employees' } ) . click ( ) ;
25+ await page . waitForTimeout ( 500 ) ; // Wait for menu to expand
26+ await speak ( 'Viewing Employees List' ) ;
27+ await page . getByRole ( 'link' , { name : 'L List' } ) . click ( ) ;
28+
29+ await speak ( 'Opening Departments menu' ) ;
30+ await page . getByRole ( 'button' , { name : 'Departments' } ) . click ( ) ;
31+ await page . waitForTimeout ( 500 ) ; // Wait for menu to expand
32+ await speak ( 'Viewing Departments List' ) ;
33+ await page . getByRole ( 'link' , { name : 'L List' } ) . click ( ) ;
34+
35+ await speak ( 'Opening Positions menu' ) ;
36+ await page . getByRole ( 'button' , { name : 'Positions' } ) . click ( ) ;
37+ await page . waitForTimeout ( 500 ) ; // Wait for menu to expand
38+ await speak ( 'Viewing Positions List' ) ;
39+ await page . getByRole ( 'link' , { name : 'L List' } ) . click ( ) ;
40+
41+ await speak ( 'Opening Salary Ranges menu' ) ;
42+ await page . getByRole ( 'button' , { name : 'Salary Ranges' } ) . click ( ) ;
43+ await page . waitForTimeout ( 500 ) ; // Wait for menu to expand
44+ await speak ( 'Viewing Salary Ranges List' ) ;
45+ await page . getByRole ( 'link' , { name : 'L List' } ) . click ( ) ;
46+
47+ await speak ( 'Opening account menu' ) ;
48+ await page . getByRole ( 'button' ) . filter ( { hasText : 'account_circle' } ) . click ( ) ;
49+ await speak ( 'Clicking Login' ) ;
50+ await page . getByRole ( 'menuitem' , { name : 'Login' } ) . click ( ) ;
51+ await speak ( 'Entering username' ) ;
52+ await page . getByRole ( 'textbox' , { name : 'Username' } ) . click ( ) ;
53+ await page . getByRole ( 'textbox' , { name : 'Username' } ) . fill ( 'ashtyn1' ) ;
54+ await speak ( 'Entering password' ) ;
55+ await page . getByRole ( 'textbox' , { name : 'Password' } ) . click ( ) ;
56+ await page . getByRole ( 'textbox' , { name : 'Password' } ) . fill ( 'Pa$$word123' ) ;
57+ await speak ( 'Logging in' ) ;
58+ await page . getByRole ( 'button' , { name : 'Login' } ) . click ( ) ;
59+
60+ await speak ( 'Opening Employees menu to create' ) ;
61+ await page . getByRole ( 'button' , { name : 'Employees' } ) . click ( ) ;
62+ await page . waitForTimeout ( 500 ) ; // Wait for menu to expand
63+ await speak ( 'Creating new Employee' ) ;
64+ await page . getByRole ( 'link' , { name : 'C Create' } ) . click ( ) ;
65+
66+ await speak ( 'Opening Departments menu to create' ) ;
67+ await page . getByRole ( 'button' , { name : 'Departments' } ) . click ( ) ;
68+ await page . waitForTimeout ( 500 ) ; // Wait for menu to expand
69+ await speak ( 'Creating new Department' ) ;
70+ await page . getByRole ( 'link' , { name : 'C Create' } ) . click ( ) ;
71+
72+ await speak ( 'Opening Positions menu to create' ) ;
73+ await page . getByRole ( 'button' , { name : 'Positions' } ) . click ( ) ;
74+ await page . waitForTimeout ( 500 ) ; // Wait for menu to expand
75+ await speak ( 'Creating new Position' ) ;
76+ await page . getByRole ( 'link' , { name : 'C Create' } ) . click ( ) ;
77+
78+ await speak ( 'Opening Salary Ranges menu to create' ) ;
79+ await page . getByRole ( 'button' , { name : 'Salary Ranges' } ) . click ( ) ;
80+ await page . waitForTimeout ( 500 ) ; // Wait for menu to expand
81+ await speak ( 'Creating new Salary Range' ) ;
82+ await page . getByRole ( 'link' , { name : 'C Create' } ) . click ( ) ;
83+
84+ await speak ( 'Opening account menu' ) ;
85+ await page . getByRole ( 'button' ) . filter ( { hasText : 'account_circle' } ) . click ( ) ;
86+ await speak ( 'Logging out' ) ;
87+ await page . getByRole ( 'menuitem' , { name : 'logout' } ) . click ( ) ;
88+ await speak ( 'Test complete' ) ;
89+ await page . getByRole ( 'link' , { name : 'here' } ) . click ( ) ;
90+ } ) ;
0 commit comments