@@ -73,49 +73,55 @@ export class ToolBaseGenUIPage {
73
73
}
74
74
75
75
async extractMainDisplayHaikuContent ( page : Page ) : Promise < string > {
76
- // Wait for main haiku lines to be present
77
- const mainDisplayLines = page . locator ( '[data-testid="main-haiku-line"]' ) ;
78
- const mainCount = await mainDisplayLines . count ( ) ;
76
+ const activeCard = page . locator ( '[data-testid="main-haiku-display"].active' ) . last ( ) ;
77
+
78
+ try {
79
+ await activeCard . waitFor ( { state : 'visible' , timeout : 5000 } ) ;
80
+ } catch ( error ) {
81
+ // Fallback to any visible haiku lines if the active card isn't available yet
82
+ const fallbackLines = page . locator ( '[data-testid="main-haiku-line"]' ) ;
83
+ const fallbackCount = await fallbackLines . count ( ) ;
84
+ if ( fallbackCount === 0 ) {
85
+ return '' ;
86
+ }
87
+
88
+ const fallbackLineTexts : string [ ] = [ ] ;
89
+ for ( let i = 0 ; i < fallbackCount ; i ++ ) {
90
+ const fallbackLine = fallbackLines . nth ( i ) ;
91
+ const japaneseText = await fallbackLine . locator ( 'p' ) . first ( ) . innerText ( ) ;
92
+ fallbackLineTexts . push ( japaneseText ) ;
93
+ }
79
94
80
- if ( mainCount === 0 ) {
95
+ return fallbackLineTexts . join ( '' ) . replace ( / \s / g, '' ) ;
96
+ }
97
+
98
+ const mainDisplayLines = activeCard . locator ( '[data-testid="main-haiku-line"]' ) ;
99
+ const count = await mainDisplayLines . count ( ) ;
100
+ if ( count === 0 ) {
81
101
return '' ;
82
102
}
83
103
84
- // Take only the last 3 lines (most recent haiku)
85
- // Haikus are 3 lines, and they're appended in order
86
- const startIndex = Math . max ( 0 , mainCount - 3 ) ;
87
104
const lines : string [ ] = [ ] ;
88
-
89
- for ( let i = startIndex ; i < mainCount ; i ++ ) {
105
+ for ( let i = 0 ; i < count ; i ++ ) {
90
106
const haikuLine = mainDisplayLines . nth ( i ) ;
91
107
const japaneseText = await haikuLine . locator ( 'p' ) . first ( ) . innerText ( ) ;
92
108
lines . push ( japaneseText ) ;
93
109
}
94
110
95
- const mainHaikuContent = lines . join ( '' ) . replace ( / \s / g, '' ) ;
96
- return mainHaikuContent ;
111
+ return lines . join ( '' ) . replace ( / \s / g, '' ) ;
97
112
}
98
113
99
114
async checkHaikuDisplay ( page : Page ) : Promise < void > {
100
115
const chatHaikuContent = await this . extractChatHaikuContent ( page ) ;
101
116
102
- await page . waitForTimeout ( 5000 ) ;
103
-
104
- const mainHaikuContent = await this . extractMainDisplayHaikuContent ( page ) ;
105
-
106
- if ( mainHaikuContent === '' ) {
107
- expect ( chatHaikuContent . length ) . toBeGreaterThan ( 0 ) ;
108
- return ;
109
- }
110
-
111
- if ( chatHaikuContent === mainHaikuContent ) {
112
- expect ( mainHaikuContent ) . toBe ( chatHaikuContent ) ;
113
- } else {
114
- await page . waitForTimeout ( 3000 ) ;
115
-
116
- const updatedMainContent = await this . extractMainDisplayHaikuContent ( page ) ;
117
-
118
- expect ( updatedMainContent ) . toBe ( chatHaikuContent ) ;
119
- }
117
+ await expect
118
+ . poll ( async ( ) => {
119
+ const content = await this . extractMainDisplayHaikuContent ( page ) ;
120
+ return content ;
121
+ } , {
122
+ timeout : 10000 ,
123
+ message : 'Main display did not match the latest chat haiku' ,
124
+ } )
125
+ . toBe ( chatHaikuContent ) ;
120
126
}
121
127
}
0 commit comments