1- import { Page , Locator , expect } from ' @playwright/test' ;
1+ import { Page , Locator , expect } from " @playwright/test" ;
22
33export class ToolBaseGenUIPage {
44 readonly page : Page ;
@@ -9,15 +9,17 @@ export class ToolBaseGenUIPage {
99 readonly appliedButton : Locator ;
1010 readonly haikuBlock : Locator ;
1111 readonly japaneseLines : Locator ;
12+ readonly mainHaikuDisplay : Locator ;
1213
1314 constructor ( page : Page ) {
1415 this . page = page ;
1516 this . haikuAgentIntro = page . getByText ( "I'm a haiku generator 👋. How can I help you?" ) ;
16- this . messageBox = page . getByRole ( ' textbox' , { name : ' Type a message...' } ) ;
17+ this . messageBox = page . getByRole ( " textbox" , { name : " Type a message..." } ) ;
1718 this . sendButton = page . locator ( '[data-test-id="copilot-chat-ready"]' ) ;
18- this . haikuBlock = page . locator ( '[data-testid="haiku-card"]' ) ;
19- this . applyButton = page . getByRole ( 'button' , { name : 'Apply' } ) ;
20- this . japaneseLines = page . locator ( '[data-testid="haiku-line"]' ) ;
19+ this . haikuBlock = page . locator ( ".bg-palette-surface-container.rounded-2xl" ) ;
20+ this . applyButton = page . getByRole ( "button" , { name : "Apply" } ) ;
21+ this . japaneseLines = page . locator ( ".font-bold.text-palette-text-primary" ) ;
22+ this . mainHaikuDisplay = page . locator ( ".bg-palette-surface-main" ) ;
2123 }
2224
2325 async generateHaiku ( message : string ) {
@@ -27,27 +29,33 @@ export class ToolBaseGenUIPage {
2729 }
2830
2931 async checkGeneratedHaiku ( ) {
30- await this . page . locator ( '[data-testid="haiku-card"]' ) . last ( ) . isVisible ( ) ;
31- const mostRecentCard = this . page . locator ( '[data-testid="haiku-card"]' ) . last ( ) ;
32- await mostRecentCard . locator ( '[data-testid="haiku-line"]' ) . first ( ) . waitFor ( { state : 'visible' , timeout : 10000 } ) ;
32+ await this . page . locator ( ".bg-palette-surface-container.rounded-2xl" ) . last ( ) . isVisible ( ) ;
33+ const mostRecentCard = this . page . locator ( ".bg-palette-surface-container.rounded-2xl" ) . last ( ) ;
34+ await mostRecentCard
35+ . locator ( ".font-bold.text-palette-text-primary" )
36+ . first ( )
37+ . waitFor ( { state : "visible" , timeout : 10000 } ) ;
3338 }
3439
3540 async extractChatHaikuContent ( page : Page ) : Promise < string > {
3641 await page . waitForTimeout ( 3000 ) ;
37- await page . locator ( '[data-testid="haiku-card"]' ) . first ( ) . waitFor ( { state : 'visible' } ) ;
38- const allHaikuCards = page . locator ( '[data-testid="haiku-card"]' ) ;
42+ await page
43+ . locator ( ".bg-palette-surface-container.rounded-2xl" )
44+ . first ( )
45+ . waitFor ( { state : "visible" } ) ;
46+ const allHaikuCards = page . locator ( ".bg-palette-surface-container.rounded-2xl" ) ;
3947 const cardCount = await allHaikuCards . count ( ) ;
4048 let chatHaikuContainer ;
4149 let chatHaikuLines ;
4250
4351 for ( let cardIndex = cardCount - 1 ; cardIndex >= 0 ; cardIndex -- ) {
4452 chatHaikuContainer = allHaikuCards . nth ( cardIndex ) ;
45- chatHaikuLines = chatHaikuContainer . locator ( '[data-testid="haiku-line"]' ) ;
53+ chatHaikuLines = chatHaikuContainer . locator ( ".font-bold.text-palette-text-primary" ) ;
4654 const linesCount = await chatHaikuLines . count ( ) ;
4755
4856 if ( linesCount > 0 ) {
4957 try {
50- await chatHaikuLines . first ( ) . waitFor ( { state : ' visible' , timeout : 5000 } ) ;
58+ await chatHaikuLines . first ( ) . waitFor ( { state : " visible" , timeout : 5000 } ) ;
5159 break ;
5260 } catch ( error ) {
5361 continue ;
@@ -56,36 +64,38 @@ export class ToolBaseGenUIPage {
5664 }
5765
5866 if ( ! chatHaikuLines ) {
59- throw new Error ( ' No haiku cards with visible lines found' ) ;
67+ throw new Error ( " No haiku cards with visible lines found" ) ;
6068 }
6169
6270 const count = await chatHaikuLines . count ( ) ;
6371 const lines : string [ ] = [ ] ;
6472
6573 for ( let i = 0 ; i < count ; i ++ ) {
6674 const haikuLine = chatHaikuLines . nth ( i ) ;
67- const japaneseText = await haikuLine . locator ( 'p' ) . first ( ) . innerText ( ) ;
75+ const japaneseText = await haikuLine . innerText ( ) ;
6876 lines . push ( japaneseText ) ;
6977 }
7078
71- const chatHaikuContent = lines . join ( '' ) . replace ( / \s / g, '' ) ;
79+ const chatHaikuContent = lines . join ( "" ) . replace ( / \s / g, "" ) ;
7280 return chatHaikuContent ;
7381 }
7482
7583 async extractMainDisplayHaikuContent ( page : Page ) : Promise < string > {
76- const mainDisplayLines = page . locator ( '[data-testid="main-haiku-line"]' ) ;
84+ const carouselItems = page . locator ( '[class*="embla__slide"]' ) ;
85+ const activeSlide = carouselItems . first ( ) ;
86+ const mainDisplayLines = activeSlide . locator ( ".font-bold.text-palette-text-primary" ) ;
7787 const mainCount = await mainDisplayLines . count ( ) ;
7888 const lines : string [ ] = [ ] ;
7989
8090 if ( mainCount > 0 ) {
8191 for ( let i = 0 ; i < mainCount ; i ++ ) {
8292 const haikuLine = mainDisplayLines . nth ( i ) ;
83- const japaneseText = await haikuLine . locator ( 'p' ) . first ( ) . innerText ( ) ;
93+ const japaneseText = await haikuLine . innerText ( ) ;
8494 lines . push ( japaneseText ) ;
8595 }
8696 }
8797
88- const mainHaikuContent = lines . join ( '' ) . replace ( / \s / g, '' ) ;
98+ const mainHaikuContent = lines . join ( "" ) . replace ( / \s / g, "" ) ;
8999 return mainHaikuContent ;
90100 }
91101
@@ -96,7 +106,7 @@ export class ToolBaseGenUIPage {
96106
97107 const mainHaikuContent = await this . extractMainDisplayHaikuContent ( page ) ;
98108
99- if ( mainHaikuContent === '' ) {
109+ if ( mainHaikuContent === "" ) {
100110 expect ( chatHaikuContent . length ) . toBeGreaterThan ( 0 ) ;
101111 return ;
102112 }
@@ -111,4 +121,4 @@ export class ToolBaseGenUIPage {
111121 expect ( updatedMainContent ) . toBe ( chatHaikuContent ) ;
112122 }
113123 }
114- }
124+ }
0 commit comments