diff --git a/alignConceptsPageResults.xlsx b/alignConceptsPageResults.xlsx deleted file mode 100644 index 8761f43..0000000 Binary files a/alignConceptsPageResults.xlsx and /dev/null differ diff --git a/contentPageResults.xlsx b/contentPageResults.xlsx deleted file mode 100644 index 493eb04..0000000 Binary files a/contentPageResults.xlsx and /dev/null differ diff --git a/dashboard.xlsx b/dashboard.xlsx deleted file mode 100644 index b41f11a..0000000 Binary files a/dashboard.xlsx and /dev/null differ diff --git a/dashboardMyContentResults.xlsx b/dashboardMyContentResults.xlsx deleted file mode 100644 index ed66727..0000000 Binary files a/dashboardMyContentResults.xlsx and /dev/null differ diff --git a/dashboardMyStandardsResults.xlsx b/dashboardMyStandardsResults.xlsx deleted file mode 100644 index 950c831..0000000 Binary files a/dashboardMyStandardsResults.xlsx and /dev/null differ diff --git a/dashboardSemanticStandardsComparisonResults.xlsx b/dashboardSemanticStandardsComparisonResults.xlsx deleted file mode 100644 index 6e6eace..0000000 Binary files a/dashboardSemanticStandardsComparisonResults.xlsx and /dev/null differ diff --git a/editItemAddConceptResults.xlsx b/editItemAddConceptResults.xlsx deleted file mode 100644 index 029be91..0000000 Binary files a/editItemAddConceptResults.xlsx and /dev/null differ diff --git a/editItemResults.xlsx b/editItemResults.xlsx deleted file mode 100644 index 11b14c3..0000000 Binary files a/editItemResults.xlsx and /dev/null differ diff --git a/frameworkFrameworkSettingsDIVResults.xlsx b/frameworkFrameworkSettingsDIVResults.xlsx deleted file mode 100644 index 003a593..0000000 Binary files a/frameworkFrameworkSettingsDIVResults.xlsx and /dev/null differ diff --git a/frameworkPublishFrameworkDIVResults.xlsx b/frameworkPublishFrameworkDIVResults.xlsx deleted file mode 100644 index ed2935e..0000000 Binary files a/frameworkPublishFrameworkDIVResults.xlsx and /dev/null differ diff --git a/loginResults.xlsx b/loginResults.xlsx deleted file mode 100644 index 2eb03f4..0000000 Binary files a/loginResults.xlsx and /dev/null differ diff --git a/myStandardsSearchRelatedStandardsResults.xlsx b/myStandardsSearchRelatedStandardsResults.xlsx deleted file mode 100644 index c1575ad..0000000 Binary files a/myStandardsSearchRelatedStandardsResults.xlsx and /dev/null differ diff --git a/results/activityReportResults.xlsx b/results/activityReportResults.xlsx deleted file mode 100644 index 9fa29ab..0000000 Binary files a/results/activityReportResults.xlsx and /dev/null differ diff --git a/results/alignAutoAlignPageResults.xlsx b/results/alignAutoAlignPageResults.xlsx deleted file mode 100644 index f802be5..0000000 Binary files a/results/alignAutoAlignPageResults.xlsx and /dev/null differ diff --git a/results/alignContentPageResults.xlsx b/results/alignContentPageResults.xlsx deleted file mode 100644 index baf55d3..0000000 Binary files a/results/alignContentPageResults.xlsx and /dev/null differ diff --git a/results/alignStandardsPageResults.xlsx b/results/alignStandardsPageResults.xlsx deleted file mode 100644 index 6b6b800..0000000 Binary files a/results/alignStandardsPageResults.xlsx and /dev/null differ diff --git a/results/approveApprovalHistoryPageResults.xlsx b/results/approveApprovalHistoryPageResults.xlsx deleted file mode 100644 index db5fd55..0000000 Binary files a/results/approveApprovalHistoryPageResults.xlsx and /dev/null differ diff --git a/results/approveContentSubmissionsPageResults.xlsx b/results/approveContentSubmissionsPageResults.xlsx deleted file mode 100644 index 97ffab0..0000000 Binary files a/results/approveContentSubmissionsPageResults.xlsx and /dev/null differ diff --git a/results/approvePageResults.xlsx b/results/approvePageResults.xlsx deleted file mode 100644 index dfe9a30..0000000 Binary files a/results/approvePageResults.xlsx and /dev/null differ diff --git a/results/approvePendingAlignmentsPageResults.xlsx b/results/approvePendingAlignmentsPageResults.xlsx deleted file mode 100644 index cb058af..0000000 Binary files a/results/approvePendingAlignmentsPageResults.xlsx and /dev/null differ diff --git a/results/approveRejectionHistoryPageResults.xlsx b/results/approveRejectionHistoryPageResults.xlsx deleted file mode 100644 index d67e4aa..0000000 Binary files a/results/approveRejectionHistoryPageResults.xlsx and /dev/null differ diff --git a/results/exactLandingPageResults.xlsx b/results/exactLandingPageResults.xlsx deleted file mode 100644 index 553bb80..0000000 Binary files a/results/exactLandingPageResults.xlsx and /dev/null differ diff --git a/results/frameworkManagementPageResults.xlsx b/results/frameworkManagementPageResults.xlsx deleted file mode 100644 index 7c5c5e6..0000000 Binary files a/results/frameworkManagementPageResults.xlsx and /dev/null differ diff --git a/results/reportBuildYourReportPageResults.xlsx b/results/reportBuildYourReportPageResults.xlsx deleted file mode 100644 index 94758fb..0000000 Binary files a/results/reportBuildYourReportPageResults.xlsx and /dev/null differ diff --git a/results/reportSpecialtyReportsPageResults.xlsx b/results/reportSpecialtyReportsPageResults.xlsx deleted file mode 100644 index 6192630..0000000 Binary files a/results/reportSpecialtyReportsPageResults.xlsx and /dev/null differ diff --git a/results/reportViewQueuedReportsPageResults.xlsx b/results/reportViewQueuedReportsPageResults.xlsx deleted file mode 100644 index 0c1a1f4..0000000 Binary files a/results/reportViewQueuedReportsPageResults.xlsx and /dev/null differ diff --git a/results/uploadImportAlignmentsPageResults.xlsx b/results/uploadImportAlignmentsPageResults.xlsx deleted file mode 100644 index e5fa5c6..0000000 Binary files a/results/uploadImportAlignmentsPageResults.xlsx and /dev/null differ diff --git a/results/uploadSubmitAResourcePageResults.xlsx b/results/uploadSubmitAResourcePageResults.xlsx deleted file mode 100644 index 4206a92..0000000 Binary files a/results/uploadSubmitAResourcePageResults.xlsx and /dev/null differ diff --git a/tests/ActivityReport/ActivityReportPage.js b/tests/ActivityReport/ActivityReportPage.js index 3870ac5..39174a5 100644 --- a/tests/ActivityReport/ActivityReportPage.js +++ b/tests/ActivityReport/ActivityReportPage.js @@ -934,7 +934,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'activityReportPageResults.xlsx'); +const resultsFile = path.join('results', 'activityReportPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/Align/alignAutoAlignPage.js b/tests/Align/alignAutoAlignPage.js index ce0544a..37aacbe 100644 --- a/tests/Align/alignAutoAlignPage.js +++ b/tests/Align/alignAutoAlignPage.js @@ -2238,7 +2238,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'alignAutoAlignPageResults.xlsx'); +const resultsFile = path.join('results', 'alignAutoAlignPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/Align/alignContentPage.js b/tests/Align/alignContentPage.js index 107a675..d9cefcc 100644 --- a/tests/Align/alignContentPage.js +++ b/tests/Align/alignContentPage.js @@ -1389,7 +1389,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'alignContentPageResults.xlsx'); +const resultsFile = path.join('results', 'alignContentPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/Align/alignStandardsPage.js b/tests/Align/alignStandardsPage.js index 4ee7a87..2bd2f00 100644 --- a/tests/Align/alignStandardsPage.js +++ b/tests/Align/alignStandardsPage.js @@ -1882,7 +1882,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'alignStandardsPageResults.xlsx'); +const resultsFile = path.join('results', 'alignStandardsPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/Approve/approveApprovalHistoryPage.js b/tests/Approve/approveApprovalHistoryPage.js index 4dbe657..8766fe2 100644 --- a/tests/Approve/approveApprovalHistoryPage.js +++ b/tests/Approve/approveApprovalHistoryPage.js @@ -1436,7 +1436,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'approveApprovalHistoryPageResults.xlsx'); +const resultsFile = path.join('results', 'approveApprovalHistoryPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/Approve/approveContentSubmissionsPage.js b/tests/Approve/approveContentSubmissionsPage.js index 07afb0c..2cd6ad3 100644 --- a/tests/Approve/approveContentSubmissionsPage.js +++ b/tests/Approve/approveContentSubmissionsPage.js @@ -1436,7 +1436,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'approveContentSubmissionsPageResults.xlsx'); +const resultsFile = path.join('results', 'approveContentSubmissionsPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/Approve/approvePendingAlignmentsPage.js b/tests/Approve/approvePendingAlignmentsPage.js index c61007b..08c7c4a 100644 --- a/tests/Approve/approvePendingAlignmentsPage.js +++ b/tests/Approve/approvePendingAlignmentsPage.js @@ -1054,7 +1054,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'approvePendingAlignmentsPageResults.xlsx'); +const resultsFile = path.join('results', 'approvePendingAlignmentsPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/Approve/approveRejectionHistoryPage.js b/tests/Approve/approveRejectionHistoryPage.js index aba9779..a975f0a 100644 --- a/tests/Approve/approveRejectionHistoryPage.js +++ b/tests/Approve/approveRejectionHistoryPage.js @@ -1436,7 +1436,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'approveRejectionHistoryPageResults.xlsx'); +const resultsFile = path.join('results', 'approveRejectionHistoryPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/Frameworks/frameworkManagementPage.js b/tests/Frameworks/frameworkManagementPage.js index 342016e..c09306a 100644 --- a/tests/Frameworks/frameworkManagementPage.js +++ b/tests/Frameworks/frameworkManagementPage.js @@ -2614,7 +2614,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'frameworkManagementPageResults.xlsx'); +const resultsFile = path.join('results', 'frameworkManagementPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/Report/reportBuildYourReportPage.js b/tests/Report/reportBuildYourReportPage.js index 229e640..d5bb1a7 100644 --- a/tests/Report/reportBuildYourReportPage.js +++ b/tests/Report/reportBuildYourReportPage.js @@ -1637,7 +1637,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'reportBuildYourReportPageResults.xlsx'); +const resultsFile = path.join('results', 'reportBuildYourReportPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/Report/reportSpecialtyReportsPage.js b/tests/Report/reportSpecialtyReportsPage.js index 530eace..a3cdd83 100644 --- a/tests/Report/reportSpecialtyReportsPage.js +++ b/tests/Report/reportSpecialtyReportsPage.js @@ -1203,7 +1203,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'reportSpecialtyReportsPageResults.xlsx'); +const resultsFile = path.join('results', 'reportSpecialtyReportsPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/Report/reportViewQueuedReportsPage.js b/tests/Report/reportViewQueuedReportsPage.js index b576154..1feca21 100644 --- a/tests/Report/reportViewQueuedReportsPage.js +++ b/tests/Report/reportViewQueuedReportsPage.js @@ -1605,7 +1605,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'reportViewQueuedReportsPageResults.xlsx'); +const resultsFile = path.join('results', 'reportViewQueuedReportsPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/Upload/uploadBatchUpload.js b/tests/Upload/uploadBatchUpload.js index ae7e3db..99fc29b 100644 --- a/tests/Upload/uploadBatchUpload.js +++ b/tests/Upload/uploadBatchUpload.js @@ -1416,7 +1416,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'uploadBatchUploadPageResults.xlsx'); +const resultsFile = path.join('results', 'uploadBatchUploadPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/Upload/uploadImportAlignmentsPage.js b/tests/Upload/uploadImportAlignmentsPage.js index 4f695d7..9d2d374 100644 --- a/tests/Upload/uploadImportAlignmentsPage.js +++ b/tests/Upload/uploadImportAlignmentsPage.js @@ -1429,7 +1429,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'uploadImportAlignmentsPageResults.xlsx'); +const resultsFile = path.join('results', 'uploadImportAlignmentsPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/Upload/uploadSubmitAResourcePage.js b/tests/Upload/uploadSubmitAResourcePage.js index 56a48b9..b16e200 100644 --- a/tests/Upload/uploadSubmitAResourcePage.js +++ b/tests/Upload/uploadSubmitAResourcePage.js @@ -872,7 +872,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'uploadSubmitAResourcePageResults.xlsx'); +const resultsFile = path.join('results', 'uploadSubmitAResourcePage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/dashboardMyStandards.js b/tests/dashboardMyStandards.js deleted file mode 100644 index 8bfa960..0000000 --- a/tests/dashboardMyStandards.js +++ /dev/null @@ -1,8021 +0,0 @@ -import { Builder, By, Key, until, Select, Browser } from 'selenium-webdriver'; -import { Options as ChromeOptions } from 'selenium-webdriver/chrome.js'; -import fs from 'fs'; -import XLSX from 'xlsx'; -import path from 'path'; -import { myStandardsSearch_AlignedContent } from './myStandardsSearchAlignedContent.js'; - -const dashboardMyStandards = (req, res) => { - res.send('

ExACT Automated Test Script: DASHBOARD - My Standards Widget(dashboardMyStandards) | Initiated

'); - (async function example() { - let driver = await new Builder() - .forBrowser('chrome') - .setChromeOptions( - new ChromeOptions() - .addArguments('--disable-features=MediaRouter') - .addArguments('--disable-extensions') - .addArguments('--disable-background-networking') - .addArguments('--log-level=3') - ) - .build(); - let testStatus = 'Failed'; - let workbook; - let worksheet; - const startTime = new Date().toISOString(); - -const steps = [ - { description: 'Navigate to ExACT Landing Page', action: async () => await driver.navigate().to('https://correlation.edgate.com/exact/login.php') }, - { description: 'Expand browser', action: async () => await driver.manage().window().maximize() }, - - //Login - { - description: 'Login', - action: async () => { - const multipleChecks = 'Log In'; - console.log('------------->| MY STANDARDS WIDGET |<-------------'); - const errors = []; - - await driver.findElement(By.css('.form-control:nth-child(2)')).sendKeys('exact_juan'); - await driver.findElement(By.css('.passfield')).sendKeys('Edgate1!'); - await driver.findElement(By.css('.login')).click(); - console.log('----->| NEXT ACTION: Entered credentials and logged in'); - - //Wait for page readyState - await driver.wait(async () => { - const readyState = await driver.executeScript('return document.readyState'); - return readyState === 'complete'; - }, 30000, 'ExACT Dashboard did not fully load within 30 seconds'); - - //Wait for the dashboard container to exist in DOM - await driver.wait( - until.elementLocated(By.css('.gap-idle-wrap > img')), - 30000, - 'Dashboard image did not appear within 30 seconds' - ); - - //Wait for it to be visible - await driver.wait(async () => { - try { - const img = await driver.findElement(By.css('.gap-idle-wrap > img')); - return await img.isDisplayed(); - } catch (e) { - return false; - } - }, 30000, 'Dashboard image did not become visible within 30 seconds'); - - //Wait for any loading spinners to disappear - await driver.wait(async () => { - try { - const spinners = await driver.findElements(By.css('.spinner-border')); - for (const spinner of spinners) { - if (await spinner.isDisplayed()) return false; - } - return true; - } catch (e) { - return true; - } - }, 30000, 'Loading spinners did not disappear within 30 seconds'); - - //Wait for the slowest resource to complete - await driver.wait(async () => { - const completed = await driver.executeScript(` - const entries = performance.getEntriesByType('resource'); - return entries.some(entry => - entry.name.includes('content_sets.php') && - entry.responseEnd > 0 - ); - `); - return completed; - }, 30000, 'My Content widget (content_sets.php) did not complete loading within 30 seconds'); - console.log('Passed: My Content widget (content_sets.php) loaded successfully - Dashboard fully loaded'); - - //Final sleep to allow any remaining dynamic content to settle - await driver.sleep(2000); - - console.log('Passed: ExACT Dashboard loaded successfully'); - - if (errors.length > 0) { - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard title - { - description: 'Validate dashboard title text, size, and color', - action: async () => { - const multipleChecks = 'Dashboard title'; - const element = await driver.findElement(By.css('.e-heading')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Correlation Dashboard') { - console.log('Passed: Dashboard title text matched as expected'); - } else { - errors.push(`Expected: "Correlation Dashboard"; Actual: "${elementText}"`); - } - - //font - if (elementFont === `"DM Serif Display", serif`) { - console.log('Passed: Dashboard title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard title font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '32px') { - console.log('Passed: Dashboard title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard title text font-size "32px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Dashboard title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard title text color: "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //MY STANDARDS WIDGET - //Dashboard - My Standards Widget title (active) - { - description: 'Validate Dashboard Semantic Standards Comparison Widget title text, color, and size', - action: async () => { - const multipleChecks = 'My Standards Widget title (active)'; - const element = await driver.findElement(By.css('#mystd-tab')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'My Standards') { - console.log('Passed: Dashboard - Semantic Standards Comparison Widget title matched as expected'); - } else { - errors.push(`Expected: Dashboard - "Semantic Standards Comparison"; Actual: "${elementText}"`); - } - - //font - if (elementFont === `Poppins, sans-serif`) { - console.log('Passed: Dashboard - Semantic Standards Comparison Widget font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Semantic Standards Comparison Widget font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '15px') { - console.log('Passed: Dashboard - Semantic Standards Comparison Widget title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Semantic Standards Comparison Widget title text font-size "15px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Dashboard - Semantic Standards Comparison Widget title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Semantic Standards Comparison Widget title text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - Other Available Stndards tab title - { - description: 'Validate Dashboard - Other Available Stndards tab title text, color, and size', - action: async () => { - const multipleChecks = 'Other Available Stndards tab title'; - const element = await driver.findElement(By.css('#availstd-tab')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Other Available Standards') { - console.log('Passed: Dashboard - Other Available Standards tab title matched as expected'); - } else { - errors.push(`Expected: Dashboard - "Other Available Standards"; Actual: "${elementText}"`); - } - - //font - if (elementFont === `Poppins, sans-serif`) { - console.log('Passed: Dashboard - Other Available Standards tab title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards tab title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '15px') { - console.log('Passed: Dashboard - Other Available Standards tab title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards tab title text font-size "15px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(182, 186, 181, 1)') { - console.log('Passed: Dashboard - Other Available Standards tab title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards tab title text color "rgba(182, 186, 181, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards dropdown - { - description: 'Validate Dashboard - My Standards dropdown list and value', - action: async () => { - const multipleChecks = 'My Standards dropdown list'; - const elementDropdown = await driver.findElement(By.css('#stdparent')); - const selectedOption = await elementDropdown.findElement(By.css('option:checked')); - - const elementText = await selectedOption.getText(); - const elementFont = await selectedOption.getCssValue('font-family'); - const elementSize = await selectedOption.getCssValue('font-size'); - const elementColor = await selectedOption.getCssValue('color'); - - const options = await elementDropdown.findElements(By.css('option')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'United States Standards') { - console.log('Passed: Dashboard - My Standards dropdown text matched as expected'); - } else { - throw new Error(`Expected: Dashboard - My Standards: "United States Standards"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards dropdown font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards dropdown font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Dashboard - My Standards dropdown font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards dropdown font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Dashboard - My Standards dropdown color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards dropdown color: "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - const expected = [ - 'ACTFL', - 'Australia', - 'California', - 'Canada', - 'Common Core Standards', - 'Creating Org', - 'Demo Client Standards', - 'Demo Standards', - 'New Folder', - 'QA Client Test Frameworks', - 'United States Standards', - 'WIDA' - ]; - - const actual = []; - - for (const opt of options) { - const text = (await opt.getText()).trim(); - actual.push(text); - } - - if (JSON.stringify(actual) === JSON.stringify(expected)) { - console.log('Passed: Dashboard - My Standards Dropdown list matched as expected'); - } else { - throw new Error(`Expected: Dashboard - My Standards Dropdown list: ${JSON.stringify(expected)}, Actual: ${JSON.stringify(actual)}`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards Organization column title - { - description: 'Validate Dashboard - My Standards Organization column title, text, and font size', - action: async () => { - const multipleChecks = 'My Standards Organization column title' - const element = await driver.findElement(By.css('.table:nth-child(2) th:nth-child(1)')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Organization') { - console.log('Passed: Dashboard - My Standards Organization column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards "Organization" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Organization column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Organization column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: Dashboard - My Standards Organization column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Organization column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: Dashboard - My Standards Organization column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Organization column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards Export column title - { - description: 'Validate Dashboard - My Standards Export column title, text, and font size', - action: async () => { - const multipleChecks = 'My Standards Export column title'; - const element = await driver.findElement(By.css('.table:nth-child(2) > thead .text-center:nth-child(2)')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Export') { - console.log('Passed: Dashboard - My Standards Export column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards "Export" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Export column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Export column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: Dashboard - My Standards Export column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Export column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: Dashboard - My Standards Export column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Export column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards Manage column title - { - description: 'Validate Dashboard - My Standards Manage column title, text, and font size', - action: async () => { - const multipleChecks = 'My Standards Manage column title'; - const element = await driver.findElement(By.css('.text-center:nth-child(3)')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Manage') { - console.log('Passed: Dashboard - My Standards Manage column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards "Manage" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Manage column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Manage column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: Dashboard - My Standards Manage column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Manage column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: Dashboard - My Standards Manage column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Manage column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards More Info column title - { - description: 'Validate Dashboard - My Standards More Info column title, text, and font size', - action: async () => { - const multipleChecks = 'My Standards More Info column title'; - const element = await driver.findElement(By.css('.table-sm > thead .text-center:nth-child(4)')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'More Info') { - console.log('Passed: Dashboard - My Standards More Info column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards "More Info" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards More Info column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards More Info column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: Dashboard - My Standards More Info column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards More Info column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: Dashboard - My Standards More Info column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards More Info column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards View column title - { - description: 'Validate Dashboard - My Standards View column title, text, and font size', - action: async () => { - const multipleChecks = 'My Standards View column title'; - const element = await driver.findElement(By.css('thead .text-center:nth-child(5)')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'View') { - console.log('Passed: Dashboard - My Standards View column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards "View" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards View column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards View column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: Dashboard - My Standards View column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards View column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: Dashboard - My Standards View column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards View column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards = Alabama - { - description: 'Validate Dashboard - My Standards Organization = Alabama Standards text', - action: async () => { - const multipleChecks = 'My Standards Organization - Alabama'; - const element = await driver.findElement(By.css('#stdbody > tr:nth-child(1) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementExportIcon = await driver.findElement(By.css('#stdbody > tr:nth-child(1) > .text-center:nth-child(2) img')); - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#stdbody > tr:nth-child(1) > td:nth-child(4) > a')).getAttribute('title'); - const elementViewIcon = await driver.findElement(By.css('tr:nth-child(1) > .text-center:nth-child(5) img')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Alabama') { - console.log("Passed: Dashboard - My Standards Alabama text matched as expected"); - } else { - throw new Error(`Expected: Dashboard - My Standards text: "Alabama"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Alabama text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Alabama text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - My Standards Alabama text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Alabama text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - My Standards Alabama text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Alabama text color: "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //export icon - if (elementExportIcon) { - console.log('Passed: Dashboard - My Standards Alabama - Export icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Alabama - Export icon not found'); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - My Standards Alabama icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: ashboard - My Standards Alabama: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //view icon - if (elementViewIcon) { - console.log('Passed: Dashboard - My Standards Alabama - View icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Alabama - View icon not found'); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards = Arizona - { - description: 'Validate Dashboard - My Standards Organization = Arizona Standards text', - action: async () => { - const multipleChecks = 'My Standards Organization - Arizona'; - const element = await driver.findElement(By.css('#stdbody > tr:nth-child(2) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementExportIcon = await driver.findElement(By.css('#stdbody > tr:nth-child(2) > .text-center:nth-child(2) img')); - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#stdbody > tr:nth-child(2) > td:nth-child(4) > a')).getAttribute('title'); - const elementViewIcon = await driver.findElement(By.css('tr:nth-child(2) > .text-center:nth-child(5) img')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Arizona') { - console.log("Passed: Dashboard - My Standards Arizona text matched as expected"); - } else { - throw new Error(`Expected: Dashboard - My Standards text: "Arizona"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Arizona text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Arizona text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - My Standards Arizona text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Arizona text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - My Standards Arizona text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Arizona text color: "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //export icon - if (elementExportIcon) { - console.log('Passed: Dashboard - My Standards Arizona - Export icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Arizona - Export icon not found'); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - My Standards Arizona icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: ashboard - My Standards Arizona: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //view icon - if (elementViewIcon) { - console.log('Passed: Dashboard - My Standards Arizona - View icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Arizona - View icon not found'); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards = California - { - description: 'Validate Dashboard - My Standards Organization = California Standards text', - action: async () => { - const multipleChecks = 'My Standards Organization - California'; - const element = await driver.findElement(By.css('#stdbody > tr:nth-child(3) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementExportIcon = await driver.findElement(By.css('#stdbody > tr:nth-child(3) > .text-center:nth-child(2) img')); - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#stdbody > tr:nth-child(3) > td:nth-child(4) > a')).getAttribute('title'); - const elementViewIcon = await driver.findElement(By.css('tr:nth-child(3) > .text-center:nth-child(5) img')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'California') { - console.log("Passed: Dashboard - My Standards California text matched as expected"); - } else { - throw new Error(`Expected: Dashboard - My Standards text: "California"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards California text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards California text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - My Standards California text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards California text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - My Standards California text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards California text color: "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //export icon - if (elementExportIcon) { - console.log('Passed: Dashboard - My Standards California - Export icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards California - Export icon not found'); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - My Standards California icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: ashboard - My Standards California: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //view icon - if (elementViewIcon) { - console.log('Passed: Dashboard - My Standards California - View icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards California - View icon not found'); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards = Florida - { - description: 'Validate Dashboard - My Standards Organization = Florida Standards text', - action: async () => { - const multipleChecks = 'My Standards Organization - Florida'; - const element = await driver.findElement(By.css('#stdbody > tr:nth-child(4) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementExportIcon = await driver.findElement(By.css('#stdbody > tr:nth-child(4) > .text-center:nth-child(2) img')); - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#stdbody > tr:nth-child(4) > td:nth-child(4) > a')).getAttribute('title'); - const elementViewIcon = await driver.findElement(By.css('tr:nth-child(4) > .text-center:nth-child(5) img')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Florida') { - console.log("Passed: Dashboard - My Standards Florida text matched as expected"); - } else { - throw new Error(`Expected: Dashboard - My Standards text: "Florida"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Florida text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Florida text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - My Standards Florida text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Florida text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - My Standards Florida text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Florida text color: "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //export icon - if (elementExportIcon) { - console.log('Passed: Dashboard - My Standards Florida - Export icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Florida - Export icon not found'); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - My Standards Florida icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: ashboard - My Standards Florida: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //view icon - if (elementViewIcon) { - console.log('Passed: Dashboard - My Standards Florida - View icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Florida - View icon not found'); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards = Georgia - { - description: 'Validate Dashboard - My Standards Organization = Georgia Standards text', - action: async () => { - const multipleChecks = 'My Standards Organization - Georgia'; - const element = await driver.findElement(By.css('#stdbody > tr:nth-child(5) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementExportIcon = await driver.findElement(By.css('#stdbody > tr:nth-child(5) > .text-center:nth-child(2) img')); - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#stdbody > tr:nth-child(5) > td:nth-child(4) > a')).getAttribute('title'); - const elementViewIcon = await driver.findElement(By.css('tr:nth-child(5) > .text-center:nth-child(5) img')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Georgia') { - console.log("Passed: Dashboard - My Standards Georgia text matched as expected"); - } else { - throw new Error(`Expected: Dashboard - My Standards text: "Georgia"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Georgia text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Georgia text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - My Standards Georgia text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Georgia text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - My Standards Georgia text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Georgia text color: "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //export icon - if (elementExportIcon) { - console.log('Passed: Dashboard - My Standards Georgia - Export icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Georgia - Export icon not found'); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - My Standards Georgia icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: ashboard - My Standards Georgia: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //view icon - if (elementViewIcon) { - console.log('Passed: Dashboard - My Standards Georgia - View icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Georgia - View icon not found'); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards = Illinois - { - description: 'Validate Dashboard - My Standards Organization = Illinois Standards text', - action: async () => { - const multipleChecks = 'My Standards Organization - Illinois'; - const element = await driver.findElement(By.css('#stdbody > tr:nth-child(6) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementExportIcon = await driver.findElement(By.css('#stdbody > tr:nth-child(6) > .text-center:nth-child(2) img')); - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#stdbody > tr:nth-child(6) > td:nth-child(4) > a')).getAttribute('title'); - const elementViewIcon = await driver.findElement(By.css('tr:nth-child(6) > .text-center:nth-child(5) img')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Illinois') { - console.log("Passed: Dashboard - My Standards Illinois text matched as expected"); - } else { - throw new Error(`Expected: Dashboard - My Standards text: "Illinois"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Illinois text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Illinois text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - My Standards Illinois text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Illinois text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - My Standards Illinois text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Illinois text color: "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //export icon - if (elementExportIcon) { - console.log('Passed: Dashboard - My Standards Illinois - Export icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Illinois - Export icon not found'); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - My Standards Illinois icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: ashboard - My Standards Illinois: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //view icon - if (elementViewIcon) { - console.log('Passed: Dashboard - My Standards Illinois - View icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Illinois - View icon not found'); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards = New York - { - description: 'Validate Dashboard - My Standards Organization = New York Standards text', - action: async () => { - const multipleChecks = 'My Standards Organization - New York'; - const element = await driver.findElement(By.css('#stdbody > tr:nth-child(7) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementExportIcon = await driver.findElement(By.css('#stdbody > tr:nth-child(7) > .text-center:nth-child(2) img')); - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#stdbody > tr:nth-child(7) > td:nth-child(4) > a')).getAttribute('title'); - const elementViewIcon = await driver.findElement(By.css('tr:nth-child(7) > .text-center:nth-child(5) img')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'New York') { - console.log("Passed: Dashboard - My Standards New York text matched as expected"); - } else { - throw new Error(`Expected: Dashboard - My Standards text: "New York"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards New York text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards New York text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - My Standards New York text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards New York text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - My Standards New York text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards New York text color: "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //export icon - if (elementExportIcon) { - console.log('Passed: Dashboard - My Standards New York - Export icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards New York - Export icon not found'); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - My Standards New York icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: ashboard - My Standards New York: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //view icon - if (elementViewIcon) { - console.log('Passed: Dashboard - My Standards New York - View icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards New York - View icon not found'); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards = Texas - { - description: 'Validate Dashboard - My Standards Organization = Texas Standards text', - action: async () => { - const multipleChecks = 'My Standards Organization - Texas'; - const element = await driver.findElement(By.css('#stdbody > tr:nth-child(8) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementExportIcon = await driver.findElement(By.css('#stdbody > tr:nth-child(8) > .text-center:nth-child(2) img')); - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#stdbody > tr:nth-child(8) > td:nth-child(4) > a')).getAttribute('title'); - const elementViewIcon = await driver.findElement(By.css('tr:nth-child(8) > .text-center:nth-child(5) img')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Texas') { - console.log("Passed: Dashboard - My Standards Texas text matched as expected"); - } else { - throw new Error(`Expected: Dashboard - My Standards text: "Texas"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Texas text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Texas text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - My Standards Texas text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Texas text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - My Standards Texas text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Texas text color: "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //export icon - if (elementExportIcon) { - console.log('Passed: Dashboard - My Standards Texas - Export icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Texas - Export icon not found'); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - My Standards Texas icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: ashboard - My Standards Texas: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //view icon - if (elementViewIcon) { - console.log('Passed: Dashboard - My Standards Texas - View icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Texas - View icon not found'); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards = Washington - { - description: 'Validate Dashboard - My Standards Organization = Washington Standards text', - action: async () => { - const multipleChecks = 'My Standards Organization - Washington'; - const element = await driver.findElement(By.css('#stdbody > tr:nth-child(9) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementExportIcon = await driver.findElement(By.css('#stdbody > tr:nth-child(9) > .text-center:nth-child(2) img')); - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#stdbody > tr:nth-child(9) > td:nth-child(4) > a')).getAttribute('title'); - const elementViewIcon = await driver.findElement(By.css('tr:nth-child(9) > .text-center:nth-child(5) img')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Washington') { - console.log("Passed: Dashboard - My Standards Washington text matched as expected"); - } else { - throw new Error(`Expected: Dashboard - My Standards text: "Washington"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Washington text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Washington text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - My Standards Washington text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Washington text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - My Standards Washington text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Washington text color: "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //export icon - if (elementExportIcon) { - console.log('Passed: Dashboard - My Standards Washington - Export icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Washington - Export icon not found'); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - My Standards Washington icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: ashboard - My Standards Washington: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //view icon - if (elementViewIcon) { - console.log('Passed: Dashboard - My Standards Washington - View icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Washington - View icon not found'); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //NEXT ACTION - { - description: 'Dashboard - Click Other Available Standards tab', - action: async () => { - await driver.findElement(By.css('#availstd-tab')).click(); - console.log('----->| NEXT ACTION: Clicked Other Available Standards tab'); - - //Wait until the element exists in the DOM - const instructionText = await driver.wait( - until.elementLocated(By.css('p:nth-child(1)')), - 30000 - ); - - //Wait until it becomes visible - await driver.wait( - until.elementIsVisible(instructionText), - 30000 - ); - } - }, - - //Dashboard - My Standards Widget title - { - description: 'Validate Dashboard Semantic Standards Comparison Widget title text, color, and size', - action: async () => { - const multipleChecks = 'Dashboard Semantic Standards Comparison Widget title'; - const element = await driver.findElement(By.css('#mystd-tab')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'My Standards') { - console.log('Passed: Dashboard - Semantic Standards Comparison Widget title matched as expected'); - } else { - errors.push(`Expected: Dashboard - "Semantic Standards Comparison"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - Semantic Standards Comparison Widget title text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Semantic Standards Comparison Widget title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '15px') { - console.log('Passed: Dashboard - Semantic Standards Comparison Widget title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Semantic Standards Comparison Widget title text font-size "15px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(182, 186, 181, 1)') { - console.log('Passed: Dashboard - Semantic Standards Comparison Widget title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Semantic Standards Comparison Widget title text color "rgba(182, 186, 181, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - Other Available Stndards tab title (active) - { - description: 'Validate Dashboard - Other Available Stndards tab title text, color, and size', - action: async () => { - const multipleChecks = 'Other Available Stndards tab title'; - const element = await driver.findElement(By.css('#availstd-tab')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Other Available Standards') { - console.log('Passed: Dashboard - Other Available Standards tab title matched as expected'); - } else { - errors.push(`Expected: Dashboard - "Other Available Standards"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - Other Available Standards tab title text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards tab title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '15px') { - console.log('Passed: Dashboard - Other Available Standards tab title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards tab title text font-size "15px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Dashboard - Other Available Standards tab title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards tab title text color "rgba(40, 39, 90, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - Other Available Stndards tab title - { - description: 'Validate Dashboard - Other Available Stndards tab title text, color, and size', - action: async () => { - const multipleChecks = 'Other Available Stndards tab title'; - const element = await driver.findElement(By.css('p:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'The following standards are also available to clients. If you would like access to any of these standards sets, please Contact Us.') { - console.log('Passed: Dashboard - Other Available Standards description text matched as expected'); - } else { - errors.push(`Expected: Dashboard - "The following standards are also available to clients. If you would like access to any of these standards sets, please Contact Us."; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - Other Available Standards description text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards description text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Dashboard - Other Available Standards tab title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards tab title text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Dashboard - Other Available Standards tab title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards tab title text color "rgba(40, 39, 90, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - Other Available Standards dropdown - { - description: 'Validate Dashboard - Other Available Standards dropdown list and value', - action: async () => { - const multipleChecks = 'Other Available Standards'; - const elementDropdown = await driver.findElement(By.css('#defstdparent')); - const selectedOption = await elementDropdown.findElement(By.css('option:checked')); - - const elementText = await selectedOption.getText(); - const elementFont = await selectedOption.getCssValue('font-family'); - const elementSize = await selectedOption.getCssValue('font-size'); - const elementColor = await selectedOption.getCssValue('color'); - - const options = await elementDropdown.findElements(By.css('option')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'United States Standards') { - console.log('Passed: Dashboard - Other Available Standards dropdown value matched as expected'); - } else { - throw new Error(`Expected: Dashboard - Other Available Standards dropdown value - "United States Standards"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - Other Available Standards dropdown value font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards dropdown value font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Dashboard - Other Available Standards dropdown value font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards dropdown value font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Dashboard - Other Available Standards dropdown value color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards dropdown value color: "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - const expected = [ - 'ACT', - 'ACTFL', - 'AQA', - 'Australia', - 'Brazil', - 'Cambridge IGCSE', - 'Cambridge International AS & A Level', - 'Cambridge Secondary', - 'Canada', - 'Common Core Standards', - 'Edexcel', - 'England', - 'Finland', - 'India', - 'India NCERT (Archived)', - 'International Standards', - 'Ireland (Archived)', - 'Mexico', - 'National Standards', - 'New Zealand', - 'OCR', - 'Puerto Rico 2014', - 'Saudi Arabia', - 'Supplemental Standards', - 'Taiwan (Additional)', - 'Thailand (Additional)', - 'United Arab Emirates', - 'United States Standards' - ]; - - const actual = []; - - for (const opt of options) { - const text = (await opt.getText()).trim(); - actual.push(text); - } - - if (JSON.stringify(actual) === JSON.stringify(expected)) { - console.log('Passed: Dashboard - Other Available Standards dropdown list matched as expected'); - } else { - throw new Error(`Expected: Dashboard - Other Available Standards dropdown list: ${JSON.stringify(expected)}, Actual: ${JSON.stringify(actual)}`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - Other Available Standards Organization column title - { - description: 'Validate Dashboard - Other Available Standards Organization column title, text, and font size', - action: async () => { - const multiple = 'Other Available Standards Organization column title'; - const element = await driver.findElement(By.css('.table:nth-child(3) th:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Organization') { - console.log('Passed: Dashboard - Other Available Standards Organization column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards "Organization" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - Other Available Standards Organization column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Organization column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: Dashboard - Other Available Standards Organization column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Organization column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: Dashboard - Other Available Standards Organization column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Organization column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - Other Available Organization column title - { - description: 'Validate Dashboard - Other Available Standards More Info column title, text, and font size', - action: async () => { - const multipleChecks = 'Other Available Organization column title'; - const element = await driver.findElement(By.css('.table:nth-child(3) > thead .text-center')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'More Info') { - console.log('Passed: Dashboard - Other Available Standards More Info column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards "More Info" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - Other Available Standards More Info column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards More Info column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: Dashboard - Other Available Standards More Info column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards More Info column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: Dashboard - Other Available Standards More Info column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards More Info column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - Other Available Standards - Alaska - { - description: 'Validate Dashboard - Other Available Standards - Alaska', - action: async () => { - const multipleChecks = 'Other Available Standards - Alaska'; - const element = await driver.findElement(By.css('#defstdbody > tr:nth-child(1) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#defstdbody > tr:nth-child(1) > td.text-center > a')).getAttribute('title'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Alaska') { - console.log('Passed: Dashboard - Other Available Standards Alaska column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards "Alaska" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - Other Available Standards Alaska column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Alaska column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - Other Available Standards Alaska column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Alaska column title text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - Other Available Standards Alaska column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Alaska column title text color "rgba(33, 37, 41, 1)"'; Actual: "${elementColor}"`); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - Other Available Standards Alaska icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Alaska: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - Other Available Standards - Arkansas - { - description: 'Validate Dashboard - Other Available Standards - Arkansas', - action: async () => { - const multipleChecks = 'Other Available Standards - Arkansas'; - const element = await driver.findElement(By.css('#defstdbody > tr:nth-child(2) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#defstdbody > tr:nth-child(2) > td.text-center > a')).getAttribute('title'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Arkansas') { - console.log('Passed: Dashboard - Other Available Standards Arkansas column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards "Arkansas" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - Other Available Standards Arkansas column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Arkansas column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - Other Available Standards Arkansas column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Arkansas column title text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - Other Available Standards Arkansas column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Arkansas column title text color "rgba(33, 37, 41, 1)"'; Actual: "${elementColor}"`); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - Other Available Standards Arkansas icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Arkansas: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - Other Available Standards - Colorado - { - description: 'Validate Dashboard - Other Available Standards - Colorado', - action: async () => { - const multipleChecks = 'Other Available Standards - Colorado'; - const element = await driver.findElement(By.css('#defstdbody > tr:nth-child(3) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#defstdbody > tr:nth-child(3) > td.text-center > a')).getAttribute('title'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Colorado') { - console.log('Passed: Dashboard - Other Available Standards Colorado column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards "Colorado" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - Other Available Standards Colorado column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Colorado column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - Other Available Standards Colorado column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Colorado column title text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - Other Available Standards Colorado column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Colorado column title text color "rgba(33, 37, 41, 1)"'; Actual: "${elementColor}"`); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - Other Available Standards Colorado icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Colorado: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - Other Available Standards - Connecticut - { - description: 'Validate Dashboard - Other Available Standards - Connecticut', - action: async () => { - const multipleChecks = 'Other Available Standards - Connecticut'; - const element = await driver.findElement(By.css('#defstdbody > tr:nth-child(4) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#defstdbody > tr:nth-child(4) > td.text-center > a')).getAttribute('title'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Connecticut') { - console.log('Passed: Dashboard - Other Available Standards Connecticut column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards "Connecticut" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - Other Available Standards Connecticut column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Connecticut column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - Other Available Standards Connecticut column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Connecticut column title text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - Other Available Standards Connecticut column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Connecticut column title text color "rgba(33, 37, 41, 1)"'; Actual: "${elementColor}"`); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - Other Available Standards Connecticut icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Connecticut: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - Other Available Standards - Delaware - { - description: 'Validate Dashboard - Other Available Standards - Delaware', - action: async () => { - const multipleChecks = 'Other Available Standards - Delaware'; - const element = await driver.findElement(By.css('#defstdbody > tr:nth-child(5) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#defstdbody > tr:nth-child(5) > td.text-center > a')).getAttribute('title'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Delaware') { - console.log('Passed: Dashboard - Other Available Standards Delaware column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards "Delaware" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - Other Available Standards Delaware column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Delaware column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - Other Available Standards Delaware column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Delaware column title text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - Other Available Standards Delaware icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Delaware: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - Other Available Standards Delaware column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards Delaware column title text color "rgba(33, 37, 41, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //NEXT ACTION - { - description: 'Dashboard - Click My Standards tab', - action: async () => { - await driver.findElement(By.css('#mystd-tab')).click(); - console.log('----->| NEXT ACTION: Clicked My Standards tab'); - - //Wait until the element exists in the DOM - const myStandardsDropdown = await driver.wait( - until.elementLocated(By.css('#stdparent')), - 30000 - ); - - //Wait until it becomes visible - await driver.wait( - until.elementIsVisible(myStandardsDropdown), - 30000 - ); - } - }, - - //Dashboard - My Standards Widget title (active) - { - description: 'Validate Dashboard Semantic Standards Comparison Widget title text, color, and size', - action: async () => { - const multipleChecks = 'My Standards Widget title (active)'; - const element = await driver.findElement(By.css('#mystd-tab')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'My Standards') { - console.log('Passed: Dashboard - Semantic Standards Comparison Widget title matched as expected'); - } else { - errors.push(`Expected: Dashboard - "Semantic Standards Comparison"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - Semantic Standards Comparison Widget title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Semantic Standards Comparison Widget title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '15px') { - console.log('Passed: Dashboard - Semantic Standards Comparison Widget title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Semantic Standards Comparison Widget title text font-size "15px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Dashboard - Semantic Standards Comparison Widget title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Semantic Standards Comparison Widget title text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - Other Available Stndards tab title - { - description: 'Validate Dashboard - Other Available Stndards tab title text, color, and size', - action: async () => { - const multipleChecks = 'Other Available Stndards tab title'; - const element = await driver.findElement(By.css('#availstd-tab')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Other Available Standards') { - console.log('Passed: Dashboard - Other Available Standards tab title matched as expected'); - } else { - errors.push(`Expected: Dashboard - "Other Available Standards"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - Other Available Standards tab title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards tab title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '15px') { - console.log('Passed: Dashboard - Other Available Standards tab title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards tab title text font-size "15px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(182, 186, 181, 1)') { - console.log('Passed: Dashboard - Other Available Standards tab title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - Other Available Standards tab title text color "rgba(182, 186, 181, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards dropdown - { - description: 'Validate Dashboard - My Standards dropdown list and value', - action: async () => { - const multipleChecks = 'My Standards dropdown list'; - const elementDropdown = await driver.findElement(By.css('#stdparent')); - const selectedOption = await elementDropdown.findElement(By.css('option:checked')); - - const elementText = await selectedOption.getText(); - const elementFont = await selectedOption.getCssValue('font-family'); - const elementSize = await selectedOption.getCssValue('font-size'); - const elementColor = await selectedOption.getCssValue('color'); - - const options = await elementDropdown.findElements(By.css('option')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'United States Standards') { - console.log('Passed: Dashboard - My Standards dropdown text matched as expected'); - } else { - throw new Error(`Expected: Dashboard - My Standards: "United States Standards"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards dropdown font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards dropdown font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Dashboard - My Standards dropdown font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards dropdown font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Dashboard - My Standards dropdown color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards dropdown color: "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - const expected = [ - 'ACTFL', - 'Australia', - 'California', - 'Canada', - 'Common Core Standards', - 'Creating Org', - 'Demo Client Standards', - 'Demo Standards', - 'New Folder', - 'QA Client Test Frameworks', - 'United States Standards', - 'WIDA' - ]; - - const actual = []; - - for (const opt of options) { - const text = (await opt.getText()).trim(); - actual.push(text); - } - - if (JSON.stringify(actual) === JSON.stringify(expected)) { - console.log('Passed: Dashboard - My Standards Dropdown list matched as expected'); - } else { - throw new Error(`Expected: Dashboard - My Standards Dropdown list: ${JSON.stringify(expected)}, Actual: ${JSON.stringify(actual)}`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards Organization column title - { - description: 'Validate Dashboard - My Standards Organization column title, text, and font size', - action: async () => { - const multipleChecks = 'My Standards Organization column title' - const element = await driver.findElement(By.css('.table:nth-child(2) th:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Organization') { - console.log('Passed: Dashboard - My Standards Organization column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards "Organization" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Organization column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Organization column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: Dashboard - My Standards Organization column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Organization column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: Dashboard - My Standards Organization column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Organization column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards Export column title - { - description: 'Validate Dashboard - My Standards Export column title, text, and font size', - action: async () => { - const multipleChecks = 'My Standards Export column title'; - const element = await driver.findElement(By.css('.table:nth-child(2) > thead .text-center:nth-child(2)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Export') { - console.log('Passed: Dashboard - My Standards Export column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards "Export" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Export column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Export column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: Dashboard - My Standards Export column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Export column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: Dashboard - My Standards Export column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Export column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards Manage column title - { - description: 'Validate Dashboard - My Standards Manage column title, text, and font size', - action: async () => { - const multipleChecks = 'My Standards Manage column title'; - const element = await driver.findElement(By.css('.text-center:nth-child(3)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Manage') { - console.log('Passed: Dashboard - My Standards Manage column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards "Manage" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Manage column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Manage column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: Dashboard - My Standards Manage column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Manage column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: Dashboard - My Standards Manage column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Manage column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards More Info column title, - { - description: 'Validate Dashboard - My Standards More Info column title, text, and font size', - action: async () => { - const multipleChecks = 'My Standards More Info column title'; - const element = await driver.findElement(By.css('.table-sm > thead .text-center:nth-child(4)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'More Info') { - console.log('Passed: Dashboard - My Standards More Info column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards "More Info" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards More Info column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards More Info column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: Dashboard - My Standards More Info column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards More Info column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: Dashboard - My Standards More Info column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards More Info column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards View column title - { - description: 'Validate Dashboard - My Standards View column title, text, and font size', - action: async () => { - const multipleChecks = 'My Standards View column title'; - const element = await driver.findElement(By.css('thead .text-center:nth-child(5)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'View') { - console.log('Passed: Dashboard - My Standards View column title matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards "View" column title; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards View column title font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards View column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: Dashboard - My Standards View column title text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards View column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: Dashboard - My Standards View column title text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards View column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards = Alabama - { - description: 'Validate Dashboard - My Standards Organization = Alabama Standards text', - action: async () => { - const multipleChecks = 'My Standards Organization - Alabama'; - const element = await driver.findElement(By.css('#stdbody > tr:nth-child(1) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementExportIcon = await driver.findElement(By.css('#stdbody > tr:nth-child(1) > .text-center:nth-child(2) img')); - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#stdbody > tr:nth-child(1) > td:nth-child(4) > a')).getAttribute('title'); - const elementViewIcon = await driver.findElement(By.css('tr:nth-child(1) > .text-center:nth-child(5) img')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Alabama') { - console.log("Passed: Dashboard - My Standards Alabama text matched as expected"); - } else { - throw new Error(`Expected: Dashboard - My Standards text: "Alabama"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Alabama text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Alabama text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - My Standards Alabama text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Alabama text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - My Standards Alabama text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Alabama text color: "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //export icon - if (elementExportIcon) { - console.log('Passed: Dashboard - My Standards Alabama - Export icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Alabama - Export icon not found'); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - My Standards Alabama icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: ashboard - My Standards Alabama: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //view icon - if (elementViewIcon) { - console.log('Passed: Dashboard - My Standards Alabama - View icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Alabama - View icon not found'); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards = Arizona - { - description: 'Validate Dashboard - My Standards Organization = Arizona Standards text', - action: async () => { - const multipleChecks = 'My Standards Organization - Arizona'; - const element = await driver.findElement(By.css('#stdbody > tr:nth-child(2) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementExportIcon = await driver.findElement(By.css('#stdbody > tr:nth-child(2) > .text-center:nth-child(2) img')); - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#stdbody > tr:nth-child(2) > td:nth-child(4) > a')).getAttribute('title'); - const elementViewIcon = await driver.findElement(By.css('tr:nth-child(2) > .text-center:nth-child(5) img')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Arizona') { - console.log("Passed: Dashboard - My Standards Arizona text matched as expected"); - } else { - throw new Error(`Expected: Dashboard - My Standards text: "Arizona"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Arizona text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Arizona text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - My Standards Arizona text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Arizona text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - My Standards Arizona text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Arizona text color: "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //export icon - if (elementExportIcon) { - console.log('Passed: Dashboard - My Standards Arizona - Export icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Arizona - Export icon not found'); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - My Standards Arizona icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: ashboard - My Standards Arizona: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //view icon - if (elementViewIcon) { - console.log('Passed: Dashboard - My Standards Arizona - View icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Arizona - View icon not found'); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards = California - { - description: 'Validate Dashboard - My Standards Organization = California Standards text', - action: async () => { - const multipleChecks = 'My Standards Organization - California'; - const element = await driver.findElement(By.css('#stdbody > tr:nth-child(3) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementExportIcon = await driver.findElement(By.css('#stdbody > tr:nth-child(3) > .text-center:nth-child(2) img')); - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#stdbody > tr:nth-child(3) > td:nth-child(4) > a')).getAttribute('title'); - const elementViewIcon = await driver.findElement(By.css('tr:nth-child(3) > .text-center:nth-child(5) img')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'California') { - console.log("Passed: Dashboard - My Standards California text matched as expected"); - } else { - throw new Error(`Expected: Dashboard - My Standards text: "California"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards California text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards California text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - My Standards California text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards California text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - My Standards California text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards California text color: "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //export icon - if (elementExportIcon) { - console.log('Passed: Dashboard - My Standards California - Export icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards California - Export icon not found'); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - My Standards California icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: ashboard - My Standards California: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //view icon - if (elementViewIcon) { - console.log('Passed: Dashboard - My Standards California - View icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards California - View icon not found'); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Dashboard - My Standards = Florida - { - description: 'Validate Dashboard - My Standards Organization = Florida Standards text', - action: async () => { - const multipleChecks = 'My Standards Organization - Florida'; - const element = await driver.findElement(By.css('#stdbody > tr:nth-child(4) > td:nth-child(1)')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - const elementExportIcon = await driver.findElement(By.css('#stdbody > tr:nth-child(4) > .text-center:nth-child(2) img')); - const elementMoreInfoIconTooltip = await driver.findElement(By.css('#stdbody > tr:nth-child(4) > td:nth-child(4) > a')).getAttribute('title'); - const elementViewIcon = await driver.findElement(By.css('tr:nth-child(4) > .text-center:nth-child(5) img')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Florida') { - console.log("Passed: Dashboard - My Standards Florida text matched as expected"); - } else { - throw new Error(`Expected: Dashboard - My Standards text: "Florida"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: Dashboard - My Standards Florida text font-family matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Florida text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14.3px') { - console.log('Passed: Dashboard - My Standards Florida text font-size matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Florida text font-size "14.3px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Dashboard - My Standards Florida text color matched as expected'); - } else { - errors.push(`Expected: Dashboard - My Standards Florida text color: "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //export icon - if (elementExportIcon) { - console.log('Passed: Dashboard - My Standards Florida - Export icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Florida - Export icon not found'); - } - - //more info icon tool-tip - if (elementMoreInfoIconTooltip === 'View Detail Information') { - console.log('Passed: Dashboard - My Standards Florida icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: ashboard - My Standards Florida: "View Detail Information"; Actual: "${elementMoreInfoIconTooltip}"`); - } - - //view icon - if (elementViewIcon) { - console.log('Passed: Dashboard - My Standards Florida - View icon is present'); - } else { - errors.push('Expected: Dashboard - My Standards Florida - View icon not found'); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //NEXT ACTION - { - description: 'Dashboard - Click Alabama Export icon', - action: async () => { - await driver.findElement(By.css('#stdbody > tr:nth-child(1) > .text-center:nth-child(2) img')).click(); - console.log('----->| NEXT ACTION: Clicked Alabama Export icon'); - - //Wait until the modal title is located AND visible - await driver.wait(async () => { - try { - const element = await driver.findElement(By.css('.modal-lg .modal-title')); - return await element.isDisplayed(); - } catch (e) { - return false; //Element not ready yet, keep waiting - } - }, 20000, 'Modal did not become visible within 20 seconds'); - - console.log('Passed: DIV - Loaded successfully'); - } - }, - - //EXPORT STANDARD DIV - //DIV - Export Standards title - { - description: 'Validate DIV - Export Standards title text, color, and size', - action: async () => { - const multipleChecks = 'DIV - Export Standards title'; - const element = await driver.findElement(By.css('.modal-lg .modal-title')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Export Standards') { - console.log('Passed: DIV - Export Standards title matched as expected'); - } else { - errors.push(`Expected: DIV - "Export Standards"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: DIV - Export Standards title text font-family matched as expected'); - } else { - errors.push(`Expected: DIV - Export Standards title text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '18px') { - console.log('Passed: DIV - Export Standards title text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - Export Standards title text font-size "18px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: DIV - Export Standards title text color matched as expected'); - } else { - errors.push(`Expected: DIV - Export Standards title text color "rgba(40, 39, 90, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - Alabama sub-title - { - description: 'Validate DIV - Alabama sub-title text, color, and size', - action: async () => { - const multipleChecks = 'DIV - Alabama sub-title'; - const element = await driver.findElement(By.css('p > b')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Alabama') { - console.log('Passed: DIV - Alabama sub-title matched as expected'); - } else { - errors.push(`Expected: DIV - sub-title "Alabama"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: DIV - Alabama sub-title text font-family matched as expected'); - } else { - errors.push(`Expected: DIV - Alabama sub-title text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: DIV - Alabama sub-title text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - Alabama sub-title text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: DIV - Alabama sub-title text color matched as expected'); - } else { - errors.push(`Expected: DIV - Alabama sub-title text color "rgba(40, 39, 90, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - Alabama Standards Subject label - { - description: 'Validate DIV - Alabama Standards Subject label text, color, and size', - action: async () => { - const multipleChecks = 'DIV - Alabama Standards Subject label'; - const element = await driver.findElement(By.css('.form-row:nth-child(2) > .form-group:nth-child(1) > label')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Subject') { - console.log('Passed: DIV - Alabama Standards Subject label matched as expected'); - } else { - errors.push(`Expected: DIV - "Subject" label; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: DIV - Alabama Standards Subject label text font-family matched as expected'); - } else { - errors.push(`Expected: DIV - Alabama Standards Subject label text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '15px') { - console.log('Passed: DIV - Alabama Standards Subject label text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - Alabama Standards Subject label text font-size "15px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: DIV - Alabama Standards Subject label text color matched as expected'); - } else { - errors.push(`Expected: DIV - Alabama Standards Subject label text color "rgba(40, 39, 90, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - Subject dropdown {custom-select} - { - description: 'Validate DIV - Subject dropdown list and value', - action: async () => { - const multipleChecks = 'DIV - Subject dropdown'; - const elementDropdown = await driver.findElement(By.css('#exsubject')); - const selectedOption = await elementDropdown.findElement(By.css('option:checked')); - - const elementText = await selectedOption.getText(); - const elementFont = await selectedOption.getCssValue('font-family'); - const elementSize = await selectedOption.getCssValue('font-size'); - const elementColor = await selectedOption.getCssValue('color'); - - const options = await elementDropdown.findElements(By.css('option')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Choose a subject') { - console.log('Passed: DIV - Subject dropdown text matched as expected'); - } else { - throw new Error(`Expected: DIV - Subject: "Choose a subject"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: DIV - Subject dropdown font-family matched as expected'); - } else { - errors.push(`Expected: DIV - Subject dropdown font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: DIV - Subject dropdown font-size matched as expected'); - } else { - errors.push(`Expected: DIV - Subject dropdown font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: DIV - Subject dropdown color matched as expected'); - } else { - errors.push(`Expected: DIV - Subject dropdown color: "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - const expectedList = [ - 'Choose a subject', - 'Health and PE', - 'Language Arts', - 'Mathematics', - 'Science', - 'Social Studies', - 'Technology Education' - ]; - - const actual = []; - - for (const opt of options) { - const text = (await opt.getText()).trim(); - actual.push(text); - } - - if (JSON.stringify(actual) === JSON.stringify(expectedList)) { - console.log('Passed: DIV - Subject Dropdown list matched as expected'); - } else { - errors.push(`Expected: DIV - Subject Dropdown list: ${JSON.stringify(expectedList)}, Actual: ${JSON.stringify(actual)}`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - Alabama Standards Format label - { - description: 'Validate DIV - Alabama Standards Format label text, color, and size', - action: async () => { - const multipleChecks = 'DIV - Alabama Standards Format label'; - const element = await driver.findElement(By.css('.form-row:nth-child(2) > .form-group:nth-child(2) > label')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Format') { - console.log('Passed: DIV - Alabama Standards Format label matched as expected'); - } else { - errors.push(`Expected: DIV - "Format" label; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: DIV - Alabama Standards Format label font-family matched as expected'); - } else { - errors.push(`Expected: DIV - Alabama Standards Format label font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '15px') { - console.log('Passed: DIV - Alabama Standards Format label text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - Alabama Standards Format label text font-size "15px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: DIV - Alabama Standards Format label text color matched as expected'); - } else { - errors.push(`Expected: DIV - Alabama Standards Format label text color "rgba(40, 39, 90, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - Format dropdown - { - description: 'Validate DIV - Format dropdown list and value', - action: async () => { - const multipleChecks = 'DIV - Format dropdown'; - const elementDropdown = await driver.findElement(By.css('#exformat')); - const selectedOption = await elementDropdown.findElement(By.css('option:checked')); - - const elementText = await selectedOption.getText(); - const elementFont = await selectedOption.getCssValue('font-family'); - const elementSize = await selectedOption.getCssValue('font-size'); - const elementColor = await selectedOption.getCssValue('color'); - - const options = await elementDropdown.findElements(By.css('option')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'CSV') { - console.log('Passed: DIV - Format dropdown text matched as expected'); - } else { - throw new Error(`Expected: DIV - Format: "CSV"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: DIV - Format dropdown font-family matched as expected'); - } else { - errors.push(`Expected: DIV - Format dropdown font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: DIV - Format dropdown font-size matched as expected'); - } else { - errors.push(`Expected: DIV - Format dropdown font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: DIV - Format dropdown color matched as expected'); - } else { - errors.push(`Expected: DIV - Format dropdown color: "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - const expectedList = [ - 'CSV', - 'JSON' - ]; - - const actual = []; - - for (const opt of options) { - const text = (await opt.getText()).trim(); - actual.push(text); - } - - if (JSON.stringify(actual) === JSON.stringify(expectedList)) { - console.log('Passed: DIV - Format Dropdown list matched as expected'); - } else { - errors.push(`Expected: DIV - Format Dropdown list: ${JSON.stringify(expectedList)}, Actual: ${JSON.stringify(actual)}`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - Grades label - { - description: 'Validate DIV - Grades label text, color, and size', - action: async () => { - const multipleChecks = 'DIV - Grades label'; - const element = await driver.findElement(By.css('.col-md-12:nth-child(1) > label')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Grades') { - console.log('Passed: DIV - Grades label matched as expected'); - } else { - errors.push(`Expected: DIV - "Grades" label; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: DIV - Grades label font-family matched as expected'); - } else { - errors.push(`Expected: DIV - Grades label font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '15px') { - console.log('Passed: DIV - Grades label text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - Grades label text font-size "15px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: DIV - Grades label text color matched as expected'); - } else { - errors.push(`Expected: DIV - Grades label text color "rgba(40, 39, 90, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - Grades dropdown - { - description: 'Validate DIV - Grades dropdown list and value', - action: async () => { - const multipleChecks = 'DIV - Grades dropdown'; - const elementDropdown = await driver.findElement(By.css('#exgrades')); - - const elementText = await elementDropdown.getText(); - const elementFont = await elementDropdown.getCssValue('font-family'); - const elementSize = await elementDropdown.getCssValue('font-size'); - const elementColor = await elementDropdown.getCssValue('color'); - - const options = await elementDropdown.findElements(By.css('option')); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Please select a subject first') { - console.log('Passed: DIV - Grades dropdown text matched as expected'); - } else { - throw new Error(`Expected: DIV - Grades: "Please select a subject first"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: DIV - Grades dropdown font-family matched as expected'); - } else { - errors.push(`Expected: DIV - Grades dropdown font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: DIV - Grades dropdown font-size matched as expected'); - } else { - errors.push(`Expected: DIV - Grades dropdown font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: DIV - Grades dropdown color matched as expected'); - } else { - errors.push(`Expected: DIV - Grades dropdown color: "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - const expectedList = [ - 'Please select a subject first' - ]; - - const actual = []; - - for (const opt of options) { - const text = (await opt.getText()).trim(); - actual.push(text); - } - - if (JSON.stringify(actual) === JSON.stringify(expectedList)) { - console.log('Passed: DIV - Grades Dropdown list matched as expected'); - } else { - errors.push(`Expected: DIV - Grades Dropdown list: ${JSON.stringify(expectedList)}, Actual: ${JSON.stringify(actual)}`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - Download button - { - description: 'Validate DIV - Download button icon, text, and color', - action: async () => { - const multipleChecks = 'DIV - Download button'; - const elementIcon = await driver.findElement(By.css('#exsubmit > .fa')); - const element = await driver.findElement(By.css('#exsubmit')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - const elementButtonColor = await element.getCssValue('background-color'); - - //Track all errors - const errors = []; - - //icon - if (elementIcon) { - console.log('Passed: DIV - Download button icon is present'); - } else { - errors.push('DIV - Download button icon was not found'); - } - - //text - if (elementText === 'Download') { - console.log('Passed: DIV - Download button text matched as expected'); - } else { - errors.push(`Expected: DIV - Button text: "Download"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: DIV - Download button text font-family matched as expected'); - } else { - errors.push(`Expected: DIV - Download button text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '16px') { - console.log('Passed: DIV - Download button text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - Download button text font-size "16px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(255, 255, 255, 1)') { - console.log('Passed: DIV - Download button text color matched as expected'); - } else { - errors.push(`Expected: DIV - Download button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementColor}"`); - } - - //button color - if (elementButtonColor === 'rgba(48, 200, 172, 1)') { - console.log('Passed: DIV - Download button background color matched as expected'); - } else { - errors.push(`Expected: DIV - Download button background color: "rgba(48, 200, 172, 1)"; Actual: "${elementButtonColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - Close button - { - description: 'Validate DIV - Close button text, style, font, and color', - action: async () => { - const multipleChecks = 'DIV - Close button'; - const element = await driver.findElement(By.css('#modalclose')); - - //Get text, font, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - const elementButtonColor = await element.getCssValue('background-color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Close') { - console.log('Passed: DIV - Close button text matched as expected'); - } else { - errors.push(`Expected: DIV - Button text: "Close"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: DIV - Close button text font-family matched as expected'); - } else { - errors.push(`Expected: DIV - Close button text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '16px') { - console.log('Passed: DIV - Close button text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - Close button text font-size "16px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: DIV - Close button text color matched as expected'); - } else { - errors.push(`Expected: DIV - Close button text color: "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - //button color - if (elementButtonColor === 'rgba(0, 0, 0, 0)') { - console.log('Passed: DIV - Close button background color matched as expected'); - } else { - errors.push(`Expected: DIV - Close button background color: "rgba(0, 0, 0, 0)"; Actual: "${elementButtonColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //NEXT ACTION - { - description: 'DIV - Click Export button', - action: async () => { - await driver.findElement(By.css('#exsubmit')).click(); - console.log('----->| NEXT ACTION: Clicked Export button'); - - //Wait until the modal title is located AND visible - await driver.wait(async () => { - try { - const element = await driver.findElement(By.css('#metawarn > b')); - return await element.isDisplayed(); - } catch (e) { - return false; //Element not ready yet, keep waiting - } - }, 20000, 'Validation text not visible within 20 seconds'); - - console.log('Passed: DIV - Validation message appeared'); - } - }, - - //DIV - Validation - { - description: 'Validate DIV - Validation text, color, and size', - action: async () => { - const element = await driver.findElement(By.css('#metawarn > b')); - - //Get text, color, and size - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color') - - //Track all errors - const errors = []; - - //text - if (elementText === 'A subject and at least one grade must be selected.') { - console.log('Passed: DIV - Validation text matched as expected'); - } else { - errors.push(`Expected: DIV - Validation text: "A subject and at least one grade must be selected."; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: DIV - Validation text font-family matched as expected'); - } else { - errors.push(`Expected: DIV - Validation text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: DIV - Validation text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - Validation text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(220, 53, 69, 1)') { - console.log('Passed: DIV - Validation text color matched as expected'); - } else { - errors.push(`Expected: DIV - Validation text color: "rgba(220, 53, 69, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift('Multiple validation checks did not pass'); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //NEXT ACTION - { - description: 'Select subject and grade', - action: async () => { - //Select "Mathematics" from dropdown - await driver.findElement(By.css('#exsubject')).click(); - await driver.sleep(2000); - await driver.findElement(By.css('#exsubject > option:nth-child(4)')).click(); - console.log('----->| NEXT ACTION: Selected Subject - Mathematics'); - - //Wait for the X clear icon (Select2 uses this class) - const clearGradesIcon = await driver.wait( - until.elementLocated(By.css('#exgrades + span .select2-selection__clear')), - 20000 - ); - - //Wait until visible - await driver.wait( - until.elementIsVisible(clearGradesIcon), - 20000 - ); - - //Click to clear grades - await clearGradesIcon.click(); - await driver.sleep(1000); - console.log('----->| NEXT ACTION: Clicked Grades X clear icon'); - - await driver.findElement(By.xpath("//li[contains(text(), '9')]")).click(); - await driver.sleep(1000); - - await driver.findElement(By.xpath("//li[contains(text(), '10')]")).click(); - await driver.sleep(1000); - - await driver.findElement(By.xpath("//li[contains(text(), '11')]")).click(); - await driver.sleep(1000); - - await driver.findElement(By.xpath("//li[contains(text(), '12')]")).click(); - await driver.sleep(1000); - - //Click away from dropdown list - await driver.findElement(By.css('#exform > div:nth-child(3) > div > span')).click(); - await driver.sleep(1000); - - console.log('----->| NEXT ACTION: Selected grades: 9, 10, 11, and 12'); - }, - }, - - //DIV - Grade 9 - { - description: 'Validate DIV - Grade 9', - action: async () => { - const multipleChecks = 'DIV - Grade 9'; - const elementIconToolTip = await driver.findElement(By.css('#select2-exgrades-container > li:nth-child(1) > button')).getAttribute('title'); - const element = await driver.findElement(By.css('#select2-exgrades-container > li:nth-child(1)')); - - const elementText = await element.getText(); - const elementToolTip = await element.getAttribute('title'); - - //Track all errors - const errors = []; - - //icon tool-tip - if (elementIconToolTip === 'Remove item') { - console.log('Passed: DIV - Grade 9 icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: DIV - Grade 9 icon tool-tip text: "Remove item"; Actual: "${elementIconToolTip}"`); - } - - //text - if (elementText.includes('9')) { - console.log('Passed: DIV - Grades selection included "9" text matched as expected'); - } else { - throw new Error(`Expected: DIV - Grades selection: "9"; Actual: "${elementText}"`); - } - - //tool-tip - if (elementToolTip === '9') { - console.log('Passed: DIV - Grade 9 tool-tip text matched as expected'); - } else { - errors.push(`Expected: DIV - Grade 9 tool-tip text: "9"; Actual: "${elementToolTip}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - Grade 10 - { - description: 'Validate DIV - Grade 10', - action: async () => { - const multipleChecks = 'DIV - Grade 10'; - const elementIconToolTip = await driver.findElement(By.css('#select2-exgrades-container > li:nth-child(2) > button')).getAttribute('title'); - const element = await driver.findElement(By.css('#select2-exgrades-container > li:nth-child(2)')); - - const elementText = await element.getText(); - const elementToolTip = await element.getAttribute('title'); - - //Track all errors - const errors = []; - - //icon tool-tip - if (elementIconToolTip === 'Remove item') { - console.log('Passed: DIV - Grade 10 icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: DIV - Grade 10 icon tool-tip text: "Remove item"; Actual: "${elementIconToolTip}"`); - } - - //text - if (elementText.includes('10')) { - console.log('Passed: DIV - Grades selection included "10" text matched as expected'); - } else { - throw new Error(`Expected: DIV - Grades selection: "10"; Actual: "${elementText}"`); - } - - //tool-tip - if (elementToolTip === '10') { - console.log('Passed: DIV - Grade 10 tool-tip text matched as expected'); - } else { - errors.push(`Expected: DIV - Grade 10 tool-tip text: "9"; Actual: "${elementToolTip}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - Grade 11 - { - description: 'Validate DIV - Grade 11', - action: async () => { - const multipleChecks = 'DIV - Grade 11'; - const elementIconToolTip = await driver.findElement(By.css('#select2-exgrades-container > li:nth-child(3) > button')).getAttribute('title'); - const element = await driver.findElement(By.css('#select2-exgrades-container > li:nth-child(3)')); - - const elementText = await element.getText(); - const elementToolTip = await element.getAttribute('title'); - - //Track all errors - const errors = []; - - //icon tool-tip - if (elementIconToolTip === 'Remove item') { - console.log('Passed: DIV - Grade 11 icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: DIV - Grade 11 icon tool-tip text: "Remove item"; Actual: "${elementIconToolTip}"`); - } - - //text - if (elementText.includes('11')) { - console.log('Passed: DIV - Grades selection included "11" text matched as expected'); - } else { - throw new Error(`Expected: DIV - Grades selection: "11"; Actual: "${elementText}"`); - } - - //tool-tip - if (elementToolTip === '11') { - console.log('Passed: DIV - Grade 11 tool-tip text matched as expected'); - } else { - errors.push(`Expected: DIV - Grade 11 tool-tip text: "9"; Actual: "${elementToolTip}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - Grade 12 - { - description: 'Validate DIV - Grade 12', - action: async () => { - const multipleChecks = 'DIV - Grade 12'; - const elementIconToolTip = await driver.findElement(By.css('#select2-exgrades-container > li:nth-child(4) > button')).getAttribute('title'); - const element = await driver.findElement(By.css('#select2-exgrades-container > li:nth-child(4)')); - - const elementText = await element.getText(); - const elementToolTip = await element.getAttribute('title'); - - //Track all errors - const errors = []; - - //icon tool-tip - if (elementIconToolTip === 'Remove item') { - console.log('Passed: DIV - Grade 12 icon tool-tip text matched as expected'); - } else { - errors.push(`Expected: DIV - Grade 12 icon tool-tip text: "Remove item"; Actual: "${elementIconToolTip}"`); - } - - //text - if (elementText.includes('12')) { - console.log('Passed: DIV - Grades selection included "12" text matched as expected'); - } else { - throw new Error(`Expected: DIV - Grades selection: "12"; Actual: "${elementText}"`); - } - - //tool-tip - if (elementToolTip === '12') { - console.log('Passed: DIV - Grade 12 tool-tip text matched as expected'); - } else { - errors.push(`Expected: DIV - Grade 12 tool-tip text: "9"; Actual: "${elementToolTip}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //NEXT ACTION - { - description: 'DIV - Click Export button then Close DIV', - action: async () => { - const multipleChecks = 'DIV - Processing status'; - - const errors = []; - - //Capture styles immediately via executeScript BEFORE clicking - //This sets up a MutationObserver to catch the spinner the moment it appears - await driver.executeScript(` - window._spinnerStyles = null; - const observer = new MutationObserver(() => { - const el = document.querySelector('#modalspin strong'); - if (el) { - const style = window.getComputedStyle(el); - const spinDiv = document.querySelector('#modalspin'); - const spinStyle = window.getComputedStyle(spinDiv); - if (spinStyle.display !== 'none') { - window._spinnerStyles = { - text: el.textContent.trim(), - fontFamily: style.getPropertyValue('font-family'), - fontSize: style.getPropertyValue('font-size'), - color: style.getPropertyValue('color') - }; - observer.disconnect(); - } - } - }); - observer.observe(document.querySelector('#modalspin'), { - attributes: true, - attributeFilter: ['style'] - }); - `); - - //Now click Export - await driver.findElement(By.css('#exsubmit')).click(); - console.log('----->| NEXT ACTION: Clicked Export button'); - - //Wait for MutationObserver to capture the styles - await driver.wait(async () => { - const captured = await driver.executeScript(`return window._spinnerStyles !== null;`); - return captured; - }, 15000, 'Processing spinner styles were not captured within 15 seconds'); - - //Get the captured styles - const styles = await driver.executeScript(`return window._spinnerStyles;`); - //console.log('----->| DEBUG captured styles:', JSON.stringify(styles)); - - //text - if (styles.text === 'Processing...') { - console.log('Passed: DIV - Status text matched as expected'); - } else { - errors.push(`Expected: DIV - Status text: "Processing..."; Actual: "${styles.text}"`); - } - - //font - if (styles.fontFamily === 'Poppins, sans-serif') { - console.log('Passed: DIV - Processing... status text font-family matched as expected'); - } else { - errors.push(`Expected: DIV - Processing... status text font-family "Poppins, sans-serif"; Actual: "${styles.fontFamily}"`); - } - - //size - if (styles.fontSize === '23.4px') { - console.log('Passed: DIV - Processing... status text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - Processing... status text font-size "23.4px"; Actual: "${styles.fontSize}"`); - } - - //color - if (styles.color === 'rgb(40, 39, 90)') { - console.log('Passed: DIV - Processing... status text color matched as expected'); - } else { - errors.push(`Expected: DIV - Processing... status text color "rgb(40, 39, 90)"; Actual: "${styles.color}"`); - } - - //Wait until processing is complete - await driver.wait(async () => { - try { - const spinDiv = await driver.findElement(By.css('#modalspin')); - return !(await spinDiv.isDisplayed()); - } catch (e) { - return true; - } - }, 30000, 'Processing... Status did not disappear within 30 seconds'); - console.log('Passed: Processing... Status is no longer visible as expected'); - - await driver.findElement(By.css('#modalclose')).click(); - console.log('----->| NEXT ACTION: Clicked Close button'); - - //Wait for page to load completely - await driver.wait(async () => { - const readyState = await driver.executeScript('return document.readyState'); - return readyState === 'complete'; - }, 20000, 'ExACT Dashboard did not fully load within 60 seconds'); - console.log('Passed: ExACT Dashboard loaded successfully'); - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //NEXT ACTION - { - description: 'Dashboard - Click Alabama More Info icon', - action: async () => { - await driver.findElement(By.css('#stdbody > tr:nth-child(1) > .text-center:nth-child(4) img')).click(); - console.log('----->| NEXT ACTION: Clicked Alabama More Info icon'); - - //Wait until the modal title is located AND visible - await driver.wait(async () => { - try { - const element = await driver.findElement(By.css('.modal-lg .modal-title')); - return await element.isDisplayed(); - } catch (e) { - return false; //Element not ready yet, keep waiting - } - }, 20000, 'Modal did not become visible within 20 seconds'); - - console.log('Passed: DIV - Loaded successfully'); - } - }, - - //Alabama Courses of Study DIV - //DIV - Alabama Courses of Study title - { - description: 'Validate DIV - Alabama Courses of Study title text, color, and size', - action: async () => { - const multipleChecks = 'DIV - Alabama Courses of Study title'; - const element = await driver.findElement(By.css('.modal-lg .modal-title')); - - //Get text, font, size, and color - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color') - - //Track all errors - const errors = []; - - //text - if (elementText === 'Alabama Courses of Study') { - console.log('Passed: DIV - Alabama Courses of Study title matched as expected'); - } else { - errors.push(`Expected: DIV - "Alabama Courses of Study"; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: DIV - Alabama Courses of Study title font-family matched as expected'); - } else { - errors.push(`Expected: DIV - Alabama Courses of Study title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '18px') { - console.log('Passed: DIV - Alabama Courses of Study title text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - Alabama Courses of Study title text font-size "18px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: DIV - Alabama Courses of Study title text color matched as expected'); - } else { - errors.push(`Expected: DIV - Alabama Courses of Study title text color "rgba(40, 39, 90, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - More Info Alabama sub-text - { - description: 'Validate DIV - More Info Alabma sub-text, color, and size', - action: async () => { - const multipleChecks = 'DIV - Alabama sut-text'; - const element = await driver.findElement(By.css('.modal-body > .notenabled')); - - //Get text, font, size, and color - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color') - - //Track all errors - const errors = []; - - //text - if (elementText === '*Not enabled in Profile. If you would like access to any of these standards sets, please Contact Us.') { - console.log('Passed: DIV - More Info Arizona sub-text matched as expected'); - } else { - errors.push(`Expected: DIV - sub-text "*Not enabled in Profile. If you would like access to any of these standards sets, please Contact Us."; Actual: "${elementText}"`); - } - - //font - if (elementFont === "Poppins, sans-serif") { - console.log('Passed: DIV - More Info Arizona sub-text font-family matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Arizona sub-text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '11.7px') { - console.log('Passed: DIV - More Info Arizona sub-text text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Arizona sub-text text font-size "11.7px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(119, 119, 119, 1)') { - console.log('Passed: DIV - More Info Arizona sub-text color matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Arizona sub-text text color "rgba(119, 119, 119, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Contact Us link - { - description: 'Validate DIV - More Info Alabama Contact Us link text, color, and size', - action: async () => { - const multipleChecks = 'DIV - Alabama Courses of Study Contact Us link'; - const element = await driver.findElement(By.linkText('Contact Us')); - - //Get text, font, size, color, url - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - const elementURL = await element.getAttribute('href'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Contact Us') { - console.log('Passed: DIV - More Info Alabama sub-text matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Alabama sub-text "Contact Us"; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: DIV - More Info Alabama sub-text font-family matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Alabama sub-text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '11.7px') { - console.log('Passed: DIV - More Info Alabama Contact Us link text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Alabama Contact Us link text font-size "11.7px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(48, 200, 172, 1)') { - console.log('Passed: DIV - More Info Alabama Contact Us link text color matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Alabama Contact Us link text color "rgba(48, 200, 172, 1)"'; Actual: "${elementColor}"`); - } - - //url - if (elementURL === 'https://edgate.com/contact-us') { - console.log('Passed: DIV - More Info Alabama Contact Us URL link matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Alabama Contact Us URL: "https://edgate.com/contact-us"; Actual: "${elementURL}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Subject column title - { - description: 'Validate DIV - More Info Alabama Subject column title text, color, and size', - action: async () => { - const multipleChecks = 'DIV - Alabama Courses of Study column title'; - const element = await driver.findElement(By.css('#myModal > div > div > div.modal-body > table > thead > tr > th:nth-child(1)')); - - //Get text, font, size, and color - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color') - - //Track all errors - const errors = []; - - //text - if (elementText === 'Subject') { - console.log('Passed: DIV - More Info Arizona Subject column title text matched as expected'); - } else { - errors.push(`Expected: DIV - Arizona column title "Subject"; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: DIV - More Info Arizona Subject column title font-family matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Arizona Subject column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: DIV - More Info Arizona Subject column title text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Arizona Subject column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: DIV - More Info Arizona Subject column title text color matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Arizona Subject column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Adopted column title - { - description: 'Validate DIV - More Info Alabama Adopted column title text, color, and size', - action: async () => { - const multipleChecks = 'DIV - Alabama Courses of Study Adopted column title'; - const element = await driver.findElement(By.css('#myModal > div > div > div.modal-body > table > thead > tr > th:nth-child(2)')); - - //Get text, font, size, and color - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color') - - //Track all errors - const errors = []; - - //text - if (elementText === 'Adopted') { - console.log('Passed: DIV - More Info Arizona Adopted column title text matched as expected'); - } else { - errors.push(`Expected: DIV - Arizona column title "Adopted"; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: DIV - More Info Arizona Adopted column title font-family matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Arizona Adopted column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: DIV - More Info Arizona Adopted column title text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Arizona Adopted column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: DIV - More Info Arizona Adopted column title text color matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Arizona Adopted column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Grades column title - { - description: 'Validate DIV - More Info Alabama Grades column title text, color, and size', - action: async () => { - const multipleChecks = 'DIV - Alabama Courses of Study Grades column title'; - const element = await driver.findElement(By.css('#myModal > div > div > div.modal-body > table > thead > tr > th:nth-child(3)')); - - //Get text, font, size, and color - const elementText = await element.getText(''); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color') - - //Track all errors - const errors = []; - - //text - if (elementText === 'Grades') { - console.log('Passed: DIV - More Info Arizona Grades column title text matched as expected'); - } else { - errors.push(`Expected: DIV - Arizona column title "Grades"; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: DIV - More Info Arizona Grades column title font-family matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Arizona Grades column title font-family "Poppins, sans-serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '14px') { - console.log('Passed: DIV - More Info Arizona Grades column title text font-size matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Arizona Grades column title text font-size "14px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(94, 105, 116, 1)') { - console.log('Passed: DIV - More Info Arizona Grades column title text color matched as expected'); - } else { - errors.push(`Expected: DIV - More Info Arizona Grades column title text color "rgba(94, 105, 116, 1)"'; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Row 1 label - { - description: 'Validate DIV - More Info Alabama Row 1 label text, font, color, and size', - action: async () => { - const multipleChecks = 'DIV - More Info Alabama Row 1 label'; - - const checks = [ - //Subject - { - selector: '.text-success:nth-child(1) > td:nth-child(1)', - label: 'Health and PE', - expected: { - text: 'Health and PE', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - }, - - //Adopted - { - selector: '.text-success:nth-child(1) > td:nth-child(2)', - label: '2019', - expected: { - text: '2019', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - }, - - //All Grades list - { - selector: '.text-success:nth-child(1) > td:nth-child(3)', - label: 'Grades List', - expected: { - text: 'K, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - } - ]; - - const allErrors = []; - - async function validateCell({ selector, label, expected }) { - const element = await driver.findElement(By.css(selector)); - - const actualText = await element.getText(); - const actualFont = await element.getCssValue('font-family'); - const actualSize = await element.getCssValue('font-size'); - const actualColor = await element.getCssValue('color'); - - const errors = []; - - //text - if (actualText === expected.text) { - console.log(`Passed: DIV - More Info Alabama Row 1 ${label} label text matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 1 "${expected.text}"; Actual: "${actualText}"`); - } - - //font - if (actualFont === expected.font) { - console.log(`Passed: DIV - More Info Alabama Row 1 ${label} label text font-family matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 1 "${expected.font}"; Actual: "${actualFont}"`); - } - - //size - if (actualSize === expected.size) { - console.log(`Passed: DIV - More Info Alabama Row 1 ${label} label text font-size matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 1 ${label} label text font-size "${expected.size}"; Actual: "${actualSize}"`); - } - - //color - if (actualColor === expected.color) { - console.log(`Passed: DIV - More Info Alabama Row 1 ${label} label text color matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 1 ${label} label text color "${expected.color}"; Actual: "${actualColor}"`); - } - - return errors; - } - - for (const check of checks) { - const errs = await validateCell(check); - allErrors.push(...errs); - } - - if (allErrors.length > 0) { - if (allErrors.length > 1) allErrors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - throw new Error(allErrors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Row 2 label - { - description: 'Validate DIV - More Info Alabama Row 2 label text, font, color, and size', - action: async () => { - const multipleChecks = 'DIV - More Info Alabama Row 2 label'; - - const checks = [ - //Subject - { - selector: '.text-success:nth-child(2) > td:nth-child(1)', - label: 'Language Arts', - expected: { - text: 'Language Arts', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - }, - - //Adopted - { - selector: '.text-success:nth-child(2) > td:nth-child(2)', - label: '2021/Effective 2022', - expected: { - text: '2021/Effective 2022', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - }, - - //All Grades list - { - selector: '.text-success:nth-child(2) > td:nth-child(3)', - label: 'Grades List', - expected: { - text: 'K, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - } - ]; - - const allErrors = []; - - async function validateCell({ selector, label, expected }) { - const element = await driver.findElement(By.css(selector)); - - const actualText = await element.getText(); - const actualFont = await element.getCssValue('font-family'); - const actualSize = await element.getCssValue('font-size'); - const actualColor = await element.getCssValue('color'); - - const errors = []; - - //text - if (actualText === expected.text) { - console.log(`Passed: DIV - More Info Alabama Row 2 ${label} label text matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 2 "${expected.text}"; Actual: "${actualText}"`); - } - - //font - if (actualFont === expected.font) { - console.log(`Passed: DIV - More Info Alabama Row 2 ${label} label text font matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 2 "${expected.font}"; Actual: "${actualFont}"`); - } - - //size - if (actualSize === expected.size) { - console.log(`Passed: DIV - More Info Alabama Row 2 ${label} label text font-size matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 2 ${label} label text font-size "${expected.size}"; Actual: "${actualSize}"`); - } - - //color - if (actualColor === expected.color) { - console.log(`Passed: DIV - More Info Alabama Row 2 ${label} label text color matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 2 ${label} label text color "${expected.color}"; Actual: "${actualColor}"`); - } - - return errors; - } - - for (const check of checks) { - const errs = await validateCell(check); - allErrors.push(...errs); - } - - if (allErrors.length > 0) { - if (allErrors.length > 1) allErrors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - throw new Error(allErrors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Row 3 label - { - description: 'Validate DIV - More Info Alabama Row 3 label text, color, and font size', - action: async () => { - const multipleChecks = 'DIV - More Info Alabama Row 3 label'; - - const checks = [ - //Subject - { - selector: '.text-success:nth-child(3) > td:nth-child(1)', - label: 'Mathematics', - expected: { - text: 'Mathematics', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - }, - - //Adopted - { - selector: '.text-success:nth-child(3) > td:nth-child(2)', - label: '2019/Impl. 2020', - expected: { - text: '2019/Impl. 2020', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - }, - - //All Grades list - { - selector: '.text-success:nth-child(3) > td:nth-child(3)', - label: 'Grades List', - expected: { - text: 'K, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - } - ]; - - const allErrors = []; - - async function validateCell({ selector, label, expected }) { - const element = await driver.findElement(By.css(selector)); - - const actualText = await element.getText(); - const actualFont = await element.getCssValue('font-family'); - const actualSize = await element.getCssValue('font-size'); - const actualColor = await element.getCssValue('color'); - - const errors = []; - - //text - if (actualText === expected.text) { - console.log(`Passed: DIV - More Info Alabama Row 3 ${label} label text matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 3 "${expected.text}"; Actual: "${actualText}"`); - } - - //font - if (actualFont === expected.font) { - console.log(`Passed: DIV - More Info Alabama Row 3 ${label} label text font matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 3 "${expected.font}"; Actual: "${actualFont}"`); - } - - //size - if (actualSize === expected.size) { - console.log(`Passed: DIV - More Info Alabama Row 3 ${label} label text font-size matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 3 ${label} label text font-size "${expected.size}"; Actual: "${actualSize}"`); - } - - //color - if (actualColor === expected.color) { - console.log(`Passed: DIV - More Info Alabama Row 3 ${label} label text color matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 3 ${label} label text color "${expected.color}"; Actual: "${actualColor}"`); - } - - return errors; - } - - for (const check of checks) { - const errs = await validateCell(check); - allErrors.push(...errs); - } - - if (allErrors.length > 0) { - if (allErrors.length > 1) allErrors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - throw new Error(allErrors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Row 4 label - { - description: 'Validate DIV - More Info Alabama Row 4 label text, color, and font size', - action: async () => { - const multipleChecks = 'DIV - More Info Alabama Row 4 label'; - - const checks = [ - //Subject - { - selector: '.text-success:nth-child(4) > td:nth-child(1)', - label: 'Science', - expected: { - text: 'Science', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - }, - - //Adopted - { - selector: '.text-success:nth-child(4) > td:nth-child(2)', - label: '2023', - expected: { - text: '2023', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - }, - - //All Grades list - { - selector: '.text-success:nth-child(4) > td:nth-child(3)', - label: 'Grades List', - expected: { - text: 'K, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - } - ]; - - const allErrors = []; - - async function validateCell({ selector, label, expected }) { - const element = await driver.findElement(By.css(selector)); - - const actualText = await element.getText(); - const actualFont = await element.getCssValue('font-family'); - const actualSize = await element.getCssValue('font-size'); - const actualColor = await element.getCssValue('color'); - - const errors = []; - - //text - if (actualText === expected.text) { - console.log(`Passed: DIV - More Info Alabama Row 4 ${label} label text matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 4 "${expected.text}"; Actual: "${actualText}"`); - } - - //font - if (actualFont === expected.font) { - console.log(`Passed: DIV - More Info Alabama Row 4 ${label} label text font matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 4 "${expected.font}"; Actual: "${actualFont}"`); - } - - //size - if (actualSize === expected.size) { - console.log(`Passed: DIV - More Info Alabama Row 4 ${label} label text font-size matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 4 ${label} label text font-size "${expected.size}"; Actual: "${actualSize}"`); - } - - //color - if (actualColor === expected.color) { - console.log(`Passed: DIV - More Info Alabama Row 4 ${label} label text color matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 4 ${label} label text color "${expected.color}"; Actual: "${actualColor}"`); - } - - return errors; - } - - for (const check of checks) { - const errs = await validateCell(check); - allErrors.push(...errs); - } - - if (allErrors.length > 0) { - if (allErrors.length > 1) allErrors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - throw new Error(allErrors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Row 5 label - { - description: 'Validate DIV - More Info Alabama Row 5 label text, color, and font size', - action: async () => { - const multipleChecks = 'DIV - More Info Alabama Row 5 label'; - - const checks = [ - //Subject - { - selector: '.text-success:nth-child(5) > td:nth-child(1)', - label: 'Social Studies', - expected: { - text: 'Social Studies', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - }, - - //Adopted - { - selector: '.text-success:nth-child(5) > td:nth-child(2)', - label: '2024', - expected: { - text: '2024', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - }, - - //All Grades list - { - selector: '.text-success:nth-child(5) > td:nth-child(3)', - label: 'Grades List', - expected: { - text: 'K, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - } - ]; - - const allErrors = []; - - async function validateCell({ selector, label, expected }) { - const element = await driver.findElement(By.css(selector)); - - const actualText = await element.getText(); - const actualFont = await element.getCssValue('font-family'); - const actualSize = await element.getCssValue('font-size'); - const actualColor = await element.getCssValue('color'); - - const errors = []; - - //text - if (actualText === expected.text) { - console.log(`Passed: DIV - More Info Alabama Row 5 ${label} label text matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 5 "${expected.text}"; Actual: "${actualText}"`); - } - - //font - if (actualFont === expected.font) { - console.log(`Passed: DIV - More Info Alabama Row 5 ${label} label text font matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 5 "${expected.font}"; Actual: "${actualFont}"`); - } - - //size - if (actualSize === expected.size) { - console.log(`Passed: DIV - More Info Alabama Row 5 ${label} label text font-size matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 5 ${label} label text font-size "${expected.size}"; Actual: "${actualSize}"`); - } - - //color - if (actualColor === expected.color) { - console.log(`Passed: DIV - More Info Alabama Row 5 ${label} label text color matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 5 ${label} label text color "${expected.color}"; Actual: "${actualColor}"`); - } - - return errors; - } - - for (const check of checks) { - const errs = await validateCell(check); - allErrors.push(...errs); - } - - if (allErrors.length > 0) { - if (allErrors.length > 1) allErrors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - throw new Error(allErrors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Row 6 label - { - description: 'Validate DIV - More Info Alabama Row 6 label text, color, and font size', - action: async () => { - const multipleChecks = 'DIV - More Info Alabama Row 6 label'; - - const checks = [ - //Subject - { - selector: '.text-success:nth-child(6) > td:nth-child(1)', - label: 'Technology Education', - expected: { - text: 'Technology Education', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - }, - - //Adopted - { - selector: '.text-success:nth-child(6) > td:nth-child(2)', - label: '2025', - expected: { - text: '2025', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - }, - - //All Grades list - { - selector: '.text-success:nth-child(6) > td:nth-child(3)', - label: 'Grades List', - expected: { - text: 'K, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12', - font: 'Poppins, sans-serif', - color: 'rgba(40, 167, 69, 1)', - size: '14.3px' - } - } - ]; - - const allErrors = []; - - async function validateCell({ selector, label, expected }) { - const element = await driver.findElement(By.css(selector)); - - const actualText = await element.getText(); - const actualFont = await element.getCssValue('font-family'); - const actualSize = await element.getCssValue('font-size'); - const actualColor = await element.getCssValue('color'); - - const errors = []; - - //text - if (actualText === expected.text) { - console.log(`Passed: DIV - More Info Alabama Row 6 ${label} label text matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 6 "${expected.text}"; Actual: "${actualText}"`); - } - - //font - if (actualFont === expected.font) { - console.log(`Passed: DIV - More Info Alabama Row 6 ${label} label text font matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 6 "${expected.font}"; Actual: "${actualFont}"`); - } - - //size - if (actualSize === expected.size) { - console.log(`Passed: DIV - More Info Alabama Row 6 ${label} label text font-size matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 6 ${label} label text font-size "${expected.size}"; Actual: "${actualSize}"`); - } - - //color - if (actualColor === expected.color) { - console.log(`Passed: DIV - More Info Alabama Row 6 ${label} label text color matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 6 ${label} label text color "${expected.color}"; Actual: "${actualColor}"`); - } - - return errors; - } - - for (const check of checks) { - const errs = await validateCell(check); - allErrors.push(...errs); - } - - if (allErrors.length > 0) { - if (allErrors.length > 1) allErrors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - throw new Error(allErrors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Row 7 label - { - description: 'Validate DIV - More Info Alabama Row 7 label text, color, and font size', - action: async () => { - const multipleChecks = 'DIV - More Info Alabama Row 7 label'; - - const checks = [ - //Subject - { - selector: '.notenabled:nth-child(7) > td:nth-child(1)', - label: 'Arts Education*', - expected: { - text: 'Arts Education*', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - }, - - //Adopted - { - selector: '.notenabled:nth-child(7) > td:nth-child(2)', - label: '2017', - expected: { - text: '2017', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - }, - - //Grades - { - selector: '.notenabled:nth-child(7) > td:nth-child(3)', - label: 'Grades List', - expected: { - text: 'K, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - } - ]; - - const allErrors = []; - - async function validateCell({ selector, label, expected }) { - const element = await driver.findElement(By.css(selector)); - - const actualText = await element.getText(); - const actualFont = await element.getCssValue('font-family'); - const actualSize = await element.getCssValue('font-size'); - const actualColor = await element.getCssValue('color'); - - const errors = []; - - //text - if (actualText === expected.text) { - console.log(`Passed: DIV - More Info Alabama Row 7 ${label} label text matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 7 "${expected.text}"; Actual: "${actualText}"`); - } - - //font - if (actualFont === expected.font) { - console.log(`Passed: DIV - More Info Alabama Row 7 ${label} label text font matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 7 "${expected.font}"; Actual: "${actualFont}"`); - } - - //size - if (actualSize === expected.size) { - console.log(`Passed: DIV - More Info Alabama Row 7 ${label} label text font-size matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 7 ${label} label text font-size "${expected.size}"; Actual: "${actualSize}"`); - } - - //color - if (actualColor === expected.color) { - console.log(`Passed: DIV - More Info Alabama Row 7 ${label} label text color matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 7 ${label} label text color "${expected.color}"; Actual: "${actualColor}"`); - } - - return errors; - } - - for (const check of checks) { - const errs = await validateCell(check); - allErrors.push(...errs); - } - - if (allErrors.length > 0) { - if (allErrors.length > 1) allErrors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - throw new Error(allErrors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Row 8 label - { - description: 'Validate DIV - More Info Alabama Row 8 label text, color, and font size', - action: async () => { - const multipleChecks = 'DIV - More Info Alabama Row 8 label'; - - const checks = [ - //Subject - { - selector: '.notenabled:nth-child(8) > td:nth-child(1)', - label: 'Career Development*', - expected: { - text: 'Career Development*', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - }, - - //Adopted - { - selector: '.notenabled:nth-child(8) > td:nth-child(2)', - label: '2016', - expected: { - text: '2016', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - }, - - //All Grades list - { - selector: '.notenabled:nth-child(8) > td:nth-child(3)', - label: 'Grades List', - expected: { - text: '9, 10, 11, 12', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - } - ]; - - const allErrors = []; - - async function validateCell({ selector, label, expected }) { - const element = await driver.findElement(By.css(selector)); - - const actualText = await element.getText(); - const actualFont = await element.getCssValue('font-family'); - const actualSize = await element.getCssValue('font-size'); - const actualColor = await element.getCssValue('color'); - - const errors = []; - - //text - if (actualText === expected.text) { - console.log(`Passed: DIV - More Info Alabama Row 8 ${label} label text matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 8 "${expected.text}"; Actual: "${actualText}"`); - } - - //font - if (actualFont === expected.font) { - console.log(`Passed: DIV - More Info Alabama Row 8 ${label} label text font matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 8 "${expected.font}"; Actual: "${actualFont}"`); - } - - //size - if (actualSize === expected.size) { - console.log(`Passed: DIV - More Info Alabama Row 8 ${label} label text font-size matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 8 ${label} label text font-size "${expected.size}"; Actual: "${actualSize}"`); - } - - //color - if (actualColor === expected.color) { - console.log(`Passed: DIV - More Info Alabama Row 8 ${label} label text color matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 8 ${label} label text color "${expected.color}"; Actual: "${actualColor}"`); - } - - return errors; - } - - for (const check of checks) { - const errs = await validateCell(check); - allErrors.push(...errs); - } - - if (allErrors.length > 0) { - if (allErrors.length > 1) allErrors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - throw new Error(allErrors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Row 9 label text - { - description: 'Validate DIV - More Info Alabama Row 9 label text, color, and font size', - action: async () => { - const multipleChecks = 'DIV - More Info Alabama Row 9 label'; - - const checks = [ - //Subject - { - selector: '.notenabled:nth-child(9) > td:nth-child(1)', - label: 'Early Childhood Education*', - expected: { - text: 'Early Childhood Education*', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - }, - - //Adopted - { - selector: '.notenabled:nth-child(9) > td:nth-child(2)', - label: '2023', - expected: { - text: '2023', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - }, - - //Ages 3-5* - { - selector: '.notenabled:nth-child(9) .notenabled', - label: 'Ages 3-5*', - expected: { - text: 'Ages 3-5*', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '11.583px' - } - }, - - //All Grades list 1 - { - selector: '.notenabled:nth-child(2)', - label: 'Ages Birth to 12 months*', - expected: { - text: 'Ages Birth to 12 months*', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '11.583px' - } - }, - - //All Grades list 2 - { - selector: '.notenabled:nth-child(3)', - label: 'Ages 13 to 24 months*', - expected: { - text: 'Ages 13 to 24 months*', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '11.583px' - } - }, - - //All Grades list 3 - { - selector: '.notenabled:nth-child(4)', - label: 'Ages 25 to 36 months*', - expected: { - text: 'Ages 25 to 36 months*', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '11.583px' - } - } - ]; - - const allErrors = []; - - async function validateCell({ selector, label, expected }) { - const element = await driver.findElement(By.css(selector)); - - const actualText = await element.getText(); - const actualFont = await element.getCssValue('font-family'); - const actualSize = await element.getCssValue('font-size'); - const actualColor = await element.getCssValue('color'); - - const errors = []; - - //text - if (actualText === expected.text) { - console.log(`Passed: DIV - More Info Alabama Row 9 ${label} label text matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 9 "${expected.text}"; Actual: "${actualText}"`); - } - - //font - if (actualFont === expected.font) { - console.log(`Passed: DIV - More Info Alabama Row 9 ${label} label text font matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 9 "${expected.font}"; Actual: "${actualFont}"`); - } - - //size - if (actualSize === expected.size) { - console.log(`Passed: DIV - More Info Alabama Row 9 ${label} label text font-size matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 9 ${label} label text font-size "${expected.size}"; Actual: "${actualSize}"`); - } - - //color - if (actualColor === expected.color) { - console.log(`Passed: DIV - More Info Alabama Row 9 ${label} label text color matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 9 ${label} label text color "${expected.color}"; Actual: "${actualColor}"`); - } - - return errors; - } - - for (const check of checks) { - const errs = await validateCell(check); - allErrors.push(...errs); - } - - if (allErrors.length > 0) { - if (allErrors.length > 1) allErrors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - throw new Error(allErrors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Row 10 label text - { - description: 'Validate DIV - More Info Alabama Row 10 label text, color, and font size', - action: async () => { - const multipleChecks = 'DIV - More Info Alabama Row 10 label'; - - const checks = [ - //Subject - { - selector: '.notenabled:nth-child(10) > td:nth-child(1)', - label: 'English Language Learners*', - expected: { - text: 'English Language Learners*', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - }, - - //Adopted - { - selector: '.notenabled:nth-child(10) > td:nth-child(2)', - label: '2020', - expected: { - text: '2020', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - }, - - //All Grades list - { - selector: '.notenabled:nth-child(10) > td:nth-child(3)', - label: 'Grades List', - expected: { - text: 'K, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - } - ]; - - const allErrors = []; - - async function validateCell({ selector, label, expected }) { - const element = await driver.findElement(By.css(selector)); - - const actualText = await element.getText(); - const actualFont = await element.getCssValue('font-family'); - const actualSize = await element.getCssValue('font-size'); - const actualColor = await element.getCssValue('color'); - - const errors = []; - - //text - if (actualText === expected.text) { - console.log(`Passed: DIV - More Info Alabama Row 10 ${label} label text matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 10 "${expected.text}"; Actual: "${actualText}"`); - } - - //font - if (actualFont === expected.font) { - console.log(`Passed: DIV - More Info Alabama Row 10 ${label} label text font matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 10 "${expected.font}"; Actual: "${actualFont}"`); - } - - //size - if (actualSize === expected.size) { - console.log(`Passed: DIV - More Info Alabama Row 10 ${label} label text font-size matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 10 ${label} label text font-size "${expected.size}"; Actual: "${actualSize}"`); - } - - //color - if (actualColor === expected.color) { - console.log(`Passed: DIV - More Info Alabama Row 10 ${label} label text color matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 10 ${label} label text color "${expected.color}"; Actual: "${actualColor}"`); - } - - return errors; - } - - for (const check of checks) { - const errs = await validateCell(check); - allErrors.push(...errs); - } - - if (allErrors.length > 0) { - if (allErrors.length > 1) allErrors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - throw new Error(allErrors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Row 11 label - { - description: 'Validate DIV - More Info Alabama Row 11 label text, color, and font size', - action: async () => { - const multipleChecks = 'DIV - More Info Alabama Row 11 label'; - - const checks = [ - //Subject - { - selector: '.notenabled:nth-child(11) > td:nth-child(1)', - label: 'Social and Emotional Learning*', - expected: { - text: 'Social and Emotional Learning*', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - }, - - //Adopted - { - selector: '.notenabled:nth-child(11) > td:nth-child(2)', - label: '2013', - expected: { - text: '2013', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - }, - - //Pre K* - { - selector: '.notenabled:nth-child(11) .notenabled', - label: 'Pre K*', - expected: { - text: 'Pre K*', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '11.583px' - } - } - ]; - - const allErrors = []; - - async function validateCell({ selector, label, expected }) { - const element = await driver.findElement(By.css(selector)); - - const actualText = await element.getText(); - const actualFont = await element.getCssValue('font-family'); - const actualSize = await element.getCssValue('font-size'); - const actualColor = await element.getCssValue('color'); - - const errors = []; - - //text - if (actualText === expected.text) { - console.log(`Passed: DIV - More Info Alabama Row 11 ${label} label text matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 11 "${expected.text}"; Actual: "${actualText}"`); - } - - //font - if (actualFont === expected.font) { - console.log(`Passed: DIV - More Info Alabama Row 11 ${label} label text font matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 11 "${expected.font}"; Actual: "${actualFont}"`); - } - - //size - if (actualSize === expected.size) { - console.log(`Passed: DIV - More Info Alabama Row 11 ${label} label text font-size matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 11 ${label} label text font-size "${expected.size}"; Actual: "${actualSize}"`); - } - - //color - if (actualColor === expected.color) { - console.log(`Passed: DIV - More Info Alabama Row 11 ${label} label text color matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 11 ${label} label text color "${expected.color}"; Actual: "${actualColor}"`); - } - - return errors; - } - - for (const check of checks) { - const errs = await validateCell(check); - allErrors.push(...errs); - } - - if (allErrors.length > 0) { - if (allErrors.length > 1) allErrors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - throw new Error(allErrors.join('\n')); - } - } - }, - - //DIV - More Info Alabama Row 12 label text - { - description: 'Validate DIV - More Info Alabama Row 12 label text, color, and font size', - action: async () => { - const multipleChecks = 'DIV - More Info Alabama Row 12 label'; - - const checks = [ - //Subject - { - selector: '.notenabled:nth-child(12) > td:nth-child(1)', - label: 'World Languages*', - expected: { - text: 'World Languages*', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - }, - - //Adopted - { - selector: '.notenabled:nth-child(12) > td:nth-child(2)', - label: '2017', - expected: { - text: '2017', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - }, - - //All Grades list - { - selector: '.notenabled:nth-child(12) > td:nth-child(3)', - label: 'Grades List', - expected: { - text: 'K, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12', - font: 'Poppins, sans-serif', - color: 'rgba(119, 119, 119, 1)', - size: '12.87px' - } - } - ]; - - const allErrors = []; - - async function validateCell({ selector, label, expected }) { - const element = await driver.findElement(By.css(selector)); - - const actualText = await element.getText(); - const actualFont = await element.getCssValue('font-family'); - const actualSize = await element.getCssValue('font-size'); - const actualColor = await element.getCssValue('color'); - - const errors = []; - - //text - if (actualText === expected.text) { - console.log(`Passed: DIV - More Info Alabama Row 10 ${label} label text matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 10 "${expected.text}"; Actual: "${actualText}"`); - } - - //font - if (actualFont === expected.font) { - console.log(`Passed: DIV - More Info Alabama Row 10 ${label} label text font matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 10 "${expected.font}"; Actual: "${actualFont}"`); - } - - //size - if (actualSize === expected.size) { - console.log(`Passed: DIV - More Info Alabama Row 10 ${label} label text font-size matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 10 ${label} label text font-size "${expected.size}"; Actual: "${actualSize}"`); - } - - //color - if (actualColor === expected.color) { - console.log(`Passed: DIV - More Info Alabama Row 10 ${label} label text color matched as expected`); - } else { - errors.push(`Expected: DIV - More Info Alabama Row 10 ${label} label text color "${expected.color}"; Actual: "${actualColor}"`); - } - - return errors; - } - - for (const check of checks) { - const errs = await validateCell(check); - allErrors.push(...errs); - } - - if (allErrors.length > 0) { - if (allErrors.length > 1) allErrors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - throw new Error(allErrors.join('\n')); - } - } - }, - - //NEXT ACTION - { - description: 'Dashboard - Click DIV X icon', - action: async () => { - await driver.findElement(By.css('.modal-lg .modal-header span')).click(); - console.log('----->| NEXT ACTION: Clicked DIV X icon'); - - //Wait for page to load completely - await driver.wait(async () => { - const readyState = await driver.executeScript('return document.readyState'); - return readyState === 'complete'; - }, 20000, 'ExACT Dashboard did not fully load within 60 seconds'); - console.log('Passed: ExACT Dashboard loaded successfully'); - } - }, - - //NEXT ACTION - { - description: 'Dashboard - Click Alabama View icon', - action: async () => { - await driver.findElement(By.css('tr:nth-child(1) > .text-center:nth-child(5) img')).click(); - console.log('----->| NEXT ACTION: Clicked Alabama View icon'); - - //Wait for page readyState - await driver.wait(async () => { - const readyState = await driver.executeScript('return document.readyState'); - return readyState === 'complete'; - }, 30000, 'Browse standards page did not fully load within 30 seconds'); - - //Wait until the modal title is located AND visible - await driver.wait(async () => { - try { - const element = await driver.findElement(By.linkText('Content')); - return await element.isDisplayed(); - } catch (e) { - return false; //Element not ready yet, keep waiting - } - }, 20000, 'Content tab did not become visible within 20 seconds'); - - console.log('Passed: Content tab loaded successfully'); - } - }, - - //Content tab title - { - description: 'Validate Content tab title text, size, and color', - action: async () => { - const multipleChecks = 'Content tab title'; - const element = await driver.findElement(By.linkText('Content')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementTextFont = await element.getCssValue('font-family'); - const elementTextSize = await element.getCssValue('font-size'); - const elementTextColor = await element.getCssValue('color'); - const elementButtonColor = await element.getCssValue('background-color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Content') { - console.log('Passed: Content tab title text matched as expected'); - } else { - errors.push(`Expected: "Content"; Actual: "${elementText}"`); - } - - //font - if (elementTextFont === 'Poppins, sans-serif') { - console.log('Passed: Content tab title font-family matched as expected'); - } else { - errors.push(`Expected: Content tab title font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); - } - - //size - if (elementTextSize === '15px') { - console.log('Passed: Content tab title text font-size matched as expected'); - } else { - errors.push(`Expected: Content tab title text font-size "15px"; Actual: "${elementTextSize}"`); - } - - //color - if (elementTextColor === 'rgba(182, 186, 181, 1)') { - console.log('Passed: Content tab title text color matched as expected'); - } else { - errors.push(`Expected: Content tab title text color: "rgba(182, 186, 181, 1)"; Actual: "${elementTextColor}"`); - } - - //button color - if (elementButtonColor === 'rgba(0, 0, 0, 0)') { - console.log('Passed: Content tab background color matched as expected'); - } else { - errors.push(`Expected: Content tab background color: "rgba(0, 0, 0, 0)"; Actual: "${elementButtonColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Standards tab tab title (active) - { - description: 'Validate Standards tab title text, size, and color', - action: async () => { - const multipleChecks = 'By Standard tab title'; - const element = await driver.findElement(By.linkText('Standards')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementTextFont = await element.getCssValue('font-family'); - const elementTextSize = await element.getCssValue('font-size'); - const elementTextColor = await element.getCssValue('color'); - const elementButtonColor = await element.getCssValue('background-color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Standards') { - console.log('Passed: Standards tab title text matched as expected'); - } else { - errors.push(`Expected: "Standards"; Actual: "${elementText}"`); - } - - //font - if (elementTextFont === 'Poppins, sans-serif') { - console.log('Passed: Standards tab title font-family matched as expected'); - } else { - errors.push(`Expected: Standards tab title font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); - } - - //size - if (elementTextSize === '15px') { - console.log('Passed: Standards tab title text font-size matched as expected'); - } else { - errors.push(`Expected: Standards tab title text font-size "15px"; Actual: "${elementTextSize}"`); - } - - //color - if (elementTextColor === 'rgba(255, 255, 255, 1)') { - console.log('Passed: Standards tab title text color matched as expected'); - } else { - errors.push(`Expected: Standards tab title text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); - } - - //button color - if (elementButtonColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Standards tab background color matched as expected'); - } else { - errors.push(`Expected: Standards tab background color: "rgba(40, 39, 90, 1)"; Actual: "${elementButtonColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //AutoAlign tab title - { - description: 'Validate AutoAlign tab title text, size, and color', - action: async () => { - const multipleChecks = 'AutoAlign tab title'; - const element = await driver.findElement(By.linkText('AutoAlign')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementTextFont = await element.getCssValue('font-family'); - const elementTextSize = await element.getCssValue('font-size'); - const elementTextColor = await element.getCssValue('color'); - const elementButtonColor = await element.getCssValue('background-color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'AutoAlign') { - console.log('Passed: AutoAlign tab title text matched as expected'); - } else { - errors.push(`Expected: "AutoAlign"; Actual: "${elementText}"`); - } - - //font - if (elementTextFont === 'Poppins, sans-serif') { - console.log('Passed: AutoAlign tab title font-family matched as expected'); - } else { - errors.push(`Expected: AutoAlign tab title font-family "DM Serif Display, serif"; Actual: ${elementTextFont}`); - } - - //size - if (elementTextSize === '15px') { - console.log('Passed: AutoAlign tab title text font-size matched as expected'); - } else { - errors.push(`Expected: AutoAlign tab title text font-size "15px"; Actual: "${elementTextSize}"`); - } - - //color - if (elementTextColor === 'rgba(182, 186, 181, 1)') { - console.log('Passed: AutoAlign tab title text color matched as expected'); - } else { - errors.push(`Expected: AutoAlign tab title text color: "rgba(182, 186, 181, 1)"; Actual: "${elementTextColor}"`); - } - - //button color - if (elementButtonColor === 'rgba(0, 0, 0, 0)') { - console.log('Passed: AutoAlign tab background color matched as expected'); - } else { - errors.push(`Expected: AutoAlign tab background color: "rgba(0, 0, 0, 0)"; Actual: "${elementButtonColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Browse - Browse standards sub-title - { - description: 'Validate Browse - Browse standards sub-title text, color, and size', - action: async () => { - const multipleChecks = 'Browse sub-title'; - const element = await driver.findElement(By.css('#std .fom-title')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Browse standards') { - console.log("Passed: Browse page - Browse standards sub-title matched as expected"); - } else { - errors.push(`Expected: "Browse standards" sub-title; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: Browse page - Browse standards sub-title font-family matched as expected'); - } else { - errors.push(`Expected: Browse page - Browse standards sub-title font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Browse page - Browse standards sub-title text font-size matched as expected'); - } else { - errors.push(`Expected: Browse page - Browse standards sub-title text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Browse page - Browse standards sub-title text color matched as expected'); - } else { - errors.push(`Expected: Browse page - Browse standards sub-title text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Standards label - { - description: 'Validate Standards label text, font, size, and color', - action: async () => { - const multipleChecks = 'Standards label'; - const element = await driver.findElement(By.css('#browse-standards > .form-group:nth-child(1) > .col-sm-12')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Standards') { - console.log("Passed: Standards label matched as expected"); - } else { - errors.push(`Expected: "Standards" label; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: Standards label font-family matched as expected'); - } else { - errors.push(`Expected: Standards label font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Standards label text font-size matched as expected'); - } else { - errors.push(`Expected: Standards label text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Standards label text color matched as expected'); - } else { - errors.push(`Expected: Standards label text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Standards dropdown - { - description: 'Validate Standards dropdown list and value', - action: async () => { - const multipleChecks = 'Standards Dropdown List'; - const select = await driver.findElement(By.css('#stdselect')); - - //Get text, font, size, and color - const selectedOption = await select.findElement(By.css('option:checked')); - const elementText = await selectedOption.getText(); - const elementFont = await selectedOption.getCssValue('font-family'); - const elementSize = await selectedOption.getCssValue('font-size'); - const elementColor = await selectedOption.getCssValue('color'); - - //text - if (elementText === 'Alabama') { - console.log("Passed: Alabama default option matched as expected"); - } else { - errors.push(`Expected option: "Alabama"; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: Alabama default text font-family matched as expected'); - } else { - errors.push(`Expected: Alabama default text font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Alabama default text font-size matched as expected'); - } else { - errors.push(`Expected: Alabama default text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Alabama default text color matched as expected'); - } else { - errors.push(`Expected: Alabama default text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - const options = await select.findElements(By.css('option')); - const expectedList = [ - 'Select standards', - 'Alabama', - 'Arizona', - 'California', - 'Florida', - 'Georgia', - 'Illinois', - 'New York', - 'Texas', - 'Washington', - 'Common Core State Standards', - 'Alberta Standards', - 'Ontario Curriculum', - 'Australian Curriculum (ACARA) v8', - 'New South Wales', - 'NCSSFL-ACTFL CAN-DO STATEMENTS', - 'WIDA Consortium (2020)', - '5th Grade Import ECS-2732', - 'Imported Framework Updated', - 'ECS-2933 Testing On Prod', - //'Stats Test Framework', - 'Widget Test', - 'California Mathematics 1997', - 'Georgia Archived Language Arts QA', - 'Georgia Current Language Arts QA', - 'Georgia Future Language Arts QA', - 'create group test', - 'IMport Test' - ]; - const actual = []; - - //Track all errors - const errors = []; - - for (const opt of options) { - const text = (await opt.getText()).trim(); - actual.push(text); - } - - if (JSON.stringify(actual) === JSON.stringify(expectedList)) { - console.log('Passed: Standards Dropdown list matched as expected'); - } else { - errors.push(`Expected: Standards Dropdown list: ${JSON.stringify(expectedList)}, Actual: ${JSON.stringify(actual)}`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Standards Display label - { - description: 'Validate Standards Display label text, font, size, and color', - action: async () => { - const multipleChecks = 'Standards Display label'; - const element = await driver.findElement(By.css('.form-group:nth-child(2) > .col-sm-2')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Standards Display') { - console.log("Passed: Standards Display label text matched as expected"); - } else { - errors.push(`Expected: ""Standards Display" label text; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: Standards Display label font-family matched as expected'); - } else { - errors.push(`Expected: Standards Display label font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Standards Display label text font-size matched as expected'); - } else { - errors.push(`Expected: Standards Display label text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Standards Display label text color matched as expected'); - } else { - errors.push(`Expected: Standards Display label text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //All radio option - { - description: 'Validate All radio option text, font, size, and color', - action: async () => { - const multipleChecks = 'All radio option'; - const elementOption = await driver.findElement(By.css('#gap1')).getAttribute('checked'); - const element = await driver.findElement(By.css('.form-check:nth-child(1) > .form-check-label')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementTextFont = await element.getCssValue('font-family'); - const elementTextSize = await element.getCssValue('font-size'); - const elementTextColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //icon - if (elementOption === 'true') { - console.log('Passed: All radio option selected as expected'); - } else { - throw new Error(`All radio option value was not selected; Actual: "${elementOption}"`); - } - - //text - if (elementText === 'All') { - console.log('Passed: All radio label text matched as expected'); - } else { - errors.push(`Expected: "All" radio label text; Actual: "${elementText}"`); - } - - //font-family - if (elementTextFont === 'Poppins, sans-serif') { - console.log('Passed: All radio label font matched as expected'); - } else { - errors.push(`Expected: All radio label font "DM Serif Display, serif"; Actual: ${elementTextFont}`); - } - - //font size - if (elementTextSize === '13px') { - console.log('Passed: All radio label text font-size matched as expected'); - } else { - errors.push(`Expected: All radio label text font-size "13px"; Actual: "${elementTextSize}"`); - } - - //text color - if (elementTextColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: All radio label text color matched as expected'); - } else { - errors.push(`Expected: All radio label text color: "rgba(40, 39, 90, 1)"; Actual: "${elementTextColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Correlated Only radio option - { - description: 'Validate Correlated Only radio option text, font, size, and color', - action: async () => { - const multipleChecks = 'Correlated Only radio option'; - const elementOption = await driver.findElement(By.css('#gap2')); - const element = await driver.findElement(By.css('.form-check:nth-child(2) > .form-check-label')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementTextFont = await element.getCssValue('font-family'); - const elementTextSize = await element.getCssValue('font-size'); - const elementTextColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //icon - if (elementOption) { - console.log('Passed: Correlated Only radio option is present'); - } else { - throw new Error(`Correlated Only radio option was not found; Actual: "${elementOption}"`); - } - - //text - if (elementText === 'Correlated Only') { - console.log('Passed: Correlated Only radio label text matched as expected'); - } else { - errors.push(`Expected: "Correlated Only" radio label text; Actual: "${elementText}"`); - } - - //font-family - if (elementTextFont === 'Poppins, sans-serif') { - console.log('Passed: Correlated Only radio label font matched as expected'); - } else { - errors.push(`Expected: Correlated Only radio label font "DM Serif Display, serif"; Actual: ${elementTextFont}`); - } - - //font size - if (elementTextSize === '13px') { - console.log('Passed: Correlated Only radio label text font-size matched as expected'); - } else { - errors.push(`Expected: Correlated Only radio label text font-size "13px"; Actual: "${elementTextSize}"`); - } - - //text color - if (elementTextColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Correlated Only radio label text color matched as expected'); - } else { - errors.push(`Expected: Correlated Only radio label text color: "rgba(40, 39, 90, 1)"; Actual: "${elementTextColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Uncorrelated Only radio option - { - description: 'Validate Uncorrelated Only radio option text, font, size, and color', - action: async () => { - const multipleChecks = 'Uncorrelated Only radio option'; - const elementOption = await driver.findElement(By.css('#gap3')); - const element = await driver.findElement(By.css('.form-check:nth-child(3) > .form-check-label')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementTextFont = await element.getCssValue('font-family'); - const elementTextSize = await element.getCssValue('font-size'); - const elementTextColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //icon - if (elementOption) { - console.log('Passed: Uncorrelated Only radio option is present'); - } else { - throw new Error(`Uncorrelated Only radio option was not found; Actual: "${elementOption}"`); - } - - //text - if (elementText === 'Uncorrelated Only') { - console.log('Passed: Uncorrelated Only radio label text matched as expected'); - } else { - errors.push(`Expected: "Uncorrelated Only" radio label text; Actual: "${elementText}"`); - } - - //font-family - if (elementTextFont === 'Poppins, sans-serif') { - console.log('Passed: Uncorrelated Only radio label font matched as expected'); - } else { - errors.push(`Expected: Uncorrelated Only radio label font "DM Serif Display, serif"; Actual: ${elementTextFont}`); - } - - //font size - if (elementTextSize === '13px') { - console.log('Passed: Uncorrelated Only radio label text font-size matched as expected'); - } else { - errors.push(`Expected: Uncorrelated Only radio label text font-size "13px"; Actual: "${elementTextSize}"`); - } - - //text color - if (elementTextColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Uncorrelated Only radio label text color matched as expected'); - } else { - errors.push(`Expected: Uncorrelated Only radio label text color: "rgba(40, 39, 90, 1)"; Actual: "${elementTextColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Subject label - { - description: 'Validate Subject label text, font, size, and color', - action: async () => { - const multipleChecks = 'Subject label'; - const element = await driver.findElement(By.css('.hideSubject > .col-form-label')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Subject') { - console.log("Passed: Subject label text matched as expected"); - } else { - errors.push(`Expected: "Subject" label text; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: Subject label font-family matched as expected'); - } else { - errors.push(`Expected: Subject label font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Subject label text font-size matched as expected'); - } else { - errors.push(`Expected: Subject label text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Subject label text color matched as expected'); - } else { - errors.push(`Expected: Subject label text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Subject dropdown - { - description: 'Validate Subject dropdown list and value', - action: async () => { - const multipleChecks = 'Subject Dropdown List'; - const select = await driver.findElement(By.css('#selectSubjects')); - - //Get text, font, size, and color - const selectedOption = await select.findElement(By.css('option:checked')); - const elementText = await selectedOption.getText(); - const elementFont = await selectedOption.getCssValue('font-family'); - const elementSize = await selectedOption.getCssValue('font-size'); - const elementColor = await selectedOption.getCssValue('color'); - - //text - if (elementText === 'Select a subject') { - console.log("Passed: Select a subject default option matched as expected"); - } else { - errors.push(`Expected option: "Select a subject"; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: Select a subject default text font-family matched as expected'); - } else { - errors.push(`Expected: Select a subject default text font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Select a subject default text font-size matched as expected'); - } else { - errors.push(`Expected: Select a subject default text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Select a subject default text color matched as expected'); - } else { - errors.push(`Expected: Select a subject default text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - const options = await select.findElements(By.css('option')); - const expectedList = [ - 'Select a subject', - 'Health and PE', - 'Language Arts', - "Mathematics", - "Science", - "Social Studies", - "Technology Education" - ]; - const actual = []; - - //Track all errors - const errors = []; - - for (const opt of options) { - const text = (await opt.getText()).trim(); - actual.push(text); - } - - if (JSON.stringify(actual) === JSON.stringify(expectedList)) { - console.log('Passed: Subject Dropdown list matched as expected'); - } else { - errors.push(`Expected: Subject Dropdown list: ${JSON.stringify(expectedList)}, Actual: ${JSON.stringify(actual)}`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Grade label and dropdown - { - description: 'Validate Grade label and dropdown are hidden', - action: async () => { - const multipleChecks = 'Grade label and dropdown are hidden'; - const errors = []; - - const visibility = await driver.executeScript(` - const hideGradeDiv = document.querySelector('.hideGrade'); - if (!hideGradeDiv) return { found: false }; - const style = window.getComputedStyle(hideGradeDiv); - return { - found: true, - hidden: style.display === 'none', - display: style.display - }; - `); - //console.log('----->| DEBUG hideGrade visibility:', JSON.stringify(visibility)); - - //Both label and dropdown are inside the same hideGrade div - //so we only need to check the parent container once - if (visibility.found && visibility.hidden) { - console.log('Passed: Grade label is hidden as expected'); - console.log('Passed: Grade dropdown is hidden as expected'); - } else { - errors.push(`Expected: Grade label and dropdown to be hidden; Actual: display="${visibility.display}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - throw new Error(errors.join('\n')); - } - } - }, - - //Show Correlations From label - { - description: 'Validate Show Correlations From label text, font, size, and color', - action: async () => { - const multipleChecks = 'Show Correlations From label'; - const element = await driver.findElement(By.css('.form-group:nth-child(3) > .col-form-label')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Show Correlations From') { - console.log("Passed: Show Correlations From label text matched as expected"); - } else { - errors.push(`Expected: "Show Correlations From" label text; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: Show Correlations From label font-family matched as expected'); - } else { - errors.push(`Expected: Show Correlations From label font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Show Correlations From label text font-size matched as expected'); - } else { - errors.push(`Expected: Show Correlations From label text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Show Correlations From label text color matched as expected'); - } else { - errors.push(`Expected: Show Correlations From label text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Show Correlations From dropdown value - { - description: 'Validate Show Correlations From dropdown value', - action: async () => { - const multipleChecks = 'Show Correlations From dropdown value'; - - //Locate and validate selected (collapsed) value - const dropdownButton = await driver.findElement( - By.css('button.multiselect.dropdown-toggle') - ); - - const selectedOption = await driver.findElement(By.css('#browse-standards > div:nth-child(3) > div > div > div:nth-child(3) > div > div > button > span')); - - //Get text, font, size, and color - const elementText = await selectedOption.getText(''); - const elementFont = await selectedOption.getCssValue('font-family'); - const elementSize = await selectedOption.getCssValue('font-size'); - const elementColor = await selectedOption.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'All Content Sets') { - console.log("Passed: All Content Sets default option matched as expected"); - } else { - errors.push(`Expected option: "All Content Sets"; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: All Content Sets default text font-family matched as expected'); - } else { - errors.push(`Expected: All Content Sets default text font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '16px') { - console.log('Passed: All Content Sets default text font-size matched as expected'); - } else { - errors.push(`Expected: All Content Sets default text font-size "16px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: All Content Sets default text color matched as expected'); - } else { - errors.push(`Expected: All Content Sets default text color "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Term Search label - { - description: 'Validate Term Search label text, font, size, and color', - action: async () => { - const multipleChecks = 'Term Search label'; - const element = await driver.findElement(By.css('.form-group:nth-child(7) > .col-sm-2')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Term Search') { - console.log("Passed: Term Search label text matched as expected"); - } else { - errors.push(`Expected: "Term Search" label text; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: Term Search label font-family matched as expected'); - } else { - errors.push(`Expected: Term Search label font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Term Search label text font-size matched as expected'); - } else { - errors.push(`Expected: Term Search label text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Term Search label text color matched as expected'); - } else { - errors.push(`Expected: Term Search label text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Term Search placeholder - { - description: 'Validate Term Search placeholder', - action: async () => { - const elementPlaceholder = await driver.findElement(By.css('#searchTerm')).getAttribute('placeholder'); - - if (elementPlaceholder === '') { - console.log('Passed: Term Search "blank" placeholder text matched as expected'); - } else { - throw new Error(`Expected: Term Search "blank" placeholder text; Actual: "${elementPlaceholder}"`); - } - } - }, - - //Include Related Standards checkbox - { - description: 'Validate Include Related Standards checkbox', - action: async () => { - const elementType = await driver.findElement(By.css('#doRel')).getAttribute('type'); - - if (elementType === 'checkbox') { - console.log('Passed: Include Related Standards checkbox type matched as expected'); - } else { - throw new Error(`Include Related Standards checkbox type did not match; Actual: "${elementType}"`); - } - } - }, - - //Include Related Standards label - { - description: 'Validate Include Related Standards label text, font, size, and color', - action: async () => { - const multipleChecks = 'Include Related Standards label'; - const element = await driver.findElement(By.css('.col-sm-offset-2 > label')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Include Related Standards') { - console.log("Passed: Include Related Standards label text matched as expected"); - } else { - errors.push(`Expected: "Include Related Standards" label text; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: Include Related Standards label font-family matched as expected'); - } else { - errors.push(`Expected: Include Related Standards label font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Include Related Standards label text font-size matched as expected'); - } else { - errors.push(`Expected: Include Related Standards label text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Include Related Standards label text color matched as expected'); - } else { - errors.push(`Expected: Include Related Standards label text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Search button - { - description: 'Validate Search button text, size, and color', - action: async () => { - const multipleChecks = 'Search button'; - const element = await driver.findElement(By.css('#stdsubmit')); - - //Get text, font, size, and color - const elementText = await element.getAttribute('value'); - const elementTextFont = await element.getCssValue('font-family'); - const elementTextSize = await element.getCssValue('font-size'); - const elementTextColor = await element.getCssValue('color'); - const elementButtonColor = await element.getCssValue('background-color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Search') { - console.log('Passed: Search button text matched as expected'); - } else { - errors.push(`Expected: "Search"; Actual: "${elementText}"`); - } - - //font - if (elementTextFont === 'Poppins, sans-serif') { - console.log('Passed: Search button text font-family matched as expected'); - } else { - errors.push(`Expected: Search button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); - } - - //size - if (elementTextSize === '16px') { - console.log('Passed: Search button text font-size matched as expected'); - } else { - errors.push(`Expected: Search button text font-size "16px"; Actual: "${elementTextSize}"`); - } - - //color - if (elementTextColor === 'rgba(255, 255, 255, 1)') { - console.log('Passed: Search button text color matched as expected'); - } else { - errors.push(`Expected: Search button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); - } - - //button color - if (elementButtonColor === 'rgba(48, 200, 172, 1)') { - console.log('Passed: Search button background color matched as expected'); - } else { - errors.push(`Expected: Search button background color: "rgba(48, 200, 172, 1)"; Actual: "${elementButtonColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //NEXT ACTION - { - description: 'Validate alert message', - action: async () => { - const multipleChecks = 'Validate alert message'; - const errors = []; - - //Click delete button - const element = await driver.findElement(By.css('#stdsubmit')).click(); - await driver.sleep(5000); - console.log('----->| NEXT ACTION: Clicked Search button'); - - //Wait for confirm dialog to appear - const alert = await driver.wait(until.alertIsPresent(), 5000); - console.log('----->| NEXT ACTION: Alert dialog appeared as expected'); - - //Get alert text - const alertText = await alert.getText(); - - //Validate alert message text - const expectedText = 'You must select a subject'; - if (alertText === expectedText) { - console.log('Passed: Alert dialog text matched as expected'); - } else { - errors.push(`Expected: "${expectedText}"; Actual: "${alertText}"`); - } - - //Throw summary before dismissing if errors found - if (errors.length > 0) { - await alert.dismiss(); //Cancel the delete if validation failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - throw new Error(errors.join('\n')); - } - - //Accept the alert (click OK) to proceed with deletion - await alert.accept(); - console.log('----->| NEXT ACTION: Clicked alert message OK button'); - await driver.sleep(2000); - } - }, - - //NEXT ACTION - { - description: 'Click Subject dropdown', - action: async () => { - //Select "Mathematics" from dropdown - const subjectDropdown = await driver.findElement(By.css('#selectSubjects')); - const mathematicsOption = await driver.findElement(By.css('#selectSubjects > option:nth-child(4)')); - - await subjectDropdown.click(); - await driver.sleep(2000); - - await mathematicsOption.click(); - await driver.sleep(2000); - console.log('----->| NEXT ACTION: Selected Subject - Mathematics'); - - //Click away to close dropdown - await driver.findElement(By.css('#browse-standards > .form-group:nth-child(1)')).click(); - - //Wait for the dashboard container to exist in DOM - await driver.wait( - until.elementLocated(By.css('#selectGrade')), - 30000, - 'Grade dropdown did not appear within 30 seconds' - ); - - //Wait for it to be visible - await driver.wait(async () => { - try { - const gradeDropdown = await driver.findElement(By.css('#selectGrade')); - return await gradeDropdown.isDisplayed(); - } catch (e) { - return false; - } - }, 30000, 'Grade dropdown did not become visible within 30 seconds'); - }, - }, - - //Grade label - { - description: 'Validate Grade label text, font, size, and color', - action: async () => { - const multipleChecks = 'Grade label'; - const element = await driver.findElement(By.css('.hideGrade > .col-form-label')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Grade') { - console.log("Passed: Grade label text matched as expected"); - } else { - errors.push(`Expected: "Grade" label text; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: Grade label font-family matched as expected'); - } else { - errors.push(`Expected: Grade label font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Grade label text font-size matched as expected'); - } else { - errors.push(`Expected: Grade label text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Grade label text color matched as expected'); - } else { - errors.push(`Expected: Grade label text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Grade dropdown - { - description: 'Validate Grade dropdown list and value', - action: async () => { - const multipleChecks = 'Grade Dropdown List'; - const select = await driver.findElement(By.css('#selectGrade')); - - //Get text, font, size, and color - const selectedOption = await select.findElement(By.css('option:checked')); - const elementText = await selectedOption.getText(); - const elementFont = await selectedOption.getCssValue('font-family'); - const elementSize = await selectedOption.getCssValue('font-size'); - const elementColor = await selectedOption.getCssValue('color'); - - //text - if (elementText === 'Select a grade') { - console.log("Passed: Select a grade default option matched as expected"); - } else { - errors.push(`Expected option: "Select a grade"; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: Select a grade default text font-family matched as expected'); - } else { - errors.push(`Expected: Select a grade default text font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: Select a grade default text font-size matched as expected'); - } else { - errors.push(`Expected: Select a grade default text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: Select a grade default text color matched as expected'); - } else { - errors.push(`Expected: Select a grade default text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - const options = await select.findElements(By.css('option')); - const expectedList = [ - 'Select a grade', - 'K', - '1', - '2', - '3', - '4', - '5', - '6', - '7', - '8', - '9', - '10', - '11', - '12' - ]; - const actual = []; - - //Track all errors - const errors = []; - - for (const opt of options) { - const text = (await opt.getText()).trim(); - actual.push(text); - } - - if (JSON.stringify(actual) === JSON.stringify(expectedList)) { - console.log('Passed: Grade Dropdown list matched as expected'); - } else { - errors.push(`Expected: Grade Dropdown list: ${JSON.stringify(expectedList)}, Actual: ${JSON.stringify(actual)}`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //NEXT ACTION - { - description: 'Validate alert message', - action: async () => { - const multipleChecks = 'Validate alert message'; - const errors = []; - - //Click delete button - const element = await driver.findElement(By.css('#stdsubmit')).click(); - await driver.sleep(5000); - console.log('----->| NEXT ACTION: Clicked Search button'); - - //Wait for confirm dialog to appear - const alert = await driver.wait(until.alertIsPresent(), 5000); - console.log('----->| NEXT ACTION: Alert dialog appeared as expected'); - - //Get alert text - const alertText = await alert.getText(); - - //Validate alert message text - const expectedText = 'You must select a grade'; - if (alertText === expectedText) { - console.log('Passed: Alert dialog text matched as expected'); - } else { - errors.push(`Expected: "${expectedText}"; Actual: "${alertText}"`); - } - - //Throw summary before dismissing if errors found - if (errors.length > 0) { - await alert.dismiss(); //Cancel the delete if validation failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - throw new Error(errors.join('\n')); - } - - //Accept the alert (click OK) to proceed with deletion - await alert.accept(); - console.log('----->| NEXT ACTION: Clicked alert message OK button'); - await driver.sleep(2000); - } - }, - - //NEXT ACTION - { - description: 'Select grade', - action: async () => { - //Select "9" from dropdown - await driver.findElement(By.css('#selectGrade')).click(); - await driver.sleep(2000); - await driver.findElement(By.css('#selectGrade > option:nth-child(11)')).click(); - - console.log('----->| NEXT ACTION: Selected grade: 9'); - }, - }, - - //Show Correlations From dropdown - { - description: 'Validate Show Correlations From dropdown list and value', - action: async () => { - const multipleChecks = 'Show Correlations From dropdown list'; - - //Locate and validate selected (collapsed) value - const dropdownButton = await driver.findElement( - By.css('button.multiselect.dropdown-toggle') - ); - - const selectedOption = await driver.findElement(By.css('#browse-standards > div:nth-child(3) > div > div > div:nth-child(3) > div > div > button > span')); - - //Get text, font, size, and color - const elementText = await selectedOption.getText(''); - const elementFont = await selectedOption.getCssValue('font-family'); - const elementSize = await selectedOption.getCssValue('font-size'); - const elementColor = await selectedOption.getCssValue('color'); - - //text - if (elementText === 'All Content Sets') { - console.log("Passed: All Content Sets default option matched as expected"); - } else { - errors.push(`Expected option: "All Content Sets"; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: All Content Sets default text font-family matched as expected'); - } else { - errors.push(`Expected: All Content Sets default text font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '16px') { - console.log('Passed: All Content Sets default text font-size matched as expected'); - } else { - errors.push(`Expected: All Content Sets default text font-size "16px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: All Content Sets default text color matched as expected'); - } else { - errors.push(`Expected: All Content Sets default text color "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //Open dropdown - await driver.findElement(By.css('.col-sm-12 .multiselect-selected-text')).click(); - await driver.sleep(2000); - console.log('----->| NEXT ACTION: Clicked Show Correlations From dropdown'); - - //Wait for dropdown list to become visible - const dropdownMenu = await driver.wait( - until.elementLocated(By.css('ul.multiselect-container.dropdown-menu.show')), - 10000 - ); - - await driver.wait( - until.elementIsVisible(dropdownMenu), - 10000 - ); - - //Now safely get option labels - const optionLabels = await dropdownMenu.findElements( - By.css('li label.checkbox') - ); - - //Extract list values - const actualOptions = []; - for (const label of optionLabels) { - const text = (await label.getText()).trim(); - if (text) { - actualOptions.push(text); - } - } - - const expectedOptions = [ - 'Select all', - 'US History III', - 'English I', - 'Algebra', - 'Biology', - 'Copy Move Delete Test 1', - 'Copy Move Delete Test 2', - 'Import Align - Concept Based 1', - 'Import Align - Concept Based 2', - 'Import Align - Direct Align 1', - 'Import Align - Direct Align 2', - 'Math Alignment Import Test', - 'create me', - 'Illustrative Math Test 1', - 'Illustrative Math Test 2', - 'Khan URL test', - 'seesaw test', - 'ECS-3037 On Prod TC2', - 'ECS-3037 On Prod TC1', - 'webinar test', - 'Post NIght July26' - ]; - - //Track all errors - const errors = []; - - //Length validation - if (actualOptions.length !== expectedOptions.length) { - errors.push( - `Expected option count ${expectedOptions.length}; Actual ${actualOptions.length}` - ); - } - - //Value-by-value validation - expectedOptions.forEach((expected, i) => { - if (actualOptions[i] !== expected) { - errors.push( - `Index ${i}: Expected "${expected}", Actual "${actualOptions[i]}"` - ); - } - }); - - //Select "Algebra" from dropdown - //Runs even if validation above already failed — errors are thrown after this, - //so log order does not reflect when the failing check actually ran - await driver.findElement(By.css('.show > li:nth-child(5) input')).click(); - await driver.sleep(2000); - - console.log('----->| NEXT ACTION: Selected correlation: Algebra'); - - //Click away to close dropdown using executeScript to bypass interception - await driver.executeScript(` - document.querySelector('.col-sm-12 .multiselect-selected-text').click(); - `); - await driver.sleep(2000); - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Related Standards options - { - description: 'Validate Include Related Standards options are hidden', - action: async () => { - const multipleChecks = 'Include Related Standards labels and dropdowns are hidden'; - const errors = []; - - const visibility = await driver.executeScript(` - const elementRelStdnt = document.querySelector('#relsel'); - if (!elementRelStdnt) return { found: false }; - const style = window.getComputedStyle(elementRelStdnt); - return { - found: true, - hidden: style.display === 'none', - display: style.display - }; - `); - //console.log('----->| DEBUG RelStdnt visibility:', JSON.stringify(visibility)); - - //Both label and dropdown are inside the same hideGrade div - //so we only need to check the parent container once - if (visibility.found && visibility.hidden) { - console.log('Passed: Related Standards dropdown is hidden as expected'); - console.log('Passed: Best Match dropdown is hidden as expected'); - } else { - errors.push(`Expected: Related Standards and Best Match dropdowns to be hidden; Actual: display="${visibility.display}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - throw new Error(errors.join('\n')); - } - } - }, - - //NEXT ACTION - { - description: 'Select Include Related Standards checkbox', - action: async () => { - await driver.findElement(By.css('#doRel')).click(); - await driver.sleep(2000); - console.log('----->| NEXT ACTION: Clicked Include Related Standards checkbox'); - - //Wait until the modal title is located AND visible - await driver.wait(async () => { - try { - const element = await driver.findElement(By.css('.col-auto .multiselect-selected-text')); - return await element.isDisplayed(); - } catch (e) { - return false; //Element not ready yet, keep waiting - } - }, 20000, 'Related Standards dropdown did not become visible within 20 seconds'); - - console.log('Passed: Related Standards dropdown loaded successfully'); - } - }, - - //NEXT ACTION - { - description: 'Validate alert message', - action: async () => { - const multipleChecks = 'Validate alert message'; - const errors = []; - - //Click delete button - const element = await driver.findElement(By.css('#stdsubmit')).click(); - await driver.sleep(5000); - console.log('----->| NEXT ACTION: Clicked Search button'); - - //Wait for confirm dialog to appear - const alert = await driver.wait(until.alertIsPresent(), 5000); - console.log('----->| NEXT ACTION: Alert dialog appeared as expected'); - - //Get alert text - const alertText = await alert.getText(); - - //Validate alert message text - const expectedText = 'You must select at least one set of related standards'; - if (alertText === expectedText) { - console.log('Passed: Alert dialog text matched as expected'); - } else { - errors.push(`Expected: "${expectedText}"; Actual: "${alertText}"`); - } - - //Throw summary before dismissing if errors found - if (errors.length > 0) { - await alert.dismiss(); //Cancel the delete if validation failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - throw new Error(errors.join('\n')); - } - - //Accept the alert (click OK) to proceed with deletion - await alert.accept(); - console.log('----->| NEXT ACTION: Clicked alert message OK button'); - await driver.sleep(2000); - } - }, - - //Related Standards dropdown - { - description: 'Validate Related Standards dropdown list and value', - action: async () => { - const multipleChecks = 'Related Standards dropdown list'; - - //Locate and validate selected (collapsed) value - const dropdownButton = await driver.findElement( - By.css('.col-auto .multiselect-selected-text') - ); - - //Open dropdown - use the element directly, not findElement again - await dropdownButton.click(); - await driver.sleep(2000); - console.log('----->| NEXT ACTION: Clicked Related Standards dropdown'); - - //Track all errors - const errors = []; - - //Get text, font, size, and color - const elementText = await dropdownButton.getText(); - const elementFont = await dropdownButton.getCssValue('font-family'); - const elementSize = await dropdownButton.getCssValue('font-size'); - const elementColor = await dropdownButton.getCssValue('color'); - - //text - if (elementText === 'None Selected') { - console.log("Passed: None Selected default option matched as expected"); - } else { - errors.push(`Expected option: "None Selected"; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: None Selected default text font-family matched as expected'); - } else { - errors.push(`Expected: None Selected default text font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '16px') { - console.log('Passed: None Selected default text font-size matched as expected'); - } else { - errors.push(`Expected: None Selected default text font-size "16px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: None Selected default text color matched as expected'); - } else { - errors.push(`Expected: None Selected default text color "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //Wait for dropdown list to become visible - const dropdownMenu = await driver.wait( - until.elementLocated(By.css('ul.multiselect-container.dropdown-menu.show')), - 10000 - ); - - await driver.wait( - until.elementIsVisible(dropdownMenu), - 10000 - ); - - //Now safely get option labels - const optionLabels = await dropdownMenu.findElements( - By.css('li label.checkbox') - ); - - //Extract list values - const actualOptions = []; - for (const label of optionLabels) { - const text = (await label.getText()).trim(); - if (text) { - actualOptions.push(text); - } - } - - const expectedOptions = [ - 'Select all', - 'Alabama', - 'Arizona', - 'California', - 'Florida', - 'Georgia', - 'Illinois', - 'New York', - 'Texas', - 'Washington', - 'Common Core State Standards', - 'Alberta Standards', - 'Ontario Curriculum', - 'Australian Curriculum (ACARA) v8', - 'New South Wales', - 'NCSSFL-ACTFL CAN-DO STATEMENTS', - 'WIDA Consortium (2020)', - '5th Grade Import ECS-2732', - 'Imported Framework Updated', - 'ECS-2933 Testing On Prod', - 'Widget Test', - 'California Mathematics 1997', - 'Georgia Archived Language Arts QA', - 'Georgia Current Language Arts QA', - 'Georgia Future Language Arts QA', - 'create group test', - 'IMport Test' - ]; - - //Length validation - if (actualOptions.length !== expectedOptions.length) { - errors.push( - `Expected option count ${expectedOptions.length}; Actual ${actualOptions.length}` - ); - } - - //Value-by-value validation - expectedOptions.forEach((expected, i) => { - if (actualOptions[i] !== expected) { - errors.push( - `Index ${i}: Expected "${expected}", Actual "${actualOptions[i]}"` - ); - } - }); - - //Select "Washington" from dropdown - await driver.findElement(By.css('.show > li:nth-child(12) input')).click(); - await driver.sleep(2000); - - //Select "Common Core State Standards" from dropdown - await driver.findElement(By.css('.show > li:nth-child(14) input')).click(); - await driver.sleep(2000); - - //Select "California Mathematics 1997" from dropdown - await driver.findElement(By.css('.show > li:nth-child(34) input')).click(); - await driver.sleep(2000); - - console.log('----->| NEXT ACTION: Selected Related Standards: Washington, Common Core State Standards, California Mathematics 1997'); - - //Click away to close dropdown using executeScript to bypass interception - await driver.executeScript(` - document.querySelector('.col-auto .multiselect-selected-text').click(); - `); - await driver.sleep(2000); - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Selected Related Standards dropdown value - { - description: 'Validate Show Correlations From dropdown value', - action: async () => { - const multipleChecks = 'Show Correlations From dropdown value'; - const selectedOption = await driver.findElement(By.css('.col-auto .multiselect-selected-text')); - - //Get text, font, size, and color - const elementText = await selectedOption.getText(''); - const elementFont = await selectedOption.getCssValue('font-family'); - const elementSize = await selectedOption.getCssValue('font-size'); - const elementColor = await selectedOption.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'Washington , Common Core State Standards , California Mathematics 1997') { - console.log("Passed: Selected Content Sets dropdown options matched as expected"); - } else { - errors.push(`Expected option: "Washington , Common Core State Standards , California Mathematics 1997"; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: Selected Content Sets dropdown text font-family matched as expected'); - } else { - errors.push(`Expected: Selected Content Sets dropdown text font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '16px') { - console.log('Passed: Selected Content Sets dropdown text font-size matched as expected'); - } else { - errors.push(`Expected: Selected Content Sets dropdown text font-size "16px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(33, 37, 41, 1)') { - console.log('Passed: Selected Content Sets dropdown text color matched as expected'); - } else { - errors.push(`Expected: Selected Content Sets dropdown text color "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //based on - { - description: 'Validate based on label text, font, size, and color', - action: async () => { - const multipleChecks = 'based on label'; - const element = await driver.findElement(By.css('.col-auto:nth-child(2)')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === 'based on') { - console.log("Passed: based on label text matched as expected"); - } else { - errors.push(`Expected: "based on" label text; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: based on label font-family matched as expected'); - } else { - errors.push(`Expected: based on label font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: based on label text font-size matched as expected'); - } else { - errors.push(`Expected: based on label text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: based on label text color matched as expected'); - } else { - errors.push(`Expected: based on label text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //best match dropdown - { - description: 'Validate best match dropdown list and value', - action: async () => { - const multipleChecks = 'best match Dropdown List'; - const select = await driver.findElement(By.css('.custom-select')); - - //Get text, font, size, and color - const selectedOption = await select.findElement(By.css('option:checked')); - const elementText = await selectedOption.getText(); - const elementFont = await selectedOption.getCssValue('font-family'); - const elementSize = await selectedOption.getCssValue('font-size'); - const elementColor = await selectedOption.getCssValue('color'); - - //text - if (elementText === 'best match') { - console.log("Passed: best match default option matched as expected"); - } else { - errors.push(`Expected option: "best match"; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: best match default text font-family matched as expected'); - } else { - errors.push(`Expected: best match default text font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '13px') { - console.log('Passed: best match default text font-size matched as expected'); - } else { - errors.push(`Expected: best match default text font-size "13px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: best match default text color matched as expected'); - } else { - errors.push(`Expected: best match default text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - } - - const options = await select.findElements(By.css('option')); - const expectedList = [ - 'best match', - 'similar text', - 'like concepts' - ]; - const actual = []; - - //Track all errors - const errors = []; - - for (const opt of options) { - const text = (await opt.getText()).trim(); - actual.push(text); - } - - if (JSON.stringify(actual) === JSON.stringify(expectedList)) { - console.log('Passed: best match Dropdown list matched as expected'); - } else { - errors.push(`Expected: best match Dropdown list: ${JSON.stringify(expectedList)}, Actual: ${JSON.stringify(actual)}`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //Include Related Standards info icon | SPECIAL CASE {title data-original-title} - { - description: 'Validate info icon', - action: async () => { - const multipleChecks = 'info icon'; - const errors = []; - - //Get both text and styles in one executeScript call - const result = await driver.executeScript(` - const el = document.querySelector('[data-toggle="tooltip"][data-placement="right"]'); - if (!el) return null; - const style = window.getComputedStyle(el); - return { - tooltipText: el.getAttribute('data-original-title'), - fontFamily: style.getPropertyValue('font-family'), - fontSize: style.getPropertyValue('font-size'), - color: style.getPropertyValue('color'), - backgroundColor: style.getPropertyValue('background-color') - }; - `); - //console.log('----->| DEBUG result:', JSON.stringify(result)); - - //text - if (result.tooltipText === '"best match" uses a combination of similar text and like concepts') { - console.log('Passed: Tooltip text matched as expected'); - } else { - errors.push(`Expected: Tooltip text: '"best match" uses a combination of similar text and like concepts'; Actual: "${result.tooltipText}"`); - } - - //font - if (result.fontFamily === 'Poppins, sans-serif') { - console.log('Passed: Info icon text font-family matched as expected'); - } else { - errors.push(`Expected: Info icon font-family "Poppins, sans-serif"; Actual: "${result.fontFamily}"`); - } - - //size - if (result.fontSize === '13px') { - console.log('Passed: Info icon text font-size matched as expected'); - } else { - errors.push(`Expected: Info icon font-size "13px"; Actual: "${result.fontSize}"`); - } - - //color - if (result.color === 'rgb(40, 39, 90)') { - console.log('Passed: Info icon text color matched as expected'); - } else { - errors.push(`Expected: Info icon color rgb(40, 39, 90)"; Actual: "${result.color}"`); - } - - //background-color - if (result.backgroundColor === 'rgba(0, 0, 0, 0)') { - console.log('Passed: Info icon background-color matched as expected'); - } else { - errors.push(`Expected: Info icon background-color "rgba(0, 0, 0, 0)"; Actual: "${result.backgroundColor}"`); - } - - //Throw summary if any validation failed - if (errors.length > 0) { - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - throw new Error(errors.join('\n')); - } - } - }, - - //note - { - description: 'Validate note text, font, size, and color', - action: async () => { - const multipleChecks = 'note label'; - const element = await driver.findElement(By.css('em')); - - //Get text, font, size, and color - const elementText = await element.getText(); - const elementFont = await element.getCssValue('font-family'); - const elementSize = await element.getCssValue('font-size'); - const elementColor = await element.getCssValue('color'); - - //Track all errors - const errors = []; - - //text - if (elementText === '** note - including related standards may cause increased page load times') { - console.log("Passed: ** note text matched as expected"); - } else { - errors.push(`Expected: "** note - including related standards may cause increased page load times" label text; Actual: "${elementText}"`); - } - - //font - if (elementFont === 'Poppins, sans-serif') { - console.log('Passed: ** note text font-family matched as expected'); - } else { - errors.push(`Expected: ** note text font-family "DM Serif Display, serif"; Actual: ${elementFont}`); - } - - //size - if (elementSize === '10.4px') { - console.log('Passed: ** note text font-size matched as expected'); - } else { - errors.push(`Expected: **n ote text font-size "10.4px"; Actual: "${elementSize}"`); - } - - //color - if (elementColor === 'rgba(40, 39, 90, 1)') { - console.log('Passed: ** note text color matched as expected'); - } else { - errors.push(`Expected: ** note text color "rgba(40, 39, 90, 1)"; Actual: "${elementColor}"`); - errors.push(message) - } - - //Throw summary if any validation failed - if (errors.length > 0) { - //Add summary line only when multiple checks failed - if (errors.length > 1) { - errors.unshift(`${multipleChecks} - Multiple validation checks did not pass`); - } - - //Throw collected messages — catch() will prefix with "FAILED:" - throw new Error(errors.join('\n')); - } - } - }, - - //NEXT ACTION - { - description: 'Click Search button', - action: async () => { - await driver.findElement(By.css('#stdsubmit')).click(); - console.log('----->| NEXT ACTION: Clicked Search button'); - - //Wait for page to load completely - await driver.wait(async () => { - const readyState = await driver.executeScript('return document.readyState'); - return readyState === 'complete'; - }, 30000, 'Standards search page did not fully load within 30 seconds'); - console.log('Passed: Standards Search Page loaded successfully'); - - //Wait until the modal title is located AND visible - await driver.wait(async () => { - try { - const element = await driver.findElement(By.css('.breadcrumb-item:nth-child(2)')); - return await element.isDisplayed(); - } catch (e) { - return false; //Element not ready yet, keep waiting - } - }, 20000, 'Standards breadcrumb label did not become visible within 20 seconds'); - - console.log('Passed: Standards breadcrumb label loaded successfully'); - } - }, - - ...myStandardsSearch_AlignedContent(driver), - -]; - -const logStep = (worksheet, stepDescription, status, stepIndex, timestamp, screenshotPath) => { - const json_data = XLSX.utils.sheet_to_json(worksheet, { header: 1 }); - json_data.push([stepIndex, stepDescription, status, timestamp, screenshotPath]); - return XLSX.utils.aoa_to_sheet(json_data); -}; - -const takeScreenshot = async (driver, stepIndex, stepDescription) => { - const screenshot = await driver.takeScreenshot(); - - const dir = path.join('screenshots', 'dashboardMyStandardsResults'); - - const screenshotFileName = `step_${stepIndex}_${stepDescription.replace(/\s+/g, '_')}.png`; - const screenshotPath = path.join(dir, screenshotFileName); - fs.writeFileSync(screenshotPath, screenshot, 'base64'); - return screenshotPath; -}; - -const clearOldResults = () => { - //Remove old screenshots - const screenshotDir = path.join('screenshots', 'dashboardMyStandardsResults'); - if (fs.existsSync(screenshotDir)) { - fs.rmSync(screenshotDir, { recursive: true, force: true }); - } - fs.mkdirSync(screenshotDir, { recursive: true }); - - //Remove old Excel file - if (fs.existsSync('dashboardMyStandardsResults.xlsx')) { - fs.unlinkSync('dashboardMyStandardsResults.xlsx'); - } -}; - -try { - //Initialize workbook and worksheet - clearOldResults(); - - //Initialize workbook and worksheet - workbook = XLSX.utils.book_new(); - worksheet = XLSX.utils.aoa_to_sheet([ - ['Step Number', 'Step Description', 'Status', 'Timestamp', 'Screenshot'] - ]); - XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1'); - - //Log test start time - worksheet = logStep(worksheet, 'Test Start', 'Started', '', startTime, ''); - - let allStepsPassed = true; - - const failedSteps = []; //Track failed steps - - for (const step of steps) { - const stepIndex = steps.indexOf(step) + 1; - const timestamp = new Date().toISOString(); - - try { - await step.action(); - worksheet = logStep( - worksheet, - step.description, - 'Passed', - stepIndex, - timestamp, - null - ); - - } catch (error) { - const screenshotPath = await takeScreenshot( - driver, - stepIndex, - `${step.description}_Failed` - ); - - worksheet = logStep( - worksheet, - step.description, - 'Failed', - stepIndex, - timestamp, - screenshotPath - ); - - console.error(`Step ${stepIndex} FAILED: ${error.message}`); - failedSteps.push(`Step ${stepIndex}: ${step.description} - ${error.message}`); //Track failed step - testStatus = 'Failed'; - allStepsPassed = false; - } - } - - if (allStepsPassed) { - console.log('------------->| THE END |<-------------'); - console.log('PASSED: DASHBOARD - My Standards Widget(dashboardMyStandards); All test steps completed successfully'); - testStatus = 'Passed'; - } else { - console.log('------------->| THE END |<-------------'); - console.log('FAILED: DASHBOARD - My Standards Widget(dashboardMyStandards); One or more test steps failed'); - console.log('FAILED STEPS:'); - failedSteps.forEach(step => console.error(` ✗ ${step}`)); - testStatus = 'Failed'; - } - - //Log test end time - const endTime = new Date().toISOString(); - worksheet = logStep(worksheet, 'Test End', testStatus, '', endTime, ''); - - //Write the updated worksheet back to the workbook and save it - workbook.Sheets['Sheet1'] = worksheet; - XLSX.writeFile(workbook, 'dashboardMyStandardsResults.xlsx'); -} finally { - await driver.quit(); -} - })(); -} - -export default dashboardMyStandards; diff --git a/tests/exactLandingPage.js b/tests/exactLandingPage.js index 8a9fb4c..8af8b79 100644 --- a/tests/exactLandingPage.js +++ b/tests/exactLandingPage.js @@ -4817,7 +4817,7 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; -const resultsFile = path.join('results', 'exactLandingPageResults.xlsx'); +const resultsFile = path.join('results', 'exactLandingPage.xlsx'); const clearOldResults = () => { //Remove old screenshots diff --git a/tests/myStandardsSearchAlignedContent.js b/tests/myStandardsSearchAlignedContent.js index 4b65030..c192400 100644 --- a/tests/myStandardsSearchAlignedContent.js +++ b/tests/myStandardsSearchAlignedContent.js @@ -3,8 +3,6 @@ import { Options as ChromeOptions } from 'selenium-webdriver/chrome.js'; import fs from 'fs'; import XLSX from 'xlsx'; import path from 'path'; -import { brotliCompress } from 'zlib'; -import e from 'express'; //Export JUST the steps so other scripts can import them export const myStandardsSearch_AlignedContent = (driver) => [ @@ -7752,10 +7750,10 @@ export const myStandardsSearch_AlignedContent = (driver) => [ const errors = []; //text - if (elementText === 'Aligned Content 4') { - console.log('Passed: Standard Code 2, Aligned Content 4 button text matched as expected'); + if (elementText === 'Aligned Content 5') { + console.log('Passed: Standard Code 2, Aligned Content 5 button text matched as expected'); } else { - errors.push(`Expected: "Aligned Content 4"; Actual: "${elementText}"`); + errors.push(`Expected: "Aligned Content 5"; Actual: "${elementText}"`); } //font @@ -8095,14 +8093,14 @@ const myStandardsSearch = (req, res) => { return readyState === 'complete'; }, 30000, 'ExACT Dashboard did not fully load within 30 seconds'); - /*Wait for the dashboard container to exist in DOM + //Wait for the dashboard container to exist in DOM await driver.wait( until.elementLocated(By.css('.gap-idle-wrap > img')), 30000, 'Dashboard image did not appear within 30 seconds' ); - Wait for it to be visible + //Wait for it to be visible await driver.wait(async () => { try { const img = await driver.findElement(By.css('.gap-idle-wrap > img')); @@ -8110,7 +8108,7 @@ const myStandardsSearch = (req, res) => { } catch (e) { return false; } - }, 30000, 'Dashboard image did not become visible within 30 seconds');*/ + }, 30000, 'Dashboard image did not become visible within 30 seconds'); //Wait for any loading spinners to disappear await driver.wait(async () => { @@ -8314,18 +8312,21 @@ const takeScreenshot = async (driver, stepIndex, stepDescription) => { return screenshotPath; }; +const resultsFile = path.join('results', 'myStandardsSearchAlignedContentResults.xlsx'); + const clearOldResults = () => { //Remove old screenshots - const screenshotDir = path.join('screenshots', 'myStandardsSearchAlignedContentResults'); + const screenshotDir = path.join('screenshots', 'myStandardsSearchAlignedContent'); if (fs.existsSync(screenshotDir)) { fs.rmSync(screenshotDir, { recursive: true, force: true }); } fs.mkdirSync(screenshotDir, { recursive: true }); //Remove old Excel file - if (fs.existsSync('myStandardsSearchAlignedContentResults.xlsx')) { - fs.unlinkSync('myStandardsSearchAlignedContentResults.xlsx'); + if (fs.existsSync(resultsFile)) { + fs.unlinkSync(resultsFile); } + fs.mkdirSync('results', { recursive: true }); }; try { @@ -8352,13 +8353,15 @@ try { try { await step.action(); + + //Log a successful step with no screenshot worksheet = logStep( worksheet, step.description, 'Passed', stepIndex, timestamp, - null + null //No screenshot for passed steps ); } catch (error) { @@ -8402,11 +8405,11 @@ try { //Write the updated worksheet back to the workbook and save it workbook.Sheets['Sheet1'] = worksheet; - XLSX.writeFile(workbook, 'myStandardsSearchAlignedContentResults.xlsx'); + XLSX.writeFile(workbook, resultsFile); } finally { await driver.quit(); } })(); -}; +} export default myStandardsSearch;