@@ -17,7 +17,8 @@ import { NotebookUtil } from './models/notebook.util';
1717
1818export const NOTEBOOK_PATTERNS = {
1919 URL_REGEX : / \/ n o t e b o o k \/ [ ^ \/ \? ] + / ,
20- URL_EXTRACT_NOTEBOOK_ID_REGEX : / \/ n o t e b o o k \/ ( [ ^ \/ \? ] + ) /
20+ URL_EXTRACT_NOTEBOOK_ID_REGEX : / \/ n o t e b o o k \/ ( [ ^ \/ \? ] + ) / ,
21+ LINK_SELECTOR : 'a[href*="/notebook/"]'
2122} as const ;
2223
2324export const PAGES = {
@@ -159,6 +160,7 @@ export const getBasicPageMetadata = async (
159160 path : getCurrentPath ( page )
160161} ) ;
161162
163+ import { LoginPage } from './models/login-page' ;
162164export const performLoginIfRequired = async ( page : Page ) : Promise < boolean > => {
163165 const isShiroEnabled = await LoginTestUtil . isShiroEnabled ( ) ;
164166 if ( ! isShiroEnabled ) {
@@ -178,13 +180,8 @@ export const performLoginIfRequired = async (page: Page): Promise<boolean> => {
178180
179181 const isLoginVisible = await page . locator ( 'zeppelin-login' ) . isVisible ( ) ;
180182 if ( isLoginVisible ) {
181- const userNameInput = page . getByRole ( 'textbox' , { name : 'User Name' } ) ;
182- const passwordInput = page . getByRole ( 'textbox' , { name : 'Password' } ) ;
183- const loginButton = page . getByRole ( 'button' , { name : 'Login' } ) ;
184-
185- await userNameInput . fill ( testUser . username ) ;
186- await passwordInput . fill ( testUser . password ) ;
187- await loginButton . click ( ) ;
183+ const loginPage = new LoginPage ( page ) ;
184+ await loginPage . login ( testUser . username , testUser . password ) ;
188185
189186 // for webkit
190187 await page . waitForTimeout ( 200 ) ;
@@ -269,7 +266,7 @@ export const waitForZeppelinReady = async (page: Page): Promise<void> => {
269266} ;
270267
271268export const waitForNotebookLinks = async ( page : Page , timeout : number = 30000 ) => {
272- const locator = page . locator ( 'a[href*="#/notebook/"]' ) ;
269+ const locator = page . locator ( NOTEBOOK_PATTERNS . LINK_SELECTOR ) ;
273270
274271 // If there are no notebook links on the page, there's no reason to wait
275272 const count = await locator . count ( ) ;
@@ -316,7 +313,7 @@ export const navigateToNotebookWithFallback = async (
316313
317314 // The link text in the UI is the base name of the note, not the full path.
318315 const baseName = notebookName . split ( '/' ) . pop ( ) ;
319- const notebookLink = page . locator ( `a[href*="/notebook/"]` ) . filter ( { hasText : baseName ! } ) ;
316+ const notebookLink = page . locator ( NOTEBOOK_PATTERNS . LINK_SELECTOR ) . filter ( { hasText : baseName ! } ) ;
320317 // Use the click action's built-in wait.
321318 await notebookLink . click ( { timeout : 10000 } ) ;
322319
@@ -349,16 +346,16 @@ const navigateViaHomePageFallback = async (page: Page, baseNotebookName: string)
349346 await page . waitForLoadState ( 'networkidle' , { timeout : 15000 } ) ;
350347 await page . waitForSelector ( 'zeppelin-node-list' , { timeout : 15000 } ) ;
351348
352- await page . waitForFunction ( ( ) => document . querySelectorAll ( 'a[href*="/notebook/"]' ) . length > 0 , {
349+ await page . waitForFunction ( ( ) => document . querySelectorAll ( NOTEBOOK_PATTERNS . LINK_SELECTOR ) . length > 0 , {
353350 timeout : 15000
354351 } ) ;
355352 await page . waitForLoadState ( 'domcontentloaded' , { timeout : 15000 } ) ;
356353
357- const notebookLink = page . locator ( `a[href*="/notebook/"]` ) . filter ( { hasText : baseNotebookName } ) ;
354+ const notebookLink = page . locator ( NOTEBOOK_PATTERNS . LINK_SELECTOR ) . filter ( { hasText : baseNotebookName } ) ;
358355
359356 const browserName = page . context ( ) . browser ( ) ?. browserType ( ) . name ( ) ;
360357 if ( browserName === 'firefox' ) {
361- await page . waitForSelector ( `a[href*="/notebook/"] :has-text("${ baseNotebookName } ")` , {
358+ await page . waitForSelector ( `${ NOTEBOOK_PATTERNS . LINK_SELECTOR } :has-text("${ baseNotebookName } ")` , {
362359 state : 'visible' ,
363360 timeout : 90000
364361 } ) ;
0 commit comments