diff --git a/index.js b/index.js
index 4ef461c..43fe0c4 100644
--- a/index.js
+++ b/index.js
@@ -5,10 +5,11 @@ import exactLandingPage from './tests/exactLandingPage.js';
//DASHBOARDS
import correlationDashboard from './tests/CorrelationDashboard/correlationDashboard.js';
+ import dashboardMyStandards from './tests/CorrelationDashboard/dashboardMyStandards.js';
import ExACT_dashboardMyContent from './tests/ExACT_dashboardMyContent.js';
import ExACT_dashboardSemanticStandardsComparison from './tests/ExACT_dashboardSemanticStandardsComparison.js';
-import dashboardMyStandards from './tests/dashboardMyStandards.js';
+
import myStandardsSearchAlignedContent from './tests/myStandardsSearchAlignedContent.js';
import myStandardsSearchRelatedStandards from './tests/myStandardsSearchRelatedStandards.js';
@@ -66,6 +67,7 @@ app.get('/', (req, res) => {
DASHBOARD
+
| 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',
+ 'Imports',
+ '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',
+ 'Archived Standards',
+ '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',
+ 'Imports',
+ '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: '2024',
+ expected: {
+ text: '2024',
+ 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',
+ 'NewTicket',
+ 'ECS-2933 Testing On Prod',
+ 'Widget Test',
+ 'ecs31444',
+ 'California Mathematics 1997',
+ 'Georgia Archived Language Arts QA',
+ 'Georgia Current Language Arts QA',
+ 'Georgia Future Language Arts QA',
+ 'create group test',
+ 'IMport Test',
+ 'Georgia WL Import'
+ ];
+ 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',
+ 'Review Screen Open',
+ 'New One For Agust Post Night',
+ 'Post NIght July26',
+ 'create import test'
+ ];
+
+ //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',
+ 'NewTicket',
+ 'ECS-2933 Testing On Prod',
+ 'Widget Test',
+ 'ecs31444',
+ 'California Mathematics 1997',
+ 'Georgia Archived Language Arts QA',
+ 'Georgia Current Language Arts QA',
+ 'Georgia Future Language Arts QA',
+ 'create group test',
+ 'IMport Test',
+ 'Georgia WL Import'
+ ];
+
+ //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 resultsFile = path.join('results', 'dashboardMyStandards.xlsx');
+
+const clearOldResults = () => {
+ //Remove old screenshots
+ const screenshotDir = path.join('screenshots', 'dashboardMyStandards');
+ if (fs.existsSync(screenshotDir)) {
+ fs.rmSync(screenshotDir, { recursive: true, force: true });
+ }
+ fs.mkdirSync(screenshotDir, { recursive: true });
+
+ //Remove old Excel file
+ if (fs.existsSync(resultsFile)) {
+ fs.unlinkSync(resultsFile);
+ }
+ fs.mkdirSync('results', { recursive: true });
+};
+
+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();
+
+ //Log a successful step with no screenshot
+ worksheet = logStep(
+ worksheet,
+ step.description,
+ 'Passed',
+ stepIndex,
+ timestamp,
+ null //No screenshot for passed steps
+ );
+
+ } 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, resultsFile);
+} finally {
+ await driver.quit();
+}
+ })();
+}
+
+export default dashboardMyStandards;