From 14d6e74fb1d809bc182b40a03af5987f8c8cfb66 Mon Sep 17 00:00:00 2001 From: AShahzad Date: Thu, 10 Oct 2024 21:20:17 +0500 Subject: [PATCH] fixed excel status update issue --- loginResults.xlsx | Bin 157938 -> 26006 bytes tests/ExACT_login.js | 358 ++++++++++++++++++++++--------------------- 2 files changed, 184 insertions(+), 174 deletions(-) diff --git a/loginResults.xlsx b/loginResults.xlsx index 7666b93bd0a6ed6c559bb4527e933f5c996a0515..b697c53a4062ffe26804eca195234d7f15c1bb87 100644 GIT binary patch delta 1634 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 diff --git a/tests/ExACT_login.js b/tests/ExACT_login.js index 47d8389..5705e63 100644 --- a/tests/ExACT_login.js +++ b/tests/ExACT_login.js @@ -15,10 +15,10 @@ const ExACT_login = (req, res) => { //Right Panel: //Welcome back -const expectedWelcomeBackText = 'WELCOME BACK!'; +const expectedWelcomeBackText = 'WELCOME BAC'; const expectedWelcomeBackColor = 'rgba(117, 117, 117, 1)' //gray //Login -const expectedLoginTitleText = 'Login to your account'; +const expectedLoginTitleText = 'Login to account'; const expectedLoginTitleColor = 'rgba(40, 39, 90, 1)'; //navy blue const expectedLoginTitleFont = '32px'; //Username @@ -35,7 +35,7 @@ const expectedForgotPasswordLinkColor = 'rgba(40, 39, 90, 1)'; //navy blue const expectedLoginButtonText = 'Login'; const expectedLoginButtonColor = 'rgba(48, 200, 172, 1)'; //teal //Don't have account text -const expectedDontHaveAccountText = `DON'T HAVE AN ACCOUNT?`; +const expectedDontHaveAccountText = `DON'T HAVE ACCOUNT?`; //Free trial button const expectedFreeTrialButtonText = '30 Day'; const expectedFreeTrialButtonColor = 'rgba(0, 0, 0, 0)'; //white @@ -45,245 +45,254 @@ const expectedAuthenticationText = 'Authentication Failed. Please check the user const expectedAuthenticationColor = 'rgba(231, 76, 60, 0.88)'; //orange const steps = [ - { description: 'Navigate to ExACT Landing Page', action: async () => await driver.navigate().to('https://stage.edgate.com/exact/login.php') }, //PROD - https://correlation.edgate.com/exact/login.php + { description: 'Navigate to ExACT Landing Page', action: async () => await driver.navigate().to('https://stage.edgate.com/exact/login.php') }, { description: 'Expand browser', action: async () => await driver.manage().window().maximize() }, - //RIGHT PANEL - //ExACT logo - { description: 'Verify ExACT logo is present', action: async () => - { const expectedExactLogo = await driver.wait(until.elementLocated(By.css('.logo')), 5000).catch(() => false); - if (expectedExactLogo) - {console.log('Passed: ExACT logo present');} - else - {console.log('FAILED: ExACT logo not found');} + { + description: 'Verify ExACT logo is present', + action: async () => { + const expectedExactLogo = await driver.wait(until.elementLocated(By.css('.logo')), 5000).catch(() => false); + if (!expectedExactLogo) { + throw new Error('ExACT logo not found'); + } + console.log('Passed: ExACT logo present'); } }, - //Welcome back text - { description: 'Validate Welcome back text', action: async () => - { const elementText = await driver.findElement(By.css('#formLogin > p')).getText(); - if (elementText === expectedWelcomeBackText) - {console.log('Passed: Welcome Back! text matched as expected');} - else - {console.log(`FAILED: Expected: "${expectedWelcomeBackText}"; Actual: "${elementText}"`);} + { + description: 'Validate Welcome back text', + action: async () => { + const elementText = await driver.findElement(By.css('#formLogin > p')).getText(); + if (elementText !== expectedWelcomeBackText) { + throw new Error(`Expected: "${expectedWelcomeBackText}"; Actual: "${elementText}"`); + } + console.log('Passed: Welcome Back! text matched as expected'); } }, - //Welcome back text color - { description: 'Validate Welcome back text color', action: async () => - { const elementStyle = await driver.findElement(By.css('#formLogin > p')).getCssValue('color'); - if (elementStyle === expectedWelcomeBackColor) - {console.log('Passed: Welcome back text color matched as expected');} - else - {console.log(`FAILED: Welcome back text color Expected: "${expectedWelcomeBackColor}"; Actual: "${elementStyle}"`);} + { + description: 'Validate Welcome back text color', + action: async () => { + const elementStyle = await driver.findElement(By.css('#formLogin > p')).getCssValue('color'); + if (elementStyle !== expectedWelcomeBackColor) { + throw new Error(`Welcome back text color Expected: "${expectedWelcomeBackColor}"; Actual: "${elementStyle}"`); + } + console.log('Passed: Welcome back text color matched as expected'); } }, - //Welcome back icon - { description: 'Verify Welcome back icon is present', action: async () => - { const expectedWelcomeBackIcon = await driver.wait(until.elementLocated(By.css('p > img')), 5000).catch(() => false); - if (expectedWelcomeBackIcon) - {console.log('Passed: Welcome back icon present');} - else - {console.log('FAILED: Welcome back icon not found');} + { + description: 'Verify Welcome back icon is present', + action: async () => { + const expectedWelcomeBackIcon = await driver.wait(until.elementLocated(By.css('p > img')), 5000).catch(() => false); + if (!expectedWelcomeBackIcon) { + throw new Error('Welcome back icon not found'); + } + console.log('Passed: Welcome back icon present'); } }, - //Login title text - { description: 'Validate Login title text', action: async () => - { const elementText = await driver.findElement(By.css('h2:nth-child(3)')).getText(); - if (elementText === expectedLoginTitleText) - {console.log('Passed: Login title text matched as expected');} - else - {console.log(`FAILED: Expected: "${expectedLoginTitleText}"; Actual: "${elementText}"`);} + { + description: 'Validate Login title text', + action: async () => { + const elementText = await driver.findElement(By.css('h2:nth-child(3)')).getText(); + if (elementText !== expectedLoginTitleText) { + throw new Error(`Expected: "${expectedLoginTitleText}"; Actual: "${elementText}"`); + } + console.log('Passed: Login title text matched as expected'); } }, - //Login title text color - { description: 'Validate Login title text color', action: async () => - { const elementStyle = await driver.findElement(By.css('h2:nth-child(3)')).getCssValue('color'); - if (elementStyle === expectedLoginTitleColor) - {console.log('Passed: Login title text color matched as expected');} - else - {console.log(`FAILED: Login title text color Expected: "${expectedLoginTitleColor}"; Actual: "${elementStyle}"`);} + { + description: 'Validate Login title text color', + action: async () => { + const elementStyle = await driver.findElement(By.css('h2:nth-child(3)')).getCssValue('color'); + if (elementStyle !== expectedLoginTitleColor) { + throw new Error(`Login title text color Expected: "${expectedLoginTitleColor}"; Actual: "${elementStyle}"`); + } + console.log('Passed: Login title text color matched as expected'); } }, - //Login title text font - { description: 'Validate Login title text font size', action: async () => - { const elementStyle = await driver.findElement(By.css('h2:nth-child(3)')).getCssValue('font-size'); - if (elementStyle === expectedLoginTitleFont) - {console.log('Passed: Login title text font-size matched as expected');} - else - {console.log(`FAILED: Login title text font-size Expected: "${expectedLoginTitleFont}"; Actual: "${elementStyle}"`);} + { + description: 'Validate Login title text font size', + action: async () => { + const elementStyle = await driver.findElement(By.css('h2:nth-child(3)')).getCssValue('font-size'); + if (elementStyle !== expectedLoginTitleFont) { + throw new Error(`Login title text font-size Expected: "${expectedLoginTitleFont}"; Actual: "${elementStyle}"`); + } + console.log('Passed: Login title text font-size matched as expected'); } }, - //Username label text - { description: 'Validate Username label text', action: async () => - { const elementText = await driver.findElement(By.css('.form-group:nth-child(4) > label')).getText(); - if (elementText === expectedUsernameLabel) - {console.log('Passed: Username label text matched as expected');} - else - {console.log(`FAILED: Expected: "${expectedUsernameLabel}"; Actual: "${elementText}"`);} + { + description: 'Validate Username label text', + action: async () => { + const elementText = await driver.findElement(By.css('.form-group:nth-child(4) > label')).getText(); + if (elementText !== expectedUsernameLabel) { + throw new Error(`Expected: "${expectedUsernameLabel}"; Actual: "${elementText}"`); + } + console.log('Passed: Username label text matched as expected'); } }, - //Username label text color - { description: 'Validate Username label text color', action: async () => - { const elementStyle = await driver.findElement(By.css('.form-group:nth-child(4) > label')).getCssValue('color'); - if (elementStyle === expectedUsernameColor) - {console.log('Passed: Username label text color matched as expected');} - else - {console.log(`FAILED: Username label text color Expected: "${expectedUsernameColor}"; Actual: "${elementStyle}"`);} + { + description: 'Validate Username label text color', + action: async () => { + const elementStyle = await driver.findElement(By.css('.form-group:nth-child(4) > label')).getCssValue('color'); + if (elementStyle !== expectedUsernameColor) { + throw new Error(`Username label text color Expected: "${expectedUsernameColor}"; Actual: "${elementStyle}"`); + } + console.log('Passed: Username label text color matched as expected'); } }, - //Username textbox placeholder - { description: 'Validate Username placeholder text', action: async () => - { const elementValue = await driver.findElement(By.css('.form-control:nth-child(2)')).getAttribute('placeholder'); - if (elementValue === expectedUsernamePlaceholder) - {console.log('Passed: Username placeholder text matched as expected');} - else - {console.log(`FAILED: Username placeholder text Expected: "${expectedUsernamePlaceholder}"; Actual: "${elementValue}"`);} + { + description: 'Validate Username placeholder text', + action: async () => { + const elementValue = await driver.findElement(By.css('.form-control:nth-child(2)')).getAttribute('placeholder'); + if (elementValue !== expectedUsernamePlaceholder) { + throw new Error(`Username placeholder text Expected: "${expectedUsernamePlaceholder}"; Actual: "${elementValue}"`); + } + console.log('Passed: Username placeholder text matched as expected'); } }, - //Password label text - { description: 'Validate Password label text', action: async () => - { const elementText = await driver.findElement(By.css('.form-group:nth-child(5) > label')).getText(); - if (elementText === expectedPasswordLabel) - {console.log('Passed: Password label text matched as expected');} - else - {console.log(`FAILED: Expected: "${expectedPasswordLabel}"; Actual: "${elementText}"`);} + { + description: 'Validate Password label text', + action: async () => { + const elementText = await driver.findElement(By.css('.form-group:nth-child(5) > label')).getText(); + if (elementText !== expectedPasswordLabel) { + throw new Error(`Expected: "${expectedPasswordLabel}"; Actual: "${elementText}"`); + } + console.log('Passed: Password label text matched as expected'); } }, - //Password label text color - { description: 'Validate Password label text color', action: async () => - { const elementStyle = await driver.findElement(By.css('.form-group:nth-child(5) > label')).getCssValue('color'); - if (elementStyle === expectedPasswordColor) - {console.log('Passed: Password label text color matched as expected');} - else - {console.log(`FAILED: Password label text color Expected: "${expectedPasswordColor}"; Actual: "${elementStyle}"`);} + { + description: 'Validate Password label text color', + action: async () => { + const elementStyle = await driver.findElement(By.css('.form-group:nth-child(5) > label')).getCssValue('color'); + if (elementStyle !== expectedPasswordColor) { + throw new Error(`Password label text color Expected: "${expectedPasswordColor}"; Actual: "${elementStyle}"`); + } + console.log('Passed: Password label text color matched as expected'); } }, - //Password textbox placeholder - { description: 'Validate Password placeholder text', action: async () => - { const elementValue = await driver.findElement(By.css('.passfield')).getAttribute('placeholder'); - if (elementValue === expectedPasswordPlaceholder) - {console.log('Passed: Password placeholder text matched as expected');} - else - {console.log(`FAILED: Password placeholder text Expected: "${expectedPasswordPlaceholder}"; Actual: "${elementValue}"`);} + { + description: 'Validate Password placeholder text', + action: async () => { + const elementValue = await driver.findElement(By.css('.passfield')).getAttribute('placeholder'); + if (elementValue !== expectedPasswordPlaceholder) { + throw new Error(`Password placeholder text Expected: "${expectedPasswordPlaceholder}"; Actual: "${elementValue}"`); + } + console.log('Passed: Password placeholder text matched as expected'); } }, - //Forgot password text link color - { description: 'Validate Forgot Password link text color', action: async () => - { const elementStyle = await driver.findElement(By.linkText('Forgot Password?')).getCssValue('color'); - if (elementStyle === expectedForgotPasswordLinkColor) - {console.log('Passed: Forgot password link text color matched as expected');} - else - {console.log(`FAILED: Forgot password link text color Expected: "${expectedForgotPasswordLinkColor}"; Actual: "${elementStyle}"`);} + { + description: 'Validate Forgot Password link text color', + action: async () => { + const elementStyle = await driver.findElement(By.linkText('Forgot Password?')).getCssValue('color'); + if (elementStyle !== expectedForgotPasswordLinkColor) { + throw new Error(`Forgot password link text color Expected: "${expectedForgotPasswordLinkColor}"; Actual: "${elementStyle}"`); + } + console.log('Passed: Forgot password link text color matched as expected'); } }, - //Login button text - { description: 'Validate Login button text', action: async () => - { const elementText = await driver.findElement(By.css('.login')).getAttribute('value'); - if (elementText === expectedLoginButtonText) - {console.log('Passed: Login button text matched as expected');} - else - {console.log(`FAILED: Expected: "${expectedLoginButtonText}"; Actual: "${elementText}"`);} + { + description: 'Validate Login button text', + action: async () => { + const elementText = await driver.findElement(By.css('.login')).getAttribute('value'); + if (elementText !== expectedLoginButtonText) { + throw new Error(`Expected: "${expectedLoginButtonText}"; Actual: "${elementText}"`); + } + console.log('Passed: Login button text matched as expected'); } }, - //Login button background color - { description: 'Validate Login button background color', action: async () => - { const elementStyle = await driver.findElement(By.css('.login')).getCssValue('background-color'); - if (elementStyle === expectedLoginButtonColor) - {console.log('Passed: Login button background color matched as expected');} - else - {console.log(`FAILED: Login button background color Expected: "${expectedLoginButtonColor}"; Actual: "${elementStyle}"`);} + { + description: 'Validate Login button background color', + action: async () => { + const elementStyle = await driver.findElement(By.css('.login')).getCssValue('background-color'); + if (elementStyle !== expectedLoginButtonColor) { + throw new Error(`Login button background color Expected: "${expectedLoginButtonColor}"; Actual: "${elementStyle}"`); + } + console.log('Passed: Login button background color matched as expected'); } }, - //Don't have an account? text - { description: 'Validate Dont have account text', action: async () => - { const elementText = await driver.findElement(By.css('p:nth-child(1)')).getText(); - if (elementText === expectedDontHaveAccountText) - {console.log('Passed: Dont have an account text matched as expected');} - else - {console.log(`FAILED: Expected: "${expectedDontHaveAccountText}"; Actual: "${elementText}"`);} + { + description: 'Validate Dont have account text', + action: async () => { + const elementText = await driver.findElement(By.css('p:nth-child(1)')).getText(); + if (elementText !== expectedDontHaveAccountText) { + throw new Error(`Expected: "${expectedDontHaveAccountText}"; Actual: "${elementText}"`); + } + console.log('Passed: Dont have an account text matched as expected'); } }, - //Free trial button text - { description: 'Validate Free trial button text', action: async () => - { const elementText = await driver.findElement(By.css('.btn > span')).getText(); - if (elementText === expectedFreeTrialButtonText) - {console.log('Passed: Free trial button text matched as expected');} - else - {console.log(`FAILED: Expected: "${expectedFreeTrialButtonText}"; Actual: "${elementText}"`);} + { + description: 'Validate Free trial button text', + action: async () => { + const elementText = await driver.findElement(By.css('.btn > span')).getText(); + if (elementText !== expectedFreeTrialButtonText) { + throw new Error(`Expected: "${expectedFreeTrialButtonText}"; Actual: "${elementText}"`); + } + console.log('Passed: Free trial button text matched as expected'); } }, - //Free trial button background color - { description: 'Validate Free trial button background color', action: async () => - { const elementStyle = await driver.findElement(By.css('.btn > span')).getCssValue('background-color'); - if (elementStyle === expectedFreeTrialButtonColor) - {console.log('Passed: Free trial button background color matched as expected');} - else - {console.log(`FAILED: Free trial button background color Expected: "${expectedFreeTrialButtonColor}"; Actual: "${elementStyle}"`);} + { + description: 'Validate Free trial button background color', + action: async () => { + const elementStyle = await driver.findElement(By.css('.btn > span')).getCssValue('background-color'); + if (elementStyle !== expectedFreeTrialButtonColor) { + throw new Error(`Free trial button background color Expected: "${expectedFreeTrialButtonColor}"; Actual: "${elementStyle}"`); + } + console.log('Passed: Free trial button background color matched as expected'); } }, - //EdGate copyright image - { description: 'Verify EdGate copyright image is present', action: async () => - { const expectedEdGateCopyright = await driver.wait(until.elementLocated(By.css('.logincopyright > img')), 5000).catch(() => false); - if (expectedEdGateCopyright) - {console.log('Passed: EdGate copyright image present');} - else - {console.log('FAILED: EdGate copyright not found');} + { + description: 'Verify EdGate copyright image is present', + action: async () => { + const expectedEdGateCopyright = await driver.wait(until.elementLocated(By.css('.logincopyright > img')), 5000).catch(() => false); + if (!expectedEdGateCopyright) { + throw new Error('EdGate copyright not found'); + } + console.log('Passed: EdGate copyright image present'); } }, - //Validation { description: 'Click Login button', action: async () => await driver.findElement(By.css('.login')).click() }, - - /*Username validation - { description: 'Validate username validadtion text', action: async () => - { const elementText = await driver.findElement(By.css('?')).getText(); - if (elementText === expectedUsernameValidationText) - {console.log('Passed: Username validation text matched as expected');} - else - {console.log(`FAILED: Expected: "${expectedUsernameValidationText}"; Actual: "${elementText}"`);} - } - },*/ - { description: 'Enter username', action: async () => await driver.findElement(By.css('.form-control:nth-child(2)')).sendKeys('exact_juan') }, { description: 'Click Login button after entering username', action: async () => await driver.findElement(By.css('.login')).click() }, { description: 'Enter incorrect password', action: async () => await driver.findElement(By.css('.passfield')).sendKeys('Edgate1') }, { description: 'Click Login button after entering wrong password', action: async () => await driver.findElement(By.css('.login')).click() }, - //Confirm validation message - { description: 'Validate authentication failed validation text', action: async () => - { const elementText = await driver.findElement(By.css('.alert')).getText(); - if (elementText === expectedAuthenticationText) - {console.log('Passed: Authentication text matched as expected');} - else - {console.log(`FAILED: Expected: "${expectedAuthenticationText}"; Actual: "${elementText}"`);} + { + description: 'Validate authentication failed validation text', + action: async () => { + const elementText = await driver.findElement(By.css('.alert')).getText(); + if (elementText !== expectedAuthenticationText) { + throw new Error(`Expected: "${expectedAuthenticationText}"; Actual: "${elementText}"`); + } + console.log('Passed: Authentication text matched as expected'); } }, - //Authentication validation text background color - { description: 'Validate authentication alert background color', action: async () => - { const elementStyle = await driver.findElement(By.css('.alert')).getCssValue('background-color'); - if (elementStyle === expectedAuthenticationColor) - {console.log('Passed: Authentication alert background color matched as expected');} - else - {console.log(`FAILED: Authentication alert background color Expected: "${expectedAuthenticationColor}"; Actual: "${elementStyle}"`);} + { + description: 'Validate authentication alert background color', + action: async () => { + const elementStyle = await driver.findElement(By.css('.alert')).getCssValue('background-color'); + if (elementStyle !== expectedAuthenticationColor) { + throw new Error(`Authentication alert background color Expected: "${expectedAuthenticationColor}"; Actual: "${elementStyle}"`); + } + console.log('Passed: Authentication alert background color matched as expected'); } }, @@ -342,10 +351,10 @@ try { } catch (error) { const screenshotPath = await takeScreenshot(driver, stepIndex, `${step.description}_Failed`); worksheet = logStep(worksheet, step.description, 'Failed', stepIndex, timestamp, screenshotPath); - throw error; // Re-throw the error to stop further execution if necessary + console.error(`Step ${stepIndex} failed: ${error.message}`); + testStatus = 'Failed'; } } - //Check if login was successful const usernameValidation = await driver.wait(until.elementLocated(By.css('#navbarDropdown > span')), 5000).catch(() => false); @@ -354,11 +363,12 @@ try { testStatus = 'Passed'; } else { console.log('FAILED: Unable to log in'); + testStatus = 'Failed'; } // Log test end time const endTime = new Date().toISOString(); - worksheet = logStep(worksheet, 'Test End', 'Ended', '', endTime, ''); + worksheet = logStep(worksheet, 'Test End', testStatus, '', endTime, ''); // Write the updated worksheet back to the workbook and save it workbook.Sheets['Sheet1'] = worksheet;