@@ -29,21 +29,40 @@ export default async function () {
2929 headless : true ,
3030 executablePath : process . env . CI ? "/usr/bin/google-chrome" : undefined ,
3131 } ) ;
32- context = await browser . newContext ( ) ;
32+ context = await browser . newContext ( {
33+ // Try HTTP Basic authentication
34+ httpCredentials : {
35+ username : username ,
36+ password : password ,
37+ } ,
38+ } ) ;
3339 page = await context . newPage ( ) ;
3440
35- // Log in
41+ // Navigate to login page
3642 core . info ( "Navigating to login page" ) ;
3743 await page . goto ( loginUrl ) ;
38- core . info ( "Filling username" ) ;
39- await page . getByLabel ( / u s e r n a m e / i) . fill ( username ) ;
40- core . info ( "Filling password" ) ;
41- await page . getByLabel ( / p a s s w o r d / i) . fill ( password ) ;
42- core . info ( "Logging in" ) ;
43- await page
44- . getByLabel ( / p a s s w o r d / i)
45- . locator ( "xpath=ancestor::form" )
46- . evaluate ( ( form ) => ( form as HTMLFormElement ) . submit ( ) ) ;
44+
45+ // Check for a login form
46+ const usernameField = await page . getByLabel ( / u s e r n a m e / i) . first ( ) ;
47+ const passwordField = await page . getByLabel ( / p a s s w o r d / i) . first ( ) ;
48+ if (
49+ ( await usernameField . count ( ) ) > 0 &&
50+ ( await passwordField . count ( ) ) > 0
51+ ) {
52+ // Try form authentication
53+ core . info ( "Filling username" ) ;
54+ await page . getByLabel ( / u s e r n a m e / i) . fill ( username ) ;
55+ core . info ( "Filling password" ) ;
56+ await page . getByLabel ( / p a s s w o r d / i) . fill ( password ) ;
57+ core . info ( "Logging in" ) ;
58+ await page
59+ . getByLabel ( / p a s s w o r d / i)
60+ . locator ( "xpath=ancestor::form" )
61+ . evaluate ( ( form ) => ( form as HTMLFormElement ) . submit ( ) ) ;
62+ } else {
63+ core . info ( "No login form detected" ) ;
64+ // This occurs if HTTP Basic auth succeeded, or if the page does not require authentication.
65+ }
4766
4867 // Write authenticated session state to a file and output its path
4968 await context . storageState ( { path : sessionStatePath } ) ;
0 commit comments