import { Builder, By, Key, until, Select, Browser } from 'selenium-webdriver'; import { Options as ChromeOptions } from 'selenium-webdriver/chrome.js'; import fs from 'fs'; import XLSX from 'xlsx'; import path from 'path'; //Export JUST the steps so other scripts can import them export const myStandardsSearch_AlignedContent = (driver) => [ { description: 'Log Aligned Content start', action: async () => { console.log('------------->| MY STANDARDS - ALIGNED CONTENT SEARCH |<-------------'); console.log('----------->| myStandardsSearch_AlignedContent / CONTINUE |<-------------'); } }, //Search breadcrumb { description: 'Validate Search breadcrumb link text, font, size, and color', action: async () => { const multipleChecks = 'Search breadcrumb link'; const element = await driver.findElement(By.linkText('Search')); //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 === 'Search') { console.log("Passed: Search breadcrumb text link matched as expected"); } else { errors.push(`Expected: "Search" breadcrumb text link; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Search breadcrumb text link font-family matched as expected'); } else { errors.push(`Expected: Search breadcrumb text link font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '13px') { console.log('Passed: Search breadcrumb text link font-size matched as expected'); } else { errors.push(`Expected: Search breadcrumb text link font-size "13px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Search breadcrumb text link color matched as expected'); } else { errors.push(`Expected: Search breadcrumb text link color "rgba(73, 80, 87, 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 breadcrumb { description: 'Validate Standards breadcrumb link text, font, size, and color', action: async () => { const multipleChecks = 'Standards breadcrum'; const element = await driver.findElement(By.css('.breadcrumb-item: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 === 'Standards') { console.log("Passed: Standards breadcrumb text link matched as expected"); } else { errors.push(`Expected: "Standards" breadcrumb text link; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standards breadcrumb text link font-family matched as expected'); } else { errors.push(`Expected: Standards breadcrumb text link font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '13px') { console.log('Passed: Standards breadcrumb text link font-size matched as expected'); } else { errors.push(`Expected: Standards breadcrumb text link font-size "13px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(48, 200, 172, 1)') { console.log('Passed: Standards breadcrumb text link color matched as expected'); } else { errors.push(`Expected: Standards breadcrumb text link color "rgba(48, 200, 172, 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')); } } }, //Save icon { description: 'Validate Save icon', action: async () => { const multipleChecks = 'Save icon'; const element = await driver.findElement(By.css('body > div.container.body > div > div.right_col > div > div.float-right.ml-1 > a:nth-child(1)')); const elementText = await element.getAttribute('title'); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Save icon present'); } else { errors.push('Save icon was not found'); } //text if (elementText === 'Save This Search') { console.log('Passed: Save icon tool-tip matched as expected'); } else { errors.push(`Expected: Save icon tool-tip: "Save This Search"; Actual: "${elementText}"`); } //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')); } } }, //Print icon { description: 'Validate Print icon', action: async () => { const multipleChecks = 'Print icon'; const element = await driver.findElement(By.css('.icon-link > img')); //Get text, font, size, and color const elementText = await element.getAttribute('title'); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Print icon present'); } else { errors.push('Print icon was not found'); } //text if (elementText === 'Print This Page') { console.log('Passed: Print icon tool-tip matched as expected'); } else { errors.push(`Expected: Print icon tool-tip: "Print This Page"; Actual: "${elementText}"`); } //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')); } } }, //Standard Set title { description: 'Validate Standard Set title text, font, size, and color', action: async () => { const multipleChecks = 'Standard Set title'; const element = await driver.findElement(By.css('h1')); //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: Alabama Courses of Study Standard Set title text link matched as expected"); } else { errors.push(`Expected: "Alabama Courses of Study" Standard Set title text link; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Alabama Courses of Study Standard Set title text link font-family matched as expected'); } else { errors.push(`Expected: Alabama Courses of Study Standard Set title text link font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '18.2px') { console.log('Passed: Alabama Courses of Study Standard Set title text link font-size matched as expected'); } else { errors.push(`Expected: Alabama Courses of Study Standard Set title text link font-size "18.2px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(40, 39, 90, 1)') { console.log('Passed: Alabama Courses of Study Standard Set title text link color matched as expected'); } else { errors.push(`Expected: Alabama Courses of Study Standard Set title text link 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')); } } }, //SubjectGrade title { description: 'Validate SubjectGrade title text, font, size, and color', action: async () => { const multipleChecks = 'SubjectGrade title'; const element = await driver.findElement(By.css('strong')); //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 === 'Mathematics - Grade 9') { console.log("Passed: Mathematics - Grade 9 SubjectGrade title text link matched as expected"); } else { errors.push(`Expected: "Mathematics - Grade 9" SubjectGrade title text link; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Mathematics - Grade 9 SubjectGrade title text link font-family matched as expected'); } else { errors.push(`Expected: Mathematics - Grade 9 SubjectGrade title text link font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '13px') { console.log('Passed: Mathematics - Grade 9 SubjectGrade title text link font-size matched as expected'); } else { errors.push(`Expected: Mathematics - Grade 9 SubjectGrade title text link font-size "13px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(40, 39, 90, 1)') { console.log('Passed: Mathematics - Grade 9 SubjectGrade title text link color matched as expected'); } else { errors.push(`Expected: Mathematics - Grade 9 SubjectGrade title text link 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')); } } }, //Info icon { description: 'Validate Info icon', action: async () => { const multipleChecks = 'Info icon'; const element = await driver.findElement(By.css('body > div.container.body > div > div.right_col > div > div:nth-child(5) > a')); //Get text, font, size, and color const elementText = await element.getAttribute('title'); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Info icon present'); } else { errors.push('Info icon was not found'); } //text if (elementText === 'Alignment Modification Help') { console.log('Passed: Info icon tool-tip matched as expected'); } else { errors.push(`Expected: Info icon tool-tip: "Alignment Modification Help"; Actual: "${elementText}"`); } //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 All Correlations button { description: 'Validate Show All Correlations button text, size, and color', action: async () => { const multipleChecks = 'Show All Correlations button'; const element = await driver.findElement(By.css('.btn-primary:nth-child(2)')); //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 === 'Show All Correlations') { console.log('Passed: Show All Correlations button text matched as expected'); } else { errors.push(`Expected: "Show All Correlations"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Show All Correlations button text font-family matched as expected'); } else { errors.push(`Expected: Show All Correlations button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '14px') { console.log('Passed: Show All Correlations button text font-size matched as expected'); } else { errors.push(`Expected: Show All Correlations button text font-size "14px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Show All Correlations button text color matched as expected'); } else { errors.push(`Expected: Show All Correlations button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(48, 200, 172, 1)') { console.log('Passed: Show All Correlations button background color matched as expected'); } else { errors.push(`Expected: Show All Correlations 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')); } } }, //Level 1 Standard title { description: 'Validate Level 1 Standard title text, font, size, color, and background color', action: async () => { const multipleChecks = 'Level 1 Standard title'; const element = await driver.findElement(By.css('.card:nth-child(8) > .card-header')); //Get text, font, size, color, and background 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'); const elementBgColor = await element.getCssValue('background-color') //Track all errors const errors = []; //text if (elementText === 'Mathematical Practices (Grade 9)') { console.log("Passed: Mathematical Practices (Grade 9) Level 1 Standard title text matched as expected"); } else { errors.push(`Expected: "Mathematical Practices (Grade 9)" Level 1 Standard title text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Mathematical Practices (Grade 9) Level 1 Standard title text font-family matched as expected'); } else { errors.push(`Expected: Mathematical Practices (Grade 9) Level 1 Standard title text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '15px') { console.log('Passed: Mathematical Practices (Grade 9) Level 1 Standard title text font-size matched as expected'); } else { errors.push(`Expected: Mathematical Practices (Grade 9) Level 1 Standard title text font-size "15px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Mathematical Practices (Grade 9) Level 1 Standard title text color matched as expected'); } else { errors.push(`Expected: Mathematical Practices (Grade 9) Level 1 Standard title text color "rgba(255, 255, 255, 1)"; Actual: "${elementColor}"`); } //background-color if (elementBgColor === 'rgba(48, 200, 172, 1)') { console.log('Passed: Mathematical Practices (Grade 9) Level 1 Standard title background color matched as expected'); } else { errors.push(`Expected: Mathematical Practices (Grade 9) Level 1 Standard title background color "rgba(48, 200, 172, 1)"; Actual: "${elementBgColor}"`); } //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')); } } }, //Standard Code 1 title { description: 'Validate Standard Code 1, title text, font, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, title'; const element = await driver.findElement(By.xpath('//div[2]/div/b')); //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 === 'MP1') { console.log("Passed: Standard Code 1, title text matched as expected"); } else { errors.push(`Expected: "MP1" Standard Code 1, title text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, title text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, title text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '13px') { console.log('Passed: Standard Code 1, title text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, title text font-size "13px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(40, 39, 90, 1)') { console.log('Passed: Standard Code 1, title text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, 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')); } } }, //Standard Code 1 Description { description: 'Validate Standard Code 1, description text, font, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, description'; const element = await driver.findElement(By.id('stdbox')); //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.includes ('Make sense of problems and persevere in solving them. (Grade 9)')) { console.log("Passed: Standard Code 1, description text matched as expected"); } else { errors.push(`Expected: "Make sense of problems and persevere in solving them. (Grade 9)" Standard Code 1, description text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, description text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, description text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '13px') { console.log('Passed: Standard Code 1, description text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, description text font-size "13px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(40, 39, 90, 1)') { console.log('Passed: Standard Code 1, description text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, description 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')); } } }, //Standard Code 1 Tools button { description: 'Validate Standard Code 1, Tools button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Tools button'; const elementIcon = await driver.findElement(By.xpath(`//div[@id='stdbox']/div/div/button/i`)); const element = await driver.findElement(By.css('#stdbox > div.pull-right > div > button')); const elementExpandIcon = await driver.findElement(By.xpath(`(//button[@type='button'])[4]`)); //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 = []; //icon if (elementIcon) { console.log('Passed: Standard Code 1, tools button icon found') } else { errors.push('FAILED: Standard Code 1 tools button icon not found') } //text if (elementText === 'Tools') { console.log('Passed: Standard Code 1, Tools button text matched as expected'); } else { errors.push(`Expected: Standard Code 1, "Tools"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Tools button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Tools button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '16px') { console.log('Passed: Standard Code 1, Tools button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Tools button text font-size "16px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Tools button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Tools button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(48, 200, 172, 1)') { console.log('Passed: Standard Code 1, Tools button background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Tools button background color: "rgba(48, 200, 172, 1)"; Actual: "${elementButtonColor}"`); } //expand icon if (elementExpandIcon) { console.log('Passed: Standard Code 1, Tools expand button icon found') } else { errors.push('FAILED: Standard Code 1, Tools expand button 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')); } } }, //Standard Code 1 Aligned Content button { description: 'Validate Standard Code 1, Aligned Content 8 button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Aligned Content 8 button'; const element = await driver.findElement(By.id('corr-1439152630-tab')); const elementExpandIcon = await driver.findElement(By.id('colstate1439152630')); //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 === 'Aligned Content 8') { console.log('Passed: Standard Code 1, Aligned Content 8 button text matched as expected'); } else { errors.push(`Expected: "Aligned Content 8"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Aligned Content 8 button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Aligned Content 8 button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '15px') { console.log('Passed: Standard Code 1, Aligned Content 8 button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Aligned Content 8 button text font-size "15px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Aligned Content 8 button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Aligned Content 8 button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(40, 39, 90, 1)') { console.log('Passed: Standard Code 1, Aligned Content 8 button background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Aligned Content 8 button background color: "rgba(40, 39, 90, 1)"; Actual: "${elementButtonColor}"`); } //expand icon if (elementExpandIcon) { console.log('Passed: Standard Code 1, Aligned Content 8 expand button icon found') } else { errors.push('FAILED: Standard Code 1, Aligned Content 8 expand button 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')); } } }, //Standard Code 1 Related Standards button { description: 'Validate Standard Code 1, Related Standards 26 button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Related Standards 26 button'; const element = await driver.findElement(By.css('#rel-1439152630-tab')); //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 === 'Related Standards 26') { console.log('Passed: Standard Code 1, Related Standards 26 button text matched as expected'); } else { errors.push(`Expected: "Related Standards 26"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Related Standards 26 button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Related Standards 26 button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '15px') { console.log('Passed: Standard Code 1, Related Standards 26 button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Related Standards 26 button text font-size "15px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(182, 186, 181, 1)') { console.log('Passed: Standard Code 1, Related Standards 26 button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Related Standards 26 button text color: "rgba(182, 186, 181, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(0, 0, 0, 0)') { console.log('Passed: Standard Code 1, Related Standards 26 button background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Related Standards 26 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')); } } }, //Standard Code 1 Add Direct Alignment button { description: 'Validate Standard Code 1, Add Direct Alignment button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Add Direct Alignment button'; const elementIcon = await driver.findElement(By.css('#add-1439152630-tab > .fa')); const element = await driver.findElement(By.css('#add-1439152630-tab')); //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 = []; //icon if (elementIcon) { console.log('Passed: Standard Code 1, Add Direct Alignment button icon found') } else { errors.push('FAILED: Standard Code 1, Add Direct Alignment button icon not found') } //text if (elementText === 'Add Direct Alignment') { console.log('Passed: Standard Code 1, Add Direct Alignment button text matched as expected'); } else { errors.push(`Expected: "Add Direct Alignment"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Add Direct Alignment button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Add Direct Alignment button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '15px') { console.log('Passed: Standard Code 1, Add Direct Alignment button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Add Direct Alignment button text font-size "15px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(182, 186, 181, 1)') { console.log('Passed: Standard Code 1, Add Direct Alignment button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Add Direct Alignment button text color: "rgba(182, 186, 181, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(0, 0, 0, 0)') { console.log('Passed: Standard Code 1, Add Direct Alignment button background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Add Direct Alignment 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: 'Click to expand Aligned Content for Standard Code 1', action: async () => { //Standard Code 1 Aligned Content await driver.findElement(By.id('corr-1439152630-tab')).click(); console.log('----->| NEXT ACTION: Clicked Standard Code 1 Aligned Content button'); //Wait until the element exists in the DOM const openAlignmentNewWindow = await driver.wait( until.elementLocated(By.css('#opennew1439152630')), 30000 ); //Wait until it becomes visible await driver.wait( until.elementIsVisible(openAlignmentNewWindow), 30000 ); } }, //Standard Code 1 Open Alignments in New Window button { description: 'Validate Standard Code 1, Open Alignments in New Window button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 1 Open Alignments in New Window button'; const elementIcon = await driver.findElement(By.css('.fa-external-link')); const element = await driver.findElement(By.css('#opennew1439152630')); //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 = []; //icon if (elementIcon) { console.log('Passed: Standard Code 1, Open Alignments in New Window button icon found') } else { errors.push('FAILED: Standard Code 1, Open Alignments in New Window button icon not found') } //text if (elementText === 'Open Alignments in New Window') { console.log('Passed: Standard Code 1, Open Alignments in New Window button text matched as expected'); } else { errors.push(`Expected: Standard Code 1, "Open Alignments in New Window"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Open Alignments in New Window button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, "Open Alignments in New Window" button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '14px') { console.log('Passed: Standard Code 1, Open Alignments in New Window button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, "Open Alignments in New Window" button text font-size "14px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Open Alignments in New Window button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, "Open Alignments in New Window" button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(48, 200, 172, 1)') { console.log('Passed: Standard Code 1, Open Alignments in New Window button background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, "Open Alignments in New Window" 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')); } } }, //Standard Code 1 Subject column header { description: 'Validate Standard Code 1, Subject column header text, font, size, color, and background color', action: async () => { const multipleChecks = 'Standard Code 1 Subject column header'; const element = await driver.findElement(By.css('td > b')); //Get text, font, size, color, and background 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'); const elementBgColor = await element.getCssValue('background-color'); //Track all errors const errors = []; //text if (elementText === ('Algebra')) { console.log("Passed: Standard Code 1, Subject column header text matched as expected"); } else { errors.push(`Expected: Standard Code 1, Subject column header "Algebra" text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Subject column header text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Subject column header text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, Subject column header text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Subject column header text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(33, 37, 41, 1)') { console.log('Passed: Standard Code 1, Subject column header text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Subject column header text color "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); } //background color if (elementBgColor === 'rgba(0, 0, 0, 0)') { console.log('Passed: Standard Code 1, Subject column header text background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Subject column header text background color "rgba(0, 0, 0, 0)"; Actual: "${elementBgColor}"`); } //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')); } } }, //Standard Code 1, K column header { description: 'Validate Standard Code 1, K column header text, font, size, color, and background color', action: async () => { const multipleChecks = 'Standard Code 1, K column header'; const element = await driver.findElement(By.css('.text-center:nth-child(2)')); //Get text, font, size, color, and background 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'); const elementBgColor = await element.getCssValue('background-color'); //Track all errors const errors = []; //text if (elementText === ('K')) { console.log("Passed: Standard Code 1, K column header text matched as expected"); } else { errors.push(`Expected: Standard Code 1, K column header "K" text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, K column header text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, K column header text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, K column header text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, K column header text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(33, 37, 41, 1)') { console.log('Passed: Standard Code 1, K column header text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, K column header text color "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); } //background color if (elementBgColor === 'rgba(0, 0, 0, 0)') { console.log('Passed: Standard Code 1, K column header text background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, K column header text background color "rgba(0, 0, 0, 0)"; Actual: "${elementBgColor}"`); } //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')); } } }, //Standard Code 1, 1 column header { description: 'Validate Standard Code 1, 1 column header text, font, size, color, and background color', action: async () => { const multipleChecks = 'Standard Code 1, 1 column header'; const element = await driver.findElement(By.css('.text-center:nth-child(3)')); //Get text, font, size, color, and background 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'); const elementBgColor = await element.getCssValue('background-color'); //Track all errors const errors = []; //text if (elementText === ('1')) { console.log("Passed: Standard Code 1, 1 column header text matched as expected"); } else { errors.push(`Expected: Standard Code 1, 1 column header "1" text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, 1 column header text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, 1 column header text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, 1 column header text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, 1 column header text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(33, 37, 41, 1)') { console.log('Passed: Standard Code 1, 1 column header text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, 1 column header text color "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); } //background color if (elementBgColor === 'rgba(0, 0, 0, 0)') { console.log('Passed: Standard Code 1, 1 column header text background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, 1 column header text background color "rgba(0, 0, 0, 0)"; Actual: "${elementBgColor}"`); } //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')); } } }, //Standard Code 1, 2 column header { description: 'Validate Standard Code 1, 2 column header text, font, size, color, and background color', action: async () => { const multipleChecks = 'Standard Code 1, 2 column header'; const element = await driver.findElement(By.css('.text-center:nth-child(4)')); //Get text, font, size, color, and background 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'); const elementBgColor = await element.getCssValue('background-color'); //Track all errors const errors = []; //text if (elementText === ('2')) { console.log("Passed: Standard Code 1, 2 column header text matched as expected"); } else { errors.push(`Expected: Standard Code 1, 2 column header "2" text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, 2 column header text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, 2 column header text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, 2 column header text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, 2 column header text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(33, 37, 41, 1)') { console.log('Passed: Standard Code 1, 2 column header text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, 2 column header text color "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); } //background color if (elementBgColor === 'rgba(0, 0, 0, 0)') { console.log('Passed: Standard Code 1, 2 column header text background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, 2 column header text background color "rgba(0, 0, 0, 0)"; Actual: "${elementBgColor}"`); } //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')); } } }, //Standard Code 1, 3 column header { description: 'Validate Standard Code 1, 3 column header text, font, size, color, and background color', action: async () => { const multipleChecks = 'Standard Code 1, 3 column header'; const element = await driver.findElement(By.css('tr:nth-child(1) > .text-center:nth-child(5)')); //Get text, font, size, color, and background 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'); const elementBgColor = await element.getCssValue('background-color'); //Track all errors const errors = []; //text if (elementText === ('3')) { console.log("Passed: Standard Code 1, 3 column header text matched as expected"); } else { errors.push(`Expected: Standard Code 1, 3 column header "3" text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, 3 column header text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, 3 column header text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, 3 column header text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, 3 column header text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(33, 37, 41, 1)') { console.log('Passed: Standard Code 1, 3 column header text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, 3 column header text color "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); } //background color if (elementBgColor === 'rgba(0, 0, 0, 0)') { console.log('Passed: Standard Code 1, 3 column header text background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, 3 column header text background color "rgba(0, 0, 0, 0)"; Actual: "${elementBgColor}"`); } //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')); } } }, //Standard Code 1, 4 column header { description: 'Validate Standard Code 1, 4 column header text, font, size, color, and background color', action: async () => { const multipleChecks = 'Standard Code 1, 4 column header'; const element = await driver.findElement(By.css('tr:nth-child(1) > .text-center:nth-child(6)')); //Get text, font, size, color, and background 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'); const elementBgColor = await element.getCssValue('background-color'); //Track all errors const errors = []; //text if (elementText === ('4')) { console.log("Passed: Standard Code 1, 4 column header text matched as expected"); } else { errors.push(`Expected: Standard Code 1, 4 column header "4" text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, 4 column header text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, 4 column header text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, 4 column header text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, 4 column header text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(33, 37, 41, 1)') { console.log('Passed: Standard Code 1, 4 column header text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, 4 column header text color "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); } //background color if (elementBgColor === 'rgba(0, 0, 0, 0)') { console.log('Passed: Standard Code 1, 4 column header text background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, 4 column header text background color "rgba(0, 0, 0, 0)"; Actual: "${elementBgColor}"`); } //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')); } } }, //Standard Code 1, 5 column header { description: 'Validate Standard Code 1, 5 column header text, font, size, color, and background color', action: async () => { const multipleChecks = 'Standard Code 1, 5 column header'; const element = await driver.findElement(By.css('tr:nth-child(1) > .text-center:nth-child(7)')); //Get text, font, size, color, and background 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'); const elementBgColor = await element.getCssValue('background-color'); //Track all errors const errors = []; //text if (elementText === ('5')) { console.log("Passed: Standard Code 1, 5 column header text matched as expected"); } else { errors.push(`Expected: Standard Code 1, 5 column header "5" text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, 5 column header text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, 5 column header text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, 5 column header text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, 5 column header text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(33, 37, 41, 1)') { console.log('Passed: Standard Code 1, 5 column header text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, 5 column header text color "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); } //background color if (elementBgColor === 'rgba(0, 0, 0, 0)') { console.log('Passed: Standard Code 1, 5 column header text background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, 5 column header text background color "rgba(0, 0, 0, 0)"; Actual: "${elementBgColor}"`); } //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')); } } }, //Standard Code 1, 6 column header { description: 'Validate Standard Code 1, 6 column header text, font, size, color, and background color', action: async () => { const multipleChecks = 'Standard Code 1, 6 column header'; const element = await driver.findElement(By.css('tr:nth-child(1) > .text-center:nth-child(8)')); //Get text, font, size, color, and background 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'); const elementBgColor = await element.getCssValue('background-color'); //Track all errors const errors = []; //text if (elementText === ('6')) { console.log("Passed: Standard Code 1, 6 column header text matched as expected"); } else { errors.push(`Expected: Standard Code 1, 6 column header "6" text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, 6 column header text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, 6 column header text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, 6 column header text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, 6 column header text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(33, 37, 41, 1)') { console.log('Passed: Standard Code 1, 6 column header text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, 6 column header text color "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); } //background color if (elementBgColor === 'rgba(0, 0, 0, 0)') { console.log('Passed: Standard Code 1, 6 column header text background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, 6 column header text background color "rgba(0, 0, 0, 0)"; Actual: "${elementBgColor}"`); } //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')); } } }, //Standard Code 1, 7 column header { description: 'Validate Standard Code 1, 7 column header text, font, size, color, and background color', action: async () => { const multipleChecks = 'Standard Code 1, 7 column header'; const element = await driver.findElement(By.css('tr:nth-child(1) > .text-center:nth-child(9)')); //Get text, font, size, color, and background 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'); const elementBgColor = await element.getCssValue('background-color'); //Track all errors const errors = []; //text if (elementText === ('7')) { console.log("Passed: Standard Code 1, 7 column header text matched as expected"); } else { errors.push(`Expected: Standard Code 1, 7 column header "7" text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, 7 column header text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, 7 column header text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, 7 column header text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, 7 column header text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(33, 37, 41, 1)') { console.log('Passed: Standard Code 1, 7 column header text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, 7 column header text color "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); } //background color if (elementBgColor === 'rgba(0, 0, 0, 0)') { console.log('Passed: Standard Code 1, 7 column header text background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, 7 column header text background color "rgba(0, 0, 0, 0)"; Actual: "${elementBgColor}"`); } //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')); } } }, //Standard Code 1, 8 column header { description: 'Validate Standard Code 1, 8 column header text, font, size, color, and background color', action: async () => { const multipleChecks = 'Standard Code 1, 8 column header'; const element = await driver.findElement(By.css('tr:nth-child(1) > .text-center:nth-child(10)')); //Get text, font, size, color, and background 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'); const elementBgColor = await element.getCssValue('background-color'); //Track all errors const errors = []; //text if (elementText === ('8')) { console.log("Passed: Standard Code 1, 8 column header text matched as expected"); } else { errors.push(`Expected: Standard Code 1, 8 column header "8" text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, 8 column header text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, 8 column header text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, 8 column header text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, 8 column header text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(33, 37, 41, 1)') { console.log('Passed: Standard Code 1, 8 column header text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, 8 column header text color "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); } //background color if (elementBgColor === 'rgba(0, 0, 0, 0)') { console.log('Passed: Standard Code 1, 8 column header text background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, 8 column header text background color "rgba(0, 0, 0, 0)"; Actual: "${elementBgColor}"`); } //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')); } } }, //Standard Code 1, 9 column header { description: 'Validate Standard Code 1, 9 column header text, font, size, color, and background color', action: async () => { const multipleChecks = 'Standard Code 1, 9 column header'; const element = await driver.findElement(By.css('tr:nth-child(1) > .text-center:nth-child(11)')); //Get text, font, size, color, and background 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'); const elementBgColor = await element.getCssValue('background-color'); //Track all errors const errors = []; //text if (elementText === ('9')) { console.log("Passed: Standard Code 1, 9 column header text matched as expected"); } else { errors.push(`Expected: Standard Code 1, 9 column header "9" text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, 9 column header text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, 9 column header text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, 9 column header text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, 9 column header text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(33, 37, 41, 1)') { console.log('Passed: Standard Code 1, 9 column header text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, 9 column header text color "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); } //background color if (elementBgColor === 'rgba(237, 250, 238, 1)') { console.log('Passed: Standard Code 1, 9 column header text background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, 9 column header text background color "rgba(237, 250, 238, 1)"; Actual: "${elementBgColor}"`); } //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')); } } }, //Standard Code 1, 10 column header { description: 'Validate Standard Code 1, 10 column header text, font, size, color, and background color', action: async () => { const multipleChecks = 'Standard Code 1, 10 column header'; const element = await driver.findElement(By.css('tr:nth-child(1) > .text-center:nth-child(12)')); //Get text, font, size, color, and background 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'); const elementBgColor = await element.getCssValue('background-color'); //Track all errors const errors = []; //text if (elementText === ('10')) { console.log("Passed: Standard Code 1, 10 column header text matched as expected"); } else { errors.push(`Expected: Standard Code 1, 10 column header "10" text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, 10 column header text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, 10 column header text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, 10 column header text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, 10 column header text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(33, 37, 41, 1)') { console.log('Passed: Standard Code 1, 10 column header text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, 10 column header text color "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); } //background color if (elementBgColor === 'rgba(0, 0, 0, 0)') { console.log('Passed: Standard Code 1, 10 column header text background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, 10 column header text background color "rgba(0, 0, 0, 0)"; Actual: "${elementBgColor}"`); } //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')); } } }, //Standard Code 1, 11 column header { description: 'Validate Standard Code 1, 11 column header text, font, size, color, and background color', action: async () => { const multipleChecks = 'Standard Code 1, 11 column header'; const element = await driver.findElement(By.css('tr:nth-child(1) > .text-center:nth-child(13)')); //Get text, font, size, color, and background 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'); const elementBgColor = await element.getCssValue('background-color'); //Track all errors const errors = []; //text if (elementText === ('11')) { console.log("Passed: Standard Code 1, 11 column header text matched as expected"); } else { errors.push(`Expected: Standard Code 1, 11 column header "11" text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, 11 column header text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, 11 column header text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, 11 column header text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, 11 column header text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(33, 37, 41, 1)') { console.log('Passed: Standard Code 1, 11 column header text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, 11 column header text color "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); } //background color if (elementBgColor === 'rgba(0, 0, 0, 0)') { console.log('Passed: Standard Code 1, 11 column header text background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, 11 column header text background color "rgba(0, 0, 0, 0)"; Actual: "${elementBgColor}"`); } //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')); } } }, //Standard Code 1, 12 column header { description: 'Validate Standard Code 1, 12 column header text, font, size, color, and background color', action: async () => { const multipleChecks = 'Standard Code 1, 12 column header'; const element = await driver.findElement(By.css('tr:nth-child(1) > .text-center:nth-child(14)')); //Get text, font, size, color, and background 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'); const elementBgColor = await element.getCssValue('background-color'); //Track all errors const errors = []; //text if (elementText === ('12')) { console.log("Passed: Standard Code 1, 12 column header text matched as expected"); } else { errors.push(`Expected: Standard Code 1, 12 column header "12" text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, 12 column header text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, 12 column header text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, 12 column header text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, 12 column header text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(33, 37, 41, 1)') { console.log('Passed: Standard Code 1, 12 column header text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, 12 column header text color "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); } //background color if (elementBgColor === 'rgba(0, 0, 0, 0)') { console.log('Passed: Standard Code 1, 12 column header text background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, 12 column header text background color "rgba(0, 0, 0, 0)"; Actual: "${elementBgColor}"`); } //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')); } } }, //Standard Code 1, Select column header { description: 'Validate Standard Code 1, Select column header text, font, size, color, and background color', action: async () => { const multipleChecks = 'Standard Code 1, Select column header'; const element = await driver.findElement(By.css('tr:nth-child(1) > .text-center:nth-child(15)')); //Get text, font, size, color, and background 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'); const elementBgColor = await element.getCssValue('background-color'); //Track all errors const errors = []; //text if (elementText === ('Select')) { console.log("Passed: Standard Code 1, Select column header text matched as expected"); } else { errors.push(`Expected: Standard Code 1, Select column header "Select" text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Select column header text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Select column header text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, Select column header text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Select column header text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(33, 37, 41, 1)') { console.log('Passed: Standard Code 1, Select column header text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Select column header text color "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); } //background color if (elementBgColor === 'rgba(0, 0, 0, 0)') { console.log('Passed: Standard Code 1, Select column header text background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Select column header text background color "rgba(0, 0, 0, 0)"; Actual: "${elementBgColor}"`); } //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')); } } }, //Standard Code 1, Clear column header { description: 'Validate Standard Code 1, Clear column header text, font, size, color, and background color', action: async () => { const multipleChecks = 'Standard Code 1, Clear column header'; const element = await driver.findElement(By.css('tr:nth-child(1) > .text-center:nth-child(16)')); //Get text, font, size, color, and background 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'); const elementBgColor = await element.getCssValue('background-color'); //Track all errors const errors = []; //text if (elementText === ('Clear')) { console.log("Passed: Standard Code 1, Clear column header text matched as expected"); } else { errors.push(`Expected: Standard Code 1, Clear column header "Clear" text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Clear column header text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Clear column header text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, Clear column header text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Clear column header text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(33, 37, 41, 1)') { console.log('Passed: Standard Code 1, Clear column header text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Clear column header text color "rgba(33, 37, 41, 1)"; Actual: "${elementColor}"`); } //background color if (elementBgColor === 'rgba(0, 0, 0, 0)') { console.log('Passed: Standard Code 1, Clear column header text background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Clear column header text background color "rgba(0, 0, 0, 0)"; Actual: "${elementBgColor}"`); } //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')); } } }, //Content Item 1, link title { description: 'Validate Content Item 1, link title text, font, size, color, and URL', action: async () => { const multipleChecks = 'Content Item 1 link title'; const element = await driver.findElement(By.linkText('ANOVA 1: Calculating SST (total sum of squares) (Video2)')); //Get text, font, size, color, and background 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'); const elementURL = await element.getAttribute('href'); //Track all errors const errors = []; //text if (elementText === ('ANOVA 1: Calculating SST (total sum of squares) (Video2)')) { console.log("Passed: Content Item 1, link title text matched as expected"); } else { errors.push(`Expected: "ANOVA 1: Calculating SST (total sum of squares) (Video2)" Content Item 1, link title text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Content Item 1, link title text font-family matched as expected'); } else { errors.push(`Expected: Content Item 1, link title text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Content Item 1, link title text font-size matched as expected'); } else { errors.push(`Expected: Content Item 1, link title text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Content Item 1, link title text color matched as expected'); } else { errors.push(`Expected: Content Item 1, link title text color "rgba(73, 80, 87, 1)"; Actual: "${elementColor}"`); } //url if (elementURL === 'https://www.khanacademy.org/math/statistics-probability/analysis-of-variance-anova-library/analysis-of-variance-anova/v/anova-1-calculating-sst-total-sum-of-squares') { console.log('Passed: Content Item 1, link title URL matched as expected'); } else { errors.push(`Expected: Content Item 1, link title URL: "https://www.khanacademy.org/math/statistics-probability/analysis-of-variance-anova-library/analysis-of-variance-anova/v/anova-1-calculating-sst-total-sum-of-squares"; 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')); } } }, //Content Item 1, Info icon tool-tip { description: 'Validate Content Item 1, Info icon tool tip', action: async () => { const multipleChecks = 'Content Item 1, Info icon tool-tip'; const element = await driver.findElement(By.css('#title14391526301162119834 > a:nth-child(2)')); //Get text, font, size, and color const elementText = await element.getAttribute('title'); 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 = []; //font if (elementText === 'Click to view item description') { console.log('Passed: Content Item 1, Info icon tool-tip text matched as expected'); } else { errors.push(`Expected: Content Item 1, Info icon tool-tip text "Click to view item description"; Actual: ${elementText}`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Content Item 1, Info icon tool-tip text font-family matched as expected'); } else { errors.push(`Expected: Content Item 1, Info icon tool-tip text font-family "Click to view item description"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Content Item 1, Info icon tool-tip text font-size matched as expected'); } else { errors.push(`Expected: Content Item 1, Info icon tool-tip text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Content Item 1, Info icon tool-tip text color matched as expected'); } else { errors.push(`Expected: Content Item 1, Info icon tool-tip text color "rgba(73, 80, 87, 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: 'Click to info-icon for Standard Code 1', action: async () => { //Standard Code 1 Aligned Content await driver.findElement(By.css('#title14391526301162119834 > a:nth-child(2)')).click(); console.log('----->| NEXT ACTION: Clicked Standard Code 1 Info icon'); //Wait until the element exists in the DOM const infoDescription = await driver.wait( until.elementLocated(By.css('#descr14391526301162119834')), 30000 ); //Wait until it becomes visible await driver.wait( until.elementIsVisible(infoDescription), 30000 ); } }, //Standard Code 1, Info description { description: 'Validate Standard Code 1, Info description text, font, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Info description'; const element = await driver.findElement(By.css('#descr14391526301162119834')); //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 === (`You already know a good bit about hypothesis testing with one or two samples. Now we take things further by making inferences based on three or more samples. We'll use the very special F-distribution to do it (F stands for "fabulous").`)) { console.log("Passed: Standard Code 1, Description text matched as expected"); } else { errors.push(`Expected: Standard Code 1, Description "You already know a good bit about hypothesis testing with one or two samples. Now we take things further by making inferences based on three or more samples. We'll use the very special F-distribution to do it (F stands for "fabulous")." text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Description text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Description text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '12.87px') { console.log('Passed: Standard Code 1, Description text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Description text font-size "12.87px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(33, 37, 41, 1)') { console.log('Passed: Standard Code 1, Description text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Description 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')); } } }, //Standard Code 1, Content Item 1, Primary badge { description: 'Validate Standard Code 1, Content Item 1, Primary badge text, font, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 1, Primary badge'; const element = await driver.findElement(By.css('#title14391526301162119834 > .badge')); //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 = []; //font if (elementText === 'Primary') { console.log('Passed: Standard Code 1, Content Item 1, Primary badge text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 1, Primary badge text font-family "Primary"; Actual: ${elementText}`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 1, Primary badge text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 1, Primary badge text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '12.87px') { console.log('Passed: Standard Code 1, Content Item 1, Primary badge text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 1, Primary badge text font-size "12.87px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 1, Primary badge text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 1, Primary badge text color "rgba(255, 255, 255, 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')); } } }, //Standard Code 1, Content Item 1, tags tool-tip { description: 'Validate Standard Code 1, Content Item 1, tags tool-tip text, font, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 1, tags tool-tip'; const element = await driver.findElement(By.css('#title14391526301162119834 > .fa')); //Get text, font, size, and color const elementText = await element.getAttribute('title'); 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 Matching Concepts')) { console.log("Passed: Standard Code 1, Content Item 1, tags tool-tip text matched as expected"); } else { errors.push(`Expected: Standard Code 1, Content Item 1, tags tool-tip text "View Matching Concepts"; Actual: "${elementText}"`); } //font if (elementFont === 'FontAwesome') { console.log('Passed: Standard Code 1, Content Item 1, tags tool-tip text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 1, tags tool-tip text font-family "FontAwesome"; Actual: ${elementFont}`); } //size if (elementSize === '20px') { console.log('Passed: Standard Code 1, Content Item 1, tags tool-tip text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 1, tags tool-tip text font-size "20px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Standard Code 1, Content Item 1, tags tool-tip text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 1, tags tool-tip text color "rgba(73, 80, 87, 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: 'Click to tags icon for Standard Code 1', action: async () => { //Standard Code 1 Aligned Content await driver.findElement(By.css('#title14391526301162119834 > .fa')).click(); console.log('----->| NEXT ACTION: Clicked Standard Code 1 Tags icon'); //Wait until the element exists in the DOM const tagsDescription = await driver.wait( until.elementLocated(By.css('#concept_div14391526301162119834 > h6')), 30000 ); //Wait until it becomes visible await driver.wait( until.elementIsVisible(tagsDescription), 30000 ); } }, //Standard Code 1, Tag Title { description: 'Validate Standard Code 1, Tag Title text, font, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Tag Title'; const element = await driver.findElement(By.css('#concept_div14391526301162119834 > h6')); //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 === ('Alignment created by these matching concepts')) { console.log("Passed: Standard Code 1, Tag Title text matched as expected"); } else { errors.push(`Expected: Standard Code 1, Tag Title "Alignment created by these matching concepts" text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Tag Title text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Tag Title text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '14px') { console.log('Passed: Standard Code 1, Tag Title text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Tag Title text font-size "14px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(33, 37, 41, 1)') { console.log('Passed: Standard Code 1, Tag Title text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Tag 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')); } } }, //Standard Code 1, Concept 1 Primary toggle button { description: 'Verify Standard Code 1, Concept 1 Primary toggle button is present', action: async () => { const multipleChecks = 'Standard Code 1, Concept 1 Primary toggle button'; //Get the switch-toggle div class const toggleClass = await driver.executeScript(` const listItem = document.querySelector('#concept-1162119834-1439152630-168638762'); const toggle = listItem ? listItem.querySelector('div.switch-toggle') : null; return toggle ? toggle.className : 'not found'; `); //Get the checkbox input's checked state const checkboxChecked = await driver.findElement(By.css('#switch1162119834-1439152630-168638762')).getAttribute('checked'); //Track all errors const errors = []; //Validate it's a toggle not a regular button if (toggleClass.includes('switch-toggle')) { console.log('Passed: Standard Code 1, Concept 1, Primary toggle button toggle switch listed as expected'); } else { errors.push(`Expected: Standard Code 1, Concept 1, Primary toggle button: "switch-toggle"; Actual: "${toggleClass}"`); } //Validate toggle is disabled (not the primary concept) if (!checkboxChecked) { console.log('Passed: Standard Code 1, Concept 1, Primary toggle button is disabled as expected'); } else { errors.push(`Expected: Standard Code 1, Concept 1, Primary toggle button to be disabled; Actual: checked="${checkboxChecked}"`); } //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')); } } }, //Standard Code 1, Concept 1 Tagged alignment 1 breadcrumb { description: 'Validate Standard Code 1, Concept 1, Tagged alignment 1 breadcrumb text, font, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Concept 1 Tagged alignment 1 breadcrumb'; const element = await driver.findElement(By.css('#concept-1162119834-1439152630-168638762 > td: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 === ('Mathematics | Process Standards | Problem Solving | Methods/Steps/Strategies')) { console.log("Passed: Standard Code 1, Concept 1, Tagged alignment 1 breadcrumb text matched as expected"); } else { errors.push(`Expected: Standard Code 1, Concept 1, Tagged alignment 1 breadcrumb "Mathematics | Process Standards | Problem Solving | Methods/Steps/Strategies" text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Concept 1, Tagged alignment 1 breadcrumb text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Concept 1, Tagged alignment 1 breadcrumb text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '12px') { console.log('Passed: Standard Code 1, Concept 1, Tagged alignment 1 breadcrumb text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Concept 1, Tagged alignment 1 breadcrumb text font-size "12px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(33, 37, 41, 1)') { console.log('Passed: Standard Code 1, Concept 1, Tagged alignment 1 breadcrumb text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Concept 1, Tagged alignment 1 breadcrumb 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: 'Click to delete tagged concept 1', action: async () => { //Standard Code 1 Aligned Content await driver.findElement(By.css('#concept-1162119834-1439152630-168638762 .fa')).click(); console.log('----->| NEXT ACTION: Clicked Standard Code 1, Tagged Concept 1 delete icon'); //Wait until the element exists in the DOM const removeConceptDIV = await driver.wait( until.elementLocated(By.css('#toast-1162119834-1439152630-168638762 .mr-auto')), 30000 ); //Wait until it becomes visible await driver.wait( until.elementIsVisible(removeConceptDIV), 30000 ); } }, //Standard Code 1, Concept 1, tagged alert DIV { description: 'Validate Standard Code 1, Concept 1, tagged alert DIV text, font, size, color, background color, and delete icon', action: async () => { const multipleChecks = 'Standard Code 1, Concept 1, tagged alert DIV'; const element = await driver.findElement(By.css('#toast-1162119834-1439152630-168638762 .mr-auto')); const elementIcon = await driver.findElement(By.css('#toast-1162119834-1439152630-168638762 span')); //Get text, font, size, color, and background 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'); const elementBgColor = await element.getCssValue('background-color'); //Track all errors const errors = []; //text if (elementText === ('Remove Concept')) { console.log("Passed: Standard Code 1, Concept 1, tagged alert DIV title text matched as expected"); } else { errors.push(`Expected: Standard Code 1, Concept 1, tagged alert DIV title "Remove Concept" text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Concept 1, tagged alert DIV title text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Concept 1, tagged alert DIV title text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '10px') { console.log('Passed: Standard Code 1, Concept 1, tagged alert DIV title text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Concept 1, tagged alert DIV title text font-size "10px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Concept 1, tagged alert DIV title text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Concept 1, tagged alert DIV title text color "rgba(255, 255, 255, 1)"; Actual: "${elementColor}"`); } //background color if (elementBgColor === 'rgba(0, 0, 0, 0)') { console.log('Passed: Standard Code 1, Concept 1, tagged alert DIV title background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Concept 1, tagged alert DIV title background color "rgba(0, 0, 0, 0)"; Actual: "${elementBgColor}"`); } //close icon if (elementIcon) { console.log('Passed: Standard Code 1, Concept 1, tagged alert DIV delete icon is present as expected'); } else { errors.push('Expected: Standard Code 1, Concept 1, tagged alert DIV delete icon was 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')); } } }, //Standard Code 1, Concept 1, tagged alert DIV warning message { description: 'Validate Standard Code 1, Concept 1, tagged alert DIV warning message text, font, size, color, background color, and delete icon', action: async () => { const multipleChecks = 'Standard Code 1, Concept 1, tagged alert DIV warning message'; const element = await driver.findElement(By.css('#toast-1162119834-1439152630-168638762 > .toast-body > div')); const elementYesButton = await driver.findElement(By.css('#toast-1162119834-1439152630-168638762 > .toast-body > button:nth-child(2)')); const elementNoButton = await driver.findElement(By.css('#toast-1162119834-1439152630-168638762 .btn')); //Get warning message text, font, size, color, and background 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'); const elementBgColor = await element.getCssValue('background-color'); //Get Yes button text, font, size, color, and background color const elementYesText = await elementYesButton.getText(); const elementYesFont = await elementYesButton.getCssValue('font-family'); const elementYesSize = await elementYesButton.getCssValue('font-size'); const elementYesColor = await elementYesButton.getCssValue('color'); const elementYesBgColor = await elementYesButton.getCssValue('background-color'); //Get No button text, font, size, color, and background color const elementNoText = await elementNoButton.getText(); const elementNoFont = await elementNoButton.getCssValue('font-family'); const elementNoSize = await elementNoButton.getCssValue('font-size'); const elementNoColor = await elementNoButton.getCssValue('color'); const elementNoBgColor = await elementNoButton.getCssValue('background-color'); //Track all errors const errors = []; //warning text if (elementText === ('Are you sure you want to remove this concept from this item? This will affect alignments on other standards as well.')) { console.log("Passed: Standard Code 1, Concept 1, tagged alert DIV warning message text matched as expected"); } else { errors.push(`Expected: Standard Code 1, Concept 1, tagged alert DIV warning message "Are you sure you want to remove this concept from this item? This will affect alignments on other standards as well." text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Concept 1, tagged alert DIV warning message text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Concept 1, tagged alert DIV warning message text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '12px') { console.log('Passed: Standard Code 1, Concept 1, tagged alert DIV warning message text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Concept 1, tagged alert DIV warning message text font-size "12px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Standard Code 1, Concept 1, tagged alert DIV warning message text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Concept 1, tagged alert DIV warning message text color "rgba(73, 80, 87, 1)"; Actual: "${elementColor}"`); } //yes button text if (elementYesText === ('Yes')) { console.log("Passed: Standard Code 1, Concept 1, tagged alert DIV Yes warning button text matched as expected"); } else { errors.push(`Expected: Standard Code 1, Concept 1, tagged alert DIV Yes warning button "Yes" text; Actual: "${elementYesText}"`); } //font if (elementYesFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Concept 1, tagged alert DIV Yes warning button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Concept 1, tagged alert DIV Yes warning button text font-family "Poppins, sans-serif"; Actual: ${elementYesFont}`); } //size if (elementYesSize === '10px') { console.log('Passed: Standard Code 1, Concept 1, tagged alert DIV Yes warning button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Concept 1, tagged alert DIV Yes warning button text font-size "10px"; Actual: "${elementYesSize}"`); } //color if (elementYesColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Concept 1, tagged alert DIV Yes warning button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Concept 1, tagged alert DIV Yes warning button text color "rgba(255, 255, 255, 1)"; Actual: "${elementYesColor}"`); } //background color if (elementYesBgColor === 'rgba(255, 26, 26, 1)') { console.log('Passed: Standard Code 1, Concept 1, tagged alert DIV Yes warning button background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Concept 1, tagged alert DIV Yes warning button background color "rgba(255, 26, 26, 1)"; Actual: "${elementYesBgColor}"`); } //no button text if (elementNoText === ('No')) { console.log("Passed: Standard Code 1, Concept 1, tagged alert DIV No warning button text matched as expected"); } else { errors.push(`Expected: Standard Code 1, Concept 1, tagged alert DIV No warning button "No" text; Actual: "${elementNoText}"`); } //font if (elementNoFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Concept 1, tagged alert DIV No warning button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Concept 1, tagged alert DIV No warning button text font-family "Poppins, sans-serif"; Actual: ${elementNoFont}`); } //size if (elementNoSize === '10px') { console.log('Passed: Standard Code 1, Concept 1, tagged alert DIV No warning button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Concept 1, tagged alert DIV No warning button text font-size "10px"; Actual: "${elementNoSize}"`); } //color if (elementNoColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Concept 1, tagged alert DIV No warning button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Concept 1, tagged alert DIV No warning button text color "rgba(255, 255, 255, 1)"; Actual: "${elementNoColor}"`); } //background color if (elementNoBgColor === 'rgba(255, 26, 26, 1)') { console.log('Passed: Standard Code 1, Concept 1, tagged alert DIV No warning button background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Concept 1, tagged alert DIV No warning button background color "rgba(255, 26, 26, 1)"; Actual: "${elementNoBgColor}"`); } //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 X icon to close warning message for tagged concept 1', action: async () => { //Standard Code 1 Aligned Content await driver.findElement(By.css('#toast-1162119834-1439152630-168638762 span')).click(); console.log('----->| NEXT ACTION: Clicked X icon'); await driver.sleep(2000); } }, //Standard Code 1, Concept 2, Primary toggle button { description: 'Verify Standard Code 1, Concept 2, Primary toggle button is present', action: async () => { const multipleChecks = 'Standard Code 1, Concept 2 Primary toggle button'; //Get the switch-toggle div class const toggleClass = await driver.executeScript(` const listItem = document.querySelector('#concept-1162119834-1439152630-168638753'); const toggle = listItem ? listItem.querySelector('div.switch-toggle') : null; return toggle ? toggle.className : 'not found'; `); //Get the checkbox input's checked state const checkboxChecked = await driver.findElement(By.css('#switch1162119834-1439152630-168638753')).getAttribute('checked'); //Track all errors const errors = []; //Validate it's a toggle not a regular button if (toggleClass.includes('switch-toggle')) { console.log('Passed: Standard Code 1, Concept 2, Primary toggle button toggle switch listed as expected'); } else { errors.push(`Expected: Standard Code 1, Concept 2, Primary toggle button: "switch-toggle"; Actual: "${toggleClass}"`); } //Validate toggle is enabled (primary concept) if (checkboxChecked) { console.log('Passed: Standard Code 1, Concept 2, Primary toggle button is enabled as expected'); } else { errors.push(`Expected: Standard Code 1, Concept 2, Primary toggle button to be enabled; Actual: checked="${checkboxChecked}"`); } //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')); } } }, //Standard Code 1, Concept 2, Tagged alignment 1 breadcrumb { description: 'Validate Standard Code 1, Concept 2, Tagged alignment 1 breadcrumb text, font, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Concept 2, Tagged alignment 1 breadcrumb'; const element = await driver.findElement(By.css('#concept-1162119834-1439152630-168638753 > td: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 === ('Mathematics | Process Standards | Computation | Methods/Steps/Strategies')) { console.log("Passed: Standard Code 1, Concept 2, Tagged alignment 1 breadcrumb text matched as expected"); } else { errors.push(`Expected: Standard Code 1, Concept 2, Tagged alignment 1 breadcrumb "Mathematics | Process Standards | Computation | Methods/Steps/Strategies" text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Concept 2, Tagged alignment 1 breadcrumb text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Concept 2, Tagged alignment 1 breadcrumb text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '12px') { console.log('Passed: Standard Code 1, Concept 2, Tagged alignment 1 breadcrumb text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Concept 2, Tagged alignment 1 breadcrumb text font-size "12px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(33, 37, 41, 1)') { console.log('Passed: Standard Code 1, Concept 2, Tagged alignment 1 breadcrumb text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Concept 2, Tagged alignment 1 breadcrumb 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')); } } }, //Standard Code 1, Content Item 1, Grade 3 checkmark { description: 'Validate Standard Code 1, Content Item 1, Grade 3 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\34 1_1439151975_1162119834 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 1, Grade 3 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 1, Grade 3 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 1, Grade 4 checkmark { description: 'Validate Standard Code 1, Content Item 1, Grade 4 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\34 3_1439152039_1162119834 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 1, Grade 4 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 1, Grade 4 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 1, Grade 5 checkmark { description: 'Validate Standard Code 1, Content Item 1, Grade 5 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\34 4_1439152120_1162119834 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 1, Grade 5 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 1, Grade 5 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 1, Grade 6 checkmark { description: 'Validate Standard Code 1, Content Item 1, Grade 6 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\34 5_1439152196_1162119834 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 1, Grade 6 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 1, Grade 6 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 1, Grade 7 checkmark { description: 'Validate Standard Code 1, Content Item 1, Grade 7 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\34 7_1439152274_1162119834 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 1, Grade 7 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 1, Grade 7 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 1, Grade 8 checkmark { description: 'Validate Standard Code 1, Content Item 1, Grade 8 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\34 8_1439152451_1162119834 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 1, Grade 8 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 1, Grade 8 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 1, Grade 9 checkmark { description: 'Validate Standard Code 1, Content Item 1, Grade 9 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\34 9_1439152630_1162119834 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 1, Grade 9 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 1, Grade 9 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 1, Grade 10 checkmark { description: 'Validate Standard Code 1, Content Item 1, Grade 10 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 1_1439153143_1162119834 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 1, Grade 10 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 1, Grade 10 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 1, Grade 11 checkmark { description: 'Validate Standard Code 1, Content Item 1, Grade 11 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 2_1439153656_1162119834 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 1, Grade 11 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 1, Grade 11 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 1, Grade 12 checkmark { description: 'Validate Standard Code 1, Content Item 1, Grade 12 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 3_1439154169_1162119834 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 1, Grade 12 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 1, Grade 12 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 1, All button { description: 'Validate Standard Code 1, Content Item 1, All button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 1, All button'; const element = await driver.findElement(By.css('#tr14391526301162119834 > .align-middle:nth-child(15) > .btn')); //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 === 'All') { console.log('Passed: Standard Code 1, Content Item 1, All button text matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 1, All button text "All"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 1, All button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 1, All button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '14px') { console.log('Passed: Standard Code 1, Content Item 1, All button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 1, All button text font-size "14px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 1, All button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 1, All button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(108, 117, 125, 1)') { console.log('Passed: Standard Code 1, Content Item 1, All button background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 1, All button background color: "rgba(108, 117, 125, 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')); } } }, //Standard Code 1, Content Item 1, Clear button { description: 'Validate Standard Code 1, Content Item 1, Clear button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 1, Clear button'; const element = await driver.findElement(By.css('#tr14391526301162119834 > .align-middle:nth-child(16) > .btn')); //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 === 'Clear') { console.log('Passed: Standard Code 1, Content Item 1, Clear button text matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 1, Clear button text "Clear"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 1, Clear button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 1, Clear button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '14px') { console.log('Passed: Standard Code 1, Content Item 1, Clear button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 1, Clear button text font-size "14px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 1, Clear button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 1, Clear button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(108, 117, 125, 1)') { console.log('Passed: Standard Code 1, Content Item 1, Clear button background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 1, Clear button background color: "rgba(108, 117, 125, 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')); } } }, //Standard Code 1, Content Item 2, link title { description: 'Validate Standard Code 1, Content Item 2, link title text, font, size color, and URL', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 2, link title'; const element = await driver.findElement(By.linkText('Adding complex numbers (Video)')); //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'); const elementURL = await element.getAttribute('href'); //Track all errors const errors = []; //text if (elementText === ('Adding complex numbers (Video)')) { console.log("Passed: Standard Code 1, Content Item 2, link title text matched as expected"); } else { errors.push(`Expected: "Adding complex numbers (Video)" Standard Code 1, Content Item 2, link title text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 2, link title text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, link title text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, Content Item 2, link title text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, link title text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(212, 20, 90, 1)') { console.log('Passed: Standard Code 1, Content Item 2, link title text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, link title text color "rgba(212, 20, 90, 1)"; Actual: "${elementColor}"`); } //url if (elementURL === 'https://www.khanacademy.org/math/algebra2-2018/introduction-to-complex-numbers-algebra-2/adding-and-subtracting-complex-numbers-algebra-2/v/adding-complex-numbers') { console.log('Passed: Standard Code 1, Content Item 2, link title URL matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, link title URL: "https://www.khanacademy.org/math/algebra2-2018/introduction-to-complex-numbers-algebra-2/adding-and-subtracting-complex-numbers-algebra-2/v/adding-complex-numbers"; 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')); } } }, //Standard Code 1, Content Item 2, Info icon tool-tip { description: 'Validate Standard Code 1, Content Item 2, Info icon tool tip', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 2, Info icon tool-tip'; const element = await driver.findElement(By.css('#title14391526301162119834 > a:nth-child(2)')); //Get text, font, size, and color const elementText = await element.getAttribute('title'); 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 = []; //font if (elementText === 'Click to view item description') { console.log('Passed: Standard Code 1, Content Item 2, Info icon tool-tip text matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, Info icon tool-tip text "Click to view item description"; Actual: ${elementText}`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 2, Info icon tool-tip text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, Info icon tool-tip text font-family "Click to view item description"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, Content Item 2, Info icon tool-tip text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, Info icon tool-tip text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Standard Code 1, Content Item 2, Info icon tool-tip text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, Info icon tool-tip text color "rgba(73, 80, 87, 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')); } } }, //Standard Code 1, Content Item 2, Primary badge { description: 'Validate Standard Code 1, Content Item 2, Primary badge text, font, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 2, Primary badge'; const element = await driver.findElement(By.css('#title14391526301162119829 > .badge')); //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 = []; //font if (elementText === 'Primary') { console.log('Passed: Standard Code 1, Content Item 2, Primary badge text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, Primary badge text font-family "Primary"; Actual: ${elementText}`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 2, Primary badge text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, Primary badge text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '12.87px') { console.log('Passed: Standard Code 1, Content Item 2, Primary badge text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, Primary badge text font-size "12.87px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 2, Primary badge text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, Primary badge text color "rgba(255, 255, 255, 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')); } } }, //Standard Code 1, Content Item 2, hidden badge { description: 'Validate Standard Code 1, Content Item 2, hidden badge text, font, size, color, and background color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 2, hidden badge'; const element = await driver.findElement(By.css('.badge-danger')); //Get text, font, size, color, and background 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'); const elementBgColor = await element.getCssValue('background-color'); //Track all errors const errors = []; //font if (elementText === 'hidden') { console.log('Passed: Standard Code 1, Content Item 2, hidden badge text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, hidden badge text font-family "hidden"; Actual: ${elementText}`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 2, hidden badge text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, hidden badge text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '12.87px') { console.log('Passed: Standard Code 1, Content Item 2, hidden badge text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, hidden badge text font-size "12.87px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 2, hidden badge text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, hidden badge text color "rgba(255, 255, 255, 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')); } } }, //Standard Code 1, Content Item 2, tags tool-tip { description: 'Validate Standard Code 1, Content Item 2, tags tool-tip text, font, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 2, tags tool-tip'; const element = await driver.findElement(By.css('#title14391526301162119829 > .fa')); //Get text, font, size, and color const elementText = await element.getAttribute('title'); 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 Matching Concepts')) { console.log("Passed: Standard Code 1, Content Item 2, tags tool-tip text matched as expected"); } else { errors.push(`Expected: Standard Code 1, Content Item 2, tags tool-tip text "View Matching Concepts"; Actual: "${elementText}"`); } //font if (elementFont === 'FontAwesome') { console.log('Passed: Standard Code 1, Content Item 2, tags tool-tip text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, tags tool-tip text font-family "FontAwesome"; Actual: ${elementFont}`); } //size if (elementSize === '20px') { console.log('Passed: Standard Code 1, Content Item 2, tags tool-tip text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, tags tool-tip text font-size "20px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Standard Code 1, Content Item 2, tags tool-tip text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, tags tool-tip text color "rgba(73, 80, 87, 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')); } } }, //Standard Code 1, Content Item 2, Grade 9 pause { description: 'Validate Standard Code 1, Content Item 2, Grade 9 pause icon', action: async () => { const element = await driver.findElement(By.css('.fa-pause-circle')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 2, Grade 9 pause icon was found'); } else { errors.push('Standard Code 1, Content Item 2, Grade 9 pause icon was not found'); } } }, //Standard Code 1, Content Item 2, Grade 10 checkmark { description: 'Validate Standard Code 1, Content Item 2, Grade 10 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 1_1439153143_1162119829 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 2, Grade 10 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 2, Grade 10 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 2, Grade 11 checkmark { description: 'Validate Standard Code 1, Content Item 2, Grade 11 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 2_1439153656_1162119829 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 2, Grade 11 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 2, Grade 11 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 2, Grade 12 checkmark { description: 'Validate Standard Code 1, Content Item 2, Grade 12 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 3_1439154169_1162119829 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 2, Grade 12 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 2, Grade 12 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 2, All button { description: 'Validate Standard Code 1, Content Item 2, All button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 2, All button'; const element = await driver.findElement(By.css('#tr14391526301162119829 > .align-middle:nth-child(15) > .btn')); //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 === 'All') { console.log('Passed: Standard Code 1, Content Item 2, All button text matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, All button text "All"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 2, All button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, All button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '14px') { console.log('Passed: Standard Code 1, Content Item 2, All button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, All button text font-size "14px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 2, All button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, All button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(108, 117, 125, 1)') { console.log('Passed: Standard Code 1, Content Item 2, All button background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, All button background color: "rgba(108, 117, 125, 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')); } } }, //Standard Code 1, Content Item 2, Clear button { description: 'Validate Standard Code 1, Content Item 2, Clear button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 2, Clear button'; const element = await driver.findElement(By.css('#tr14391526301162119829 > .align-middle:nth-child(16) > .btn')); //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 === 'Clear') { console.log('Passed: Standard Code 1, Content Item 2, Clear button text matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, Clear button text "Clear"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 2, Clear button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, Clear button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '14px') { console.log('Passed: Standard Code 1, Content Item 2, Clear button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, Clear button text font-size "14px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 2, Clear button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, Clear button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(108, 117, 125, 1)') { console.log('Passed: Standard Code 1, Content Item 2, Clear button background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, Clear button background color: "rgba(108, 117, 125, 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: 'Click Standard Code 1, Content Item 2, Grade 9 pause icon', action: async () => { const element = await driver.findElement(By.css('.badge-danger')).catch(() => false); await driver.findElement(By.css('.fa-pause-circle')).click(); console.log('----->| NEXT ACTION: Click Standard Code 1, Content Item 2, Grade 9 pause icon'); //Wait for page to load completely await driver.wait(async () => { const readyState = await driver.executeScript('return document.readyState'); return readyState === 'complete'; }, 30000, 'Search/Standards page did not fully load 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 spinner did not disappear within 30 seconds'); //Element may be removed from the DOM entirely or just hidden via CSS - handle both if (element) { await driver.wait(async () => { try { return !(await element.isDisplayed()); } catch (e) { return true; //Stale reference means it was removed from the DOM } }, 5000, 'Standard Code 1, Content Item 2, hidden icon did not disappear as expected'); } console.log('Passed: Standard Code 1, Content Item 2, hidden icon disappeared as expected'); } }, //Standard Code 1, Content Item 2, link title { description: 'Validate Standard Code 1, Content Item 2, link title text, font, size color, and URL', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 2, link title'; const element = await driver.findElement(By.linkText('Adding complex numbers (Video)')); //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'); const elementURL = await element.getAttribute('href'); //Track all errors const errors = []; //text if (elementText === ('Adding complex numbers (Video)')) { console.log("Passed: Standard Code 1, Content Item 2, link title text matched as expected"); } else { errors.push(`Expected: "Adding complex numbers (Video)" Standard Code 1, Content Item 2, link title text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 2, link title text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, link title text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, Content Item 2, link title text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, link title text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Standard Code 1, Content Item 2, link title text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, link title text color "rgba(73, 80, 87, 1)"; Actual: "${elementColor}"`); } //url if (elementURL === 'https://www.khanacademy.org/math/algebra2-2018/introduction-to-complex-numbers-algebra-2/adding-and-subtracting-complex-numbers-algebra-2/v/adding-complex-numbers') { console.log('Passed: Standard Code 1, Content Item 2, link title URL matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, link title URL: "https://www.khanacademy.org/math/algebra2-2018/introduction-to-complex-numbers-algebra-2/adding-and-subtracting-complex-numbers-algebra-2/v/adding-complex-numbers"; 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')); } } }, //Standard Code 1, Content Item 2, Info icon tool-tip { description: 'Validate Standard Code 1, Content Item 2, Info icon tool tip', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 2, Info icon tool-tip'; const element = await driver.findElement(By.css('#title14391526301162119834 > a:nth-child(2)')); //Get text, font, size, and color const elementText = await element.getAttribute('title'); 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 = []; //font if (elementText === 'Click to view item description') { console.log('Passed: Standard Code 1, Content Item 2, Info icon tool-tip text matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, Info icon tool-tip text "Click to view item description"; Actual: ${elementText}`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 2, Info icon tool-tip text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, Info icon tool-tip text font-family "Click to view item description"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, Content Item 2, Info icon tool-tip text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, Info icon tool-tip text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Standard Code 1, Content Item 2, Info icon tool-tip text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, Info icon tool-tip text color "rgba(73, 80, 87, 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')); } } }, //Standard Code 1, Content Item 2, Primary badge { description: 'Validate Standard Code 1, Content Item 2, Primary badge text, font, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 2, Primary badge'; const element = await driver.findElement(By.css('#title14391526301162119829 > .badge')); //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 = []; //font if (elementText === 'Primary') { console.log('Passed: Standard Code 1, Content Item 2, Primary badge text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, Primary badge text font-family "Primary"; Actual: ${elementText}`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 2, Primary badge text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, Primary badge text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '12.87px') { console.log('Passed: Standard Code 1, Content Item 2, Primary badge text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, Primary badge text font-size "12.87px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 2, Primary badge text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, Primary badge text color "rgba(255, 255, 255, 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')); } } }, //Standard Code 1, Content Item 2, tags tool-tip { description: 'Validate Standard Code 1, Content Item 2, tags tool-tip text, font, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 2, tags tool-tip'; const element = await driver.findElement(By.css('#title14391526301162119829 > .fa')); //Get text, font, size, and color const elementText = await element.getAttribute('title'); 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 Matching Concepts')) { console.log("Passed: Standard Code 1, Content Item 2, tags tool-tip text matched as expected"); } else { errors.push(`Expected: Standard Code 1, Content Item 2, tags tool-tip text "View Matching Concepts"; Actual: "${elementText}"`); } //font if (elementFont === 'FontAwesome') { console.log('Passed: Standard Code 1, Content Item 2, tags tool-tip text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, tags tool-tip text font-family "FontAwesome"; Actual: ${elementFont}`); } //size if (elementSize === '20px') { console.log('Passed: Standard Code 1, Content Item 2, tags tool-tip text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, tags tool-tip text font-size "20px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Standard Code 1, Content Item 2, tags tool-tip text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, tags tool-tip text color "rgba(73, 80, 87, 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')); } } }, //Standard Code 1, Content Item 2, Grade 9 checkmark { description: 'Validate Standard Code 1, Content Item 2, Grade 9 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\34 9_1439152630_1162119829 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 2, Grade 9 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 2, Grade 9 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 2, Grade 10 checkmark { description: 'Validate Standard Code 1, Content Item 2, Grade 10 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 1_1439153143_1162119829 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 2, Grade 10 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 2, Grade 10 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 2, Grade 11 checkmark { description: 'Validate Standard Code 1, Content Item 2, Grade 11 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 2_1439153656_1162119829 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 2, Grade 11 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 2, Grade 11 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 2, Grade 12 checkmark { description: 'Validate Standard Code 1, Content Item 2, Grade 12 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 3_1439154169_1162119829 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 2, Grade 12 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 2, Grade 12 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 2, All button { description: 'Validate Standard Code 1, Content Item 2, All button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 2, All button'; const element = await driver.findElement(By.css('#tr14391526301162119829 > .align-middle:nth-child(15) > .btn')); //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 === 'All') { console.log('Passed: Standard Code 1, Content Item 2, All button text matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, All button text "All"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 2, All button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, All button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '14px') { console.log('Passed: Standard Code 1, Content Item 2, All button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, All button text font-size "14px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 2, All button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, All button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(108, 117, 125, 1)') { console.log('Passed: Standard Code 1, Content Item 2, All button background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, All button background color: "rgba(108, 117, 125, 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')); } } }, //Standard Code 1, Content Item 2, Clear button { description: 'Validate Standard Code 1, Content Item 2, Clear button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 2, Clear button'; const element = await driver.findElement(By.css('#tr14391526301162119829 > .align-middle:nth-child(16) > .btn')); //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 === 'Clear') { console.log('Passed: Standard Code 1, Content Item 2, Clear button text matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, Clear button text "Clear"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 2, Clear button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, Clear button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '14px') { console.log('Passed: Standard Code 1, Content Item 2, Clear button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, Clear button text font-size "14px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 2, Clear button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, Clear button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(108, 117, 125, 1)') { console.log('Passed: Standard Code 1, Content Item 2, Clear button background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 2, Clear button background color: "rgba(108, 117, 125, 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')); } } }, //Standard Code 1, Content Item 3, link title { description: 'Validate Standard Code 1, Content Item 3, link title text, font, size color, and URL', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 3, link title'; const element = await driver.findElement(By.linkText('Analyzing event probability for independence (Video)')); //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'); const elementURL = await element.getAttribute('href'); //Track all errors const errors = []; //text if (elementText === ('Analyzing event probability for independence (Video)')) { console.log("Passed: Standard Code 1, Content Item 3, link title text matched as expected"); } else { errors.push(`Expected: "Analyzing event probability for independence (Video)" Standard Code 1, Content Item 3, link title text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 3, link title text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 3, link title text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, Content Item 3, link title text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 3, link title text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Standard Code 1, Content Item 3, link title text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 3, link title text color "rgba(73, 80, 87, 1)"; Actual: "${elementColor}"`); } //url if (elementURL === 'https://www.khanacademy.org/math/statistics-probability/probability-library/conditional-probability-independence/v/independent-dependent-probability') { console.log('Passed: Standard Code 1, Content Item 3, link title URL matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 3, link title URL: "https://www.khanacademy.org/math/statistics-probability/probability-library/conditional-probability-independence/v/independent-dependent-probability"; 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')); } } }, //Standard Code 1, Content Item 3, Info icon tool-tip { description: 'Validate Standard Code 1, Content Item 3, Info icon tool tip', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 3, Info icon tool-tip'; const element = await driver.findElement(By.css('#title14391526301162119831 > a:nth-child(2)')); //Get text, font, size, and color const elementText = await element.getAttribute('title'); 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 = []; //font if (elementText === 'Click to view item description') { console.log('Passed: Standard Code 1, Content Item 3, Info icon tool-tip text matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 3, Info icon tool-tip text "Click to view item description"; Actual: ${elementText}`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 3, Info icon tool-tip text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 3, Info icon tool-tip text font-family "Click to view item description"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, Content Item 3, Info icon tool-tip text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 3, Info icon tool-tip text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Standard Code 1, Content Item 3, Info icon tool-tip text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 3, Info icon tool-tip text color "rgba(73, 80, 87, 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')); } } }, //Standard Code 1, Content Item 3, tags tool-tip { description: 'Validate Standard Code 1, Content Item 3, tags tool-tip text, font, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 3, tags tool-tip'; const element = await driver.findElement(By.css('#title14391526301162119831 > .fa')); //Get text, font, size, and color const elementText = await element.getAttribute('title'); 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 Matching Concepts')) { console.log("Passed: Standard Code 1, Content Item 3, tags tool-tip text matched as expected"); } else { errors.push(`Expected: Standard Code 1, Content Item 3, tags tool-tip text "View Matching Concepts"; Actual: "${elementText}"`); } //font if (elementFont === 'FontAwesome') { console.log('Passed: Standard Code 1, Content Item 3, tags tool-tip text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 3, tags tool-tip text font-family "FontAwesome"; Actual: ${elementFont}`); } //size if (elementSize === '20px') { console.log('Passed: Standard Code 1, Content Item 3, tags tool-tip text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 3, tags tool-tip text font-size "20px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Standard Code 1, Content Item 3, tags tool-tip text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 3, tags tool-tip text color "rgba(73, 80, 87, 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')); } } }, //Standard Code 1, Content Item 3, Grade 9 checkmark { description: 'Validate Standard Code 1, Content Item 3, Grade 9 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\34 9_1439152630_1162119831 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 3, Grade 9 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 3, Grade 9 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 3, Grade 10 checkmark { description: 'Validate Standard Code 1, Content Item 3, Grade 10 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 1_1439153143_1162119831 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 3, Grade 10 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 3, Grade 10 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 3, Grade 11 checkmark { description: 'Validate Standard Code 1, Content Item 3, Grade 11 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 2_1439153656_1162119831 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 3, Grade 11 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 3, Grade 11 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 3, Grade 12 checkmark { description: 'Validate Standard Code 1, Content Item 3, Grade 12 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 3_1439154169_1162119831 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 3, Grade 12 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 3, Grade 12 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 3, All button { description: 'Validate Standard Code 1, Content Item 3, All button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 3, All button'; const element = await driver.findElement(By.css('#tr14391526301162119831 > .align-middle:nth-child(15) > .btn')); //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 === 'All') { console.log('Passed: Standard Code 1, Content Item 3, All button text matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 3, All button text "All"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 3, All button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 3, All button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '14px') { console.log('Passed: Standard Code 1, Content Item 3, All button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 3, All button text font-size "14px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 3, All button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 3, All button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(108, 117, 125, 1)') { console.log('Passed: Standard Code 1, Content Item 3, All button background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 3, All button background color: "rgba(108, 117, 125, 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')); } } }, //Standard Code 1, Content Item 3, Clear button { description: 'Validate Standard Code 1, Content Item 3, Clear button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 3, Clear button'; const element = await driver.findElement(By.css('#tr14391526301162119831 > .align-middle:nth-child(16) > .btn')); //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 === 'Clear') { console.log('Passed: Standard Code 1, Content Item 3, Clear button text matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 3, Clear button text "Clear"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 3, Clear button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 3, Clear button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '14px') { console.log('Passed: Standard Code 1, Content Item 3, Clear button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 3, Clear button text font-size "14px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 3, Clear button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 3, Clear button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(108, 117, 125, 1)') { console.log('Passed: Standard Code 1, Content Item 3, Clear button background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 3, Clear button background color: "rgba(108, 117, 125, 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')); } } }, //Standard Code 1, Content Item 4, link title { description: 'Validate Standard Code 1, Content Item 4, link title text, font, size color, and URL', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 4, link title'; const element = await driver.findElement(By.linkText('Angle relationships example (Video)')); //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'); const elementURL = await element.getAttribute('href'); //Track all errors const errors = []; //text if (elementText === ('Angle relationships example (Video)')) { console.log("Passed: Standard Code 1, Content Item 4, link title text matched as expected"); } else { errors.push(`Expected: "Angle relationships example (Video)" Standard Code 1, Content Item 4, link title text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 4, link title text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 4, link title text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, Content Item 4, link title text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 4, link title text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Standard Code 1, Content Item 4, link title text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 4, link title text color "rgba(73, 80, 87, 1)"; Actual: "${elementColor}"`); } //url if (elementURL === 'https://www.khanacademy.org/math/geometry-home/geometry-angles/geometry-vert-comp-supp/v/vertical-adjacent-and-linearly-paired-angles') { console.log('Passed: Standard Code 1, Content Item 4, link title URL matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 4, link title URL: "https://www.khanacademy.org/math/geometry-home/geometry-angles/geometry-vert-comp-supp/v/vertical-adjacent-and-linearly-paired-angles"; 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')); } } }, //Standard Code 1, Content Item 4, Info icon tool-tip { description: 'Validate Standard Code 1, Content Item 4, Info icon tool tip', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 4, Info icon tool-tip'; const element = await driver.findElement(By.css ('#title14391526301162119832 > a:nth-child(2)')); //Get text, font, size, and color const elementText = await element.getAttribute('title'); 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 = []; //font if (elementText === 'Click to view item description') { console.log('Passed: Standard Code 1, Content Item 4, Info icon tool-tip text matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 4, Info icon tool-tip text "Click to view item description"; Actual: ${elementText}`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 4, Info icon tool-tip text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 4, Info icon tool-tip text font-family "Click to view item description"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, Content Item 4, Info icon tool-tip text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 4, Info icon tool-tip text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Standard Code 1, Content Item 4, Info icon tool-tip text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 4, Info icon tool-tip text color "rgba(73, 80, 87, 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')); } } }, //Standard Code 1, Content Item 4, tags tool-tip { description: 'Validate Standard Code 1, Content Item 4, tags tool-tip text, font, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 4, tags tool-tip'; const element = await driver.findElement(By.css('#title14391526301162119832 > .fa')); //Get text, font, size, and color const elementText = await element.getAttribute('title'); 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 Matching Concepts')) { console.log("Passed: Standard Code 1, Content Item 4, tags tool-tip text matched as expected"); } else { errors.push(`Expected: Standard Code 1, Content Item 4, tags tool-tip text "View Matching Concepts"; Actual: "${elementText}"`); } //font if (elementFont === 'FontAwesome') { console.log('Passed: Standard Code 1, Content Item 4, tags tool-tip text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 4, tags tool-tip text font-family "FontAwesome"; Actual: ${elementFont}`); } //size if (elementSize === '20px') { console.log('Passed: Standard Code 1, Content Item 4, tags tool-tip text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 4, tags tool-tip text font-size "20px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Standard Code 1, Content Item 4, tags tool-tip text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 4, tags tool-tip text color "rgba(73, 80, 87, 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')); } } }, //Standard Code 1, Content Item 4, Grade 9 checkmark { description: 'Validate Standard Code 1, Content Item 4, Grade 9 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\34 9_1439152630_1162119832 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 4, Grade 9 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 4, Grade 9 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 4, Grade 10 checkmark { description: 'Validate Standard Code 1, Content Item 4, Grade 10 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 1_1439153143_1162119832 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 4, Grade 10 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 4, Grade 10 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 4, Grade 11 checkmark { description: 'Validate Standard Code 1, Content Item 4, Grade 11 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 2_1439153656_1162119832 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 4, Grade 11 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 4, Grade 11 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 4, Grade 12 checkmark { description: 'Validate Standard Code 1, Content Item 4, Grade 12 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 3_1439154169_1162119832 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 4, Grade 12 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 4, Grade 12 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 4, All button { description: 'Validate Standard Code 1, Content Item 4, All button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 4, All button'; const element = await driver.findElement(By.css('#tr14391526301162119832 > .align-middle:nth-child(15) > .btn')); //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 === 'All') { console.log('Passed: Standard Code 1, Content Item 4, All button text matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 4, All button text "All"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 4, All button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 4, All button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '14px') { console.log('Passed: Standard Code 1, Content Item 4, All button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 4, All button text font-size "14px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 4, All button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 4, All button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(108, 117, 125, 1)') { console.log('Passed: Standard Code 1, Content Item 4, All button background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 4, All button background color: "rgba(108, 117, 125, 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')); } } }, //Standard Code 1, Content Item 4, Clear button { description: 'Validate Standard Code 1, Content Item 4, Clear button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 4, Clear button'; const element = await driver.findElement(By.css('#tr14391526301162119832 > .align-middle:nth-child(16) > .btn')); //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 === 'Clear') { console.log('Passed: Standard Code 1, Content Item 4, Clear button text matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 4, Clear button text "Clear"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 4, Clear button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 4, Clear button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '14px') { console.log('Passed: Standard Code 1, Content Item 4, Clear button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 4, Clear button text font-size "14px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 4, Clear button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 4, Clear button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(108, 117, 125, 1)') { console.log('Passed: Standard Code 1, Content Item 4, Clear button background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 4, Clear button background color: "rgba(108, 117, 125, 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')); } } }, //Standard Code 1, Content Item 5, link title { description: 'Validate Standard Code 1, Content Item 5, link title text, font, size color, and URL', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 5, link title'; const element = await driver.findElement(By.linkText('Arctic Tern')); //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'); const elementURL = await element.getAttribute('href'); //Track all errors const errors = []; //text if (elementText === ('Arctic Tern')) { console.log("Passed: Standard Code 1, Content Item 5, link title text matched as expected"); } else { errors.push(`Expected: "Arctic Tern" Standard Code 1, Content Item 5, link title text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 5, link title text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 5, link title text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, Content Item 5, link title text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 5, link title text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Standard Code 1, Content Item 5, link title text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 5, link title text color "rgba(73, 80, 87, 1)"; Actual: "${elementColor}"`); } //url if (elementURL === 'https://www.nationalgeographic.org/media/tern-wings/') { console.log('Passed: Standard Code 1, Content Item 5, link title URL matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 5, link title URL: "https://www.nationalgeographic.org/media/tern-wings/"; 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')); } } }, //Standard Code 1, Content Item 5, Info icon tool-tip { description: 'Validate Standard Code 1, Content Item 5, Info icon tool tip', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 5, Info icon tool-tip'; const element = await driver.findElement(By.css ('#title14391526301162119835 > a:nth-child(2)')); //Get text, font, size, and color const elementText = await element.getAttribute('title'); 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 = []; //font if (elementText === 'Click to view item description') { console.log('Passed: Standard Code 1, Content Item 5, Info icon tool-tip text matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 5, Info icon tool-tip text "Click to view item description"; Actual: ${elementText}`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 5, Info icon tool-tip text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 5, Info icon tool-tip text font-family "Click to view item description"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, Content Item 5, Info icon tool-tip text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 5, Info icon tool-tip text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Standard Code 1, Content Item 5, Info icon tool-tip text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 5, Info icon tool-tip text color "rgba(73, 80, 87, 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')); } } }, //Standard Code 1, Content Item 5, tags tool-tip { description: 'Validate Standard Code 1, Content Item 5, tags tool-tip text, font, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 5, tags tool-tip'; const element = await driver.findElement(By.css('#title14391526301162119835 > .fa')); //Get text, font, size, and color const elementText = await element.getAttribute('title'); 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 Matching Concepts')) { console.log("Passed: Standard Code 1, Content Item 5, tags tool-tip text matched as expected"); } else { errors.push(`Expected: Standard Code 1, Content Item 5, tags tool-tip text "View Matching Concepts"; Actual: "${elementText}"`); } //font if (elementFont === 'FontAwesome') { console.log('Passed: Standard Code 1, Content Item 5, tags tool-tip text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 5, tags tool-tip text font-family "FontAwesome"; Actual: ${elementFont}`); } //size if (elementSize === '20px') { console.log('Passed: Standard Code 1, Content Item 5, tags tool-tip text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 5, tags tool-tip text font-size "20px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Standard Code 1, Content Item 5, tags tool-tip text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 5, tags tool-tip text color "rgba(73, 80, 87, 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')); } } }, //Standard Code 1, Content Item 5, Grade 6 checkmark { description: 'Validate Standard Code 1, Content Item 5, Grade 6 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\34 5_1439152196_1162119835 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 5, Grade 6 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 5, Grade 6 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 5, Grade 7 checkmark { description: 'Validate Standard Code 1, Content Item 5, Grade 7 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\34 7_1439152274_1162119835 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 5, Grade 7 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 5, Grade 7 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 5, Grade 8 checkmark { description: 'Validate Standard Code 1, Content Item 5, Grade 8 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\34 8_1439152451_1162119835 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 5, Grade 8 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 5, Grade 8 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 5, Grade 9 checkmark { description: 'Validate Standard Code 1, Content Item 5, Grade 9 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\34 9_1439152630_1162119835 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 5, Grade 9 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 5, Grade 9 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 5, Grade 10 checkmark { description: 'Validate Standard Code 1, Content Item 5, Grade 10 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 1_1439153143_1162119835 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 5, Grade 10 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 5, Grade 10 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 5, Grade 11 checkmark { description: 'Validate Standard Code 1, Content Item 5, Grade 11 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 2_1439153656_1162119835 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 5, Grade 11 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 5, Grade 11 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 5, Grade 12 checkmark { description: 'Validate Standard Code 1, Content Item 5, Grade 12 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 3_1439154169_1162119835 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 5, Grade 12 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 5, Grade 12 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 5, All button { description: 'Validate Standard Code 1, Content Item 5, All button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 5, All button'; const element = await driver.findElement(By.css('#tr14391526301162119835 > .align-middle:nth-child(15) > .btn')); //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 === 'All') { console.log('Passed: Standard Code 1, Content Item 5, All button text matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 5, All button text "All"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 5, All button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 5, All button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '14px') { console.log('Passed: Standard Code 1, Content Item 5, All button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 5, All button text font-size "14px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 5, All button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 5, All button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(108, 117, 125, 1)') { console.log('Passed: Standard Code 1, Content Item 5, All button background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 5, All button background color: "rgba(108, 117, 125, 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')); } } }, //Standard Code 1, Content Item 5, Clear button { description: 'Validate Standard Code 1, Content Item 5, Clear button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 5, Clear button'; const element = await driver.findElement(By.css('#tr14391526301162119835 > .align-middle:nth-child(16) > .btn')); //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 === 'Clear') { console.log('Passed: Standard Code 1, Content Item 5, Clear button text matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 5, Clear button text "Clear"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 5, Clear button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 5, Clear button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '14px') { console.log('Passed: Standard Code 1, Content Item 5, Clear button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 5, Clear button text font-size "14px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 5, Clear button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 5, Clear button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(108, 117, 125, 1)') { console.log('Passed: Standard Code 1, Content Item 5, Clear button background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 5, Clear button background color: "rgba(108, 117, 125, 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')); } } }, //Content Item 6, link title { description: 'Validate Content Item 6, link title text, font, size, color, and URL', action: async () => { const multipleChecks = 'Content Item 6 link title'; const element = await driver.findElement(By.linkText('Area of a triangle on a grid (Video)')); //Get text, font, size, color, and background 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'); const elementURL = await element.getAttribute('href'); //Track all errors const errors = []; //text if (elementText === ('Area of a triangle on a grid (Video)')) { console.log("Passed: Content Item 6, link title text matched as expected"); } else { errors.push(`Expected: "Area of a triangle on a grid (Video)" Content Item 6, link title text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Content Item 6, link title text font-family matched as expected'); } else { errors.push(`Expected: Content Item 6, link title text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Content Item 6, link title text font-size matched as expected'); } else { errors.push(`Expected: Content Item 6, link title text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Content Item 6, link title text color matched as expected'); } else { errors.push(`Expected: Content Item 6, link title text color "rgba(73, 80, 87, 1)"; Actual: "${elementColor}"`); } //url if (elementURL === 'https://www.khanacademy.org/math/geometry-home/geometry-area-perimeter/geometry-area-shapes-grids/v/area-of-triangle-in-grid') { console.log('Passed: Content Item 6, link title URL matched as expected'); } else { errors.push(`Expected: Content Item 6, link title URL: "https://www.khanacademy.org/math/geometry-home/geometry-area-perimeter/geometry-area-shapes-grids/v/area-of-triangle-in-grid"; 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')); } } }, //Content Item 6, Info icon tool-tip { description: 'Validate Content Item 6, Info icon tool tip', action: async () => { const multipleChecks = 'Content Item 6, Info icon tool-tip'; const element = await driver.findElement(By.css('#title14391526301162119836 > a:nth-child(2)')); //Get text, font, size, and color const elementText = await element.getAttribute('title'); 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 = []; //font if (elementText === 'Click to view item description') { console.log('Passed: Content Item 6, Info icon tool-tip text matched as expected'); } else { errors.push(`Expected: Content Item 6, Info icon tool-tip text "Click to view item description"; Actual: ${elementText}`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Content Item 6, Info icon tool-tip text font-family matched as expected'); } else { errors.push(`Expected: Content Item 6, Info icon tool-tip text font-family "Click to view item description"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Content Item 6, Info icon tool-tip text font-size matched as expected'); } else { errors.push(`Expected: Content Item 6, Info icon tool-tip text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Content Item 6, Info icon tool-tip text color matched as expected'); } else { errors.push(`Expected: Content Item 6, Info icon tool-tip text color "rgba(73, 80, 87, 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')); } } }, //Standard Code 1, Content Item 6, Primary badge { description: 'Validate Standard Code 1, Content Item 6, Primary badge text, font, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 6, Primary badge'; const element = await driver.findElement(By.css('#title14391526301162119836 > .badge')); //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 = []; //font if (elementText === 'Primary') { console.log('Passed: Standard Code 1, Content Item 6, Primary badge text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 6, Primary badge text font-family "Primary"; Actual: ${elementText}`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 6, Primary badge text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 6, Primary badge text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '12.87px') { console.log('Passed: Standard Code 1, Content Item 6, Primary badge text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 6, Primary badge text font-size "12.87px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 6, Primary badge text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 6, Primary badge text color "rgba(255, 255, 255, 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')); } } }, //Standard Code 1, Content Item 6, tags tool-tip { description: 'Validate Standard Code 1, Content Item 6, tags tool-tip text, font, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 6, tags tool-tip'; const element = await driver.findElement(By.css('#title14391526301162119836 > .fa')); //Get text, font, size, and color const elementText = await element.getAttribute('title'); 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 Matching Concepts')) { console.log("Passed: Standard Code 1, Content Item 6, tags tool-tip text matched as expected"); } else { errors.push(`Expected: Standard Code 1, Content Item 6, tags tool-tip text "View Matching Concepts"; Actual: "${elementText}"`); } //font if (elementFont === 'FontAwesome') { console.log('Passed: Standard Code 1, Content Item 6, tags tool-tip text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 6, tags tool-tip text font-family "FontAwesome"; Actual: ${elementFont}`); } //size if (elementSize === '20px') { console.log('Passed: Standard Code 1, Content Item 6, tags tool-tip text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 6, tags tool-tip text font-size "20px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Standard Code 1, Content Item 6, tags tool-tip text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 6, tags tool-tip text color "rgba(73, 80, 87, 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')); } } }, //Standard Code 1, Content Item 6, Grade 9 checkmark { description: 'Validate Standard Code 1, Content Item 6, Grade 9 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\34 9_1439152630_1162119836 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 6, Grade 9 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 6, Grade 9 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 6, Grade 10 checkmark { description: 'Validate Standard Code 1, Content Item 6, Grade 10 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 1_1439153143_1162119836 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 6, Grade 10 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 6, Grade 10 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 6, Grade 11 checkmark { description: 'Validate Standard Code 1, Content Item 6, Grade 11 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 2_1439153656_1162119836 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 6, Grade 11 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 6, Grade 11 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 6, Grade 12 checkmark { description: 'Validate Standard Code 1, Content Item 6, Grade 12 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 3_1439154169_1162119836 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 6, Grade 12 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 6, Grade 12 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 6, All button { description: 'Validate Standard Code 1, Content Item 6, All button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 6, All button'; const element = await driver.findElement(By.css('#tr14391526301162119836 > .align-middle:nth-child(15) > .btn')); //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 === 'All') { console.log('Passed: Standard Code 1, Content Item 6, All button text matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 6, All button text "All"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 6, All button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 6, All button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '14px') { console.log('Passed: Standard Code 1, Content Item 6, All button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 6, All button text font-size "14px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 6, All button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 6, All button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(108, 117, 125, 1)') { console.log('Passed: Standard Code 1, Content Item 6, All button background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 6, All button background color: "rgba(108, 117, 125, 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')); } } }, //Standard Code 1, Content Item 6, Clear button { description: 'Validate Standard Code 1, Content Item 6, Clear button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 6, Clear button'; const element = await driver.findElement(By.css('#tr14391526301162119836 > .align-middle:nth-child(16) > .btn')); //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 === 'Clear') { console.log('Passed: Standard Code 1, Content Item 6, Clear button text matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 6, Clear button text "Clear"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 6, Clear button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 6, Clear button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '14px') { console.log('Passed: Standard Code 1, Content Item 6, Clear button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 6, Clear button text font-size "14px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 6, Clear button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 6, Clear button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(108, 117, 125, 1)') { console.log('Passed: Standard Code 1, Content Item 6, Clear button background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 6, Clear button background color: "rgba(108, 117, 125, 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')); } } }, //Standard Code 1, Content Item 7, link title { description: 'Validate Standard Code 1, Content Item 7, link title text, font, size color, and URL', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 7, link title'; const element = await driver.findElement(By.linkText('Bear Bones')); //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'); const elementURL = await element.getAttribute('href'); //Track all errors const errors = []; //text if (elementText === ('Bear Bones')) { console.log("Passed: Standard Code 1, Content Item 7, link title text matched as expected"); } else { errors.push(`Expected: "Bear Bones" Standard Code 1, Content Item 7, link title text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 7, link title text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 7, link title text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, Content Item 7, link title text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 7, link title text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Standard Code 1, Content Item 7, link title text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 7, link title text color "rgba(73, 80, 87, 1)"; Actual: "${elementColor}"`); } //url if (elementURL === 'http://sciencenetlinks.com/science-news/science-updates/bear-bones/') { console.log('Passed: Standard Code 1, Content Item 7, link title URL matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 7, link title URL: "http://sciencenetlinks.com/science-news/science-updates/bear-bones/"; 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')); } } }, //Standard Code 1, Content Item 7, Info icon tool-tip { description: 'Validate Standard Code 1, Content Item 7, Info icon tool tip', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 7, Info icon tool-tip'; const element = await driver.findElement(By.css ('#title14391526301162119840 > a:nth-child(2)')); //Get text, font, size, and color const elementText = await element.getAttribute('title'); 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 = []; //font if (elementText === 'Click to view item description') { console.log('Passed: Standard Code 1, Content Item 7, Info icon tool-tip text matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 7, Info icon tool-tip text "Click to view item description"; Actual: ${elementText}`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 7, Info icon tool-tip text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 7, Info icon tool-tip text font-family "Click to view item description"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, Content Item 7, Info icon tool-tip text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 7, Info icon tool-tip text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Standard Code 1, Content Item 7, Info icon tool-tip text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 7, Info icon tool-tip text color "rgba(73, 80, 87, 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')); } } }, //Standard Code 1, Content Item 7, tags tool-tip { description: 'Validate Standard Code 1, Content Item 7, tags tool-tip text, font, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 7, tags tool-tip'; const element = await driver.findElement(By.css('#title14391526301162119840 > .fa')); //Get text, font, size, and color const elementText = await element.getAttribute('title'); 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 Matching Concepts')) { console.log("Passed: Standard Code 1, Content Item 7, tags tool-tip text matched as expected"); } else { errors.push(`Expected: Standard Code 1, Content Item 7, tags tool-tip text "View Matching Concepts"; Actual: "${elementText}"`); } //font if (elementFont === 'FontAwesome') { console.log('Passed: Standard Code 1, Content Item 7, tags tool-tip text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 7, tags tool-tip text font-family "FontAwesome"; Actual: ${elementFont}`); } //size if (elementSize === '20px') { console.log('Passed: Standard Code 1, Content Item 7, tags tool-tip text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 7, tags tool-tip text font-size "20px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Standard Code 1, Content Item 7, tags tool-tip text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 7, tags tool-tip text color "rgba(73, 80, 87, 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')); } } }, //Standard Code 1, Content Item 7, Grade 6 checkmark { description: 'Validate Standard Code 1, Content Item 7, Grade 6 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\34 5_1439152196_1162119840 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 7, Grade 6 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 7, Grade 6 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 7, Grade 7 checkmark { description: 'Validate Standard Code 1, Content Item 7, Grade 7 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\34 7_1439152274_1162119840 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 7 , Grade 7 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 7, Grade 7 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 7, Grade 8 checkmark { description: 'Validate Standard Code 1, Content Item 7, Grade 8 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\34 8_1439152451_1162119840 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 7, Grade 8 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 7, Grade 8 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 7, Grade 9 checkmark { description: 'Validate Standard Code 1, Content Item 7, Grade 9 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\34 9_1439152630_1162119840 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 7, Grade 9 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 7, Grade 9 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 7, Grade 10 checkmark { description: 'Validate Standard Code 1, Content Item 7, Grade 10 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 1_1439153143_1162119840 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 7, Grade 10 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 7, Grade 10 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 7, Grade 11 checkmark { description: 'Validate Standard Code 1, Content Item 7, Grade 11 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 2_1439153656_1162119840 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 7, Grade 11 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 7, Grade 11 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 7, Grade 12 checkmark { description: 'Validate Standard Code 1, Content Item 7, Grade 12 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 3_1439154169_1162119840 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 7, Grade 12 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 7, Grade 12 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 7, All button { description: 'Validate Standard Code 1, Content Item 7, All button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 7, All button'; const element = await driver.findElement(By.css('#tr14391526301162119840 > .align-middle:nth-child(15) > .btn')); //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 === 'All') { console.log('Passed: Standard Code 1, Content Item 7, All button text matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 7, All button text "All"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 7, All button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 7, All button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '14px') { console.log('Passed: Standard Code 1, Content Item 7, All button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 7, All button text font-size "14px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 7, All button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 7, All button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(108, 117, 125, 1)') { console.log('Passed: Standard Code 1, Content Item 7, All button background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 7, All button background color: "rgba(108, 117, 125, 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')); } } }, //Standard Code 1, Content Item 7, Clear button { description: 'Validate Standard Code 1, Content Item 7, Clear button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 7, Clear button'; const element = await driver.findElement(By.css('#tr14391526301162119840 > .align-middle:nth-child(16) > .btn')); //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 === 'Clear') { console.log('Passed: Standard Code 1, Content Item 7, Clear button text matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 7, Clear button text "Clear"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 7, Clear button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 7, Clear button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '14px') { console.log('Passed: Standard Code 1, Content Item 7, Clear button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 7, Clear button text font-size "14px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 7, Clear button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 7, Clear button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(108, 117, 125, 1)') { console.log('Passed: Standard Code 1, Content Item 7, Clear button background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 7, Clear button background color: "rgba(108, 117, 125, 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')); } } }, //Standard Code 1, Content Item 8, link title { description: 'Validate Standard Code 1, Content Item 8, link title text, font, size color, and URL', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 8, link title'; const element = await driver.findElement(By.linkText('Touchdown Decisions')); //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'); const elementURL = await element.getAttribute('href'); //Track all errors const errors = []; //text if (elementText === ('Touchdown Decisions')) { console.log("Passed: Standard Code 1, Content Item 8, link title text matched as expected"); } else { errors.push(`Expected: "Touchdown Decisions" Standard Code 1, Content Item 8, link title text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 8, link title text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 8, link title text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, Content Item 8, link title text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 8, link title text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Standard Code 1, Content Item 8, link title text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 8, link title text color "rgba(73, 80, 87, 1)"; Actual: "${elementColor}"`); } //url if (elementURL === 'http://sciencenetlinks.com/science-news/science-updates/touchdown-decisions/') { console.log('Passed: Standard Code 1, Content Item 8, link title URL matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 8, link title URL: "http://sciencenetlinks.com/science-news/science-updates/touchdown-decisions/"; 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')); } } }, //Standard Code 1, Content Item 8, Info icon tool-tip { description: 'Validate Standard Code 1, Content Item 8, Info icon tool tip', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 8, Info icon tool-tip'; const element = await driver.findElement(By.css ('#title14391526301162119993 > a:nth-child(2)')); //Get text, font, size, and color const elementText = await element.getAttribute('title'); 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 = []; //font if (elementText === 'Click to view item description') { console.log('Passed: Standard Code 1, Content Item 8, Info icon tool-tip text matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 8, Info icon tool-tip text "Click to view item description"; Actual: ${elementText}`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 8, Info icon tool-tip text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 8, Info icon tool-tip text font-family "Click to view item description"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Standard Code 1, Content Item 8, Info icon tool-tip text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 8, Info icon tool-tip text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Standard Code 1, Content Item 8, Info icon tool-tip text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 8, Info icon tool-tip text color "rgba(73, 80, 87, 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')); } } }, //Standard Code 1, Content Item 8, tags tool-tip { description: 'Validate Standard Code 1, Content Item 8, tags tool-tip text, font, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 8, tags tool-tip'; const element = await driver.findElement(By.css('#title14391526301162119993 > .fa')); //Get text, font, size, and color const elementText = await element.getAttribute('title'); 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 Matching Concepts')) { console.log("Passed: Standard Code 1, Content Item 8, tags tool-tip text matched as expected"); } else { errors.push(`Expected: Standard Code 1, Content Item 8, tags tool-tip text "View Matching Concepts"; Actual: "${elementText}"`); } //font if (elementFont === 'FontAwesome') { console.log('Passed: Standard Code 1, Content Item 8, tags tool-tip text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 8, tags tool-tip text font-family "FontAwesome"; Actual: ${elementFont}`); } //size if (elementSize === '20px') { console.log('Passed: Standard Code 1, Content Item 8, tags tool-tip text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 8, tags tool-tip text font-size "20px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Standard Code 1, Content Item 8, tags tool-tip text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 8, tags tool-tip text color "rgba(73, 80, 87, 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')); } } }, //Standard Code 1, Content Item 8, Grade 6 checkmark { description: 'Validate Standard Code 1, Content Item 8, Grade 6 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\34 5_1439152196_1162119993 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 8, Grade 6 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 8, Grade 6 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 8, Grade 7 checkmark { description: 'Validate Standard Code 1, Content Item 8, Grade 7 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\34 7_1439152274_1162119993 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 8, Grade 7 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 8, Grade 7 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 8, Grade 8 checkmark { description: 'Validate Standard Code 1, Content Item 8, Grade 8 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\34 8_1439152451_1162119993 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 8, Grade 8 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 8, Grade 8 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 8, Grade 9 checkmark { description: 'Validate Standard Code 1, Content Item 8, Grade 9 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\34 9_1439152630_1162119993 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 8, Grade 9 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 8, Grade 9 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 8, Grade 10 checkmark { description: 'Validate Standard Code 1, Content Item 8, Grade 10 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 1_1439153143_1162119993 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 8, Grade 10 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 8, Grade 10 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 8, Grade 11 checkmark { description: 'Validate Standard Code 1, Content Item 8, Grade 11 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 2_1439153656_1162119993 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 8, Grade 11 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 8, Grade 11 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 8, Grade 12 checkmark { description: 'Validate Standard Code 1, Content Item 8, Grade 12 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 3_1439154169_1162119993 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 8, Grade 12 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 8, Grade 12 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 8, All button { description: 'Validate Standard Code 1, Content Item 8, All button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 8, All button'; const element = await driver.findElement(By.css('#tr14391526301162119993 > .align-middle:nth-child(15) > .btn')); //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 === 'All') { console.log('Passed: Standard Code 1, Content Item 8, All button text matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 8, All button text "All"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 8, All button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 8, All button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '14px') { console.log('Passed: Standard Code 1, Content Item 8, All button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 8, All button text font-size "14px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 8, All button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 8, All button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(108, 117, 125, 1)') { console.log('Passed: Standard Code 1, Content Item 8, All button background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 8, All button background color: "rgba(108, 117, 125, 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')); } } }, //Standard Code 1, Content Item 8, Clear button { description: 'Validate Standard Code 1, Content Item 8, Clear button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 8, Clear button'; const element = await driver.findElement(By.css('#tr14391526301162119993 > .align-middle:nth-child(16) > .btn')); //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 === 'Clear') { console.log('Passed: Standard Code 1, Content Item 8, Clear button text matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 8, Clear button text "Clear"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 8, Clear button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 8, Clear button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '14px') { console.log('Passed: Standard Code 1, Content Item 8, Clear button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 8, Clear button text font-size "14px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 8, Clear button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 8, Clear button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(108, 117, 125, 1)') { console.log('Passed: Standard Code 1, Content Item 8, Clear button background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 8, Clear button background color: "rgba(108, 117, 125, 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')); } } }, //Content Item 9, link title { description: 'Validate Content Item 9, link title text, font, size, color, and URL', action: async () => { const multipleChecks = 'Content Item 9 link title'; const element = await driver.findElement(By.linkText('Adding probabilities (Exercise)')); //Get text, font, size, color, and background 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'); const elementURL = await element.getAttribute('href'); //Track all errors const errors = []; //text if (elementText === ('Adding probabilities (Exercise)')) { console.log("Passed: Content Item 9, link title text matched as expected"); } else { errors.push(`Expected: "Adding probabilities (Exercise)" Content Item 9, link title text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Content Item 9, link title text font-family matched as expected'); } else { errors.push(`Expected: Content Item 9, link title text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Content Item 9, link title text font-size matched as expected'); } else { errors.push(`Expected: Content Item 9, link title text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(48, 200, 172, 1)') { console.log('Passed: Content Item 9, link title text color matched as expected'); } else { errors.push(`Expected: Content Item 9, link title text color "rgba(48, 200, 172, 1)"; Actual: "${elementColor}"`); } //url if (elementURL === 'https://www.khanacademy.org/math/probability/probability-geometry/addition-rule-for-probability/e/adding-probability') { console.log('Passed: Content Item 9, link title URL matched as expected'); } else { errors.push(`Expected: Content Item 9, link title URL: "https://www.khanacademy.org/math/probability/probability-geometry/addition-rule-for-probability/e/adding-probability"; 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')); } } }, //Content Item 9, Info icon tool-tip { description: 'Validate Content Item 9, Info icon tool tip', action: async () => { const multipleChecks = 'Content Item 9, Info icon tool-tip'; const element = await driver.findElement(By.css('#title14391526301162119830 > a:nth-child(2)')); //Get text, font, size, and color const elementText = await element.getAttribute('title'); 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 = []; //font if (elementText === 'Click to view item description') { console.log('Passed: Content Item 9, Info icon tool-tip text matched as expected'); } else { errors.push(`Expected: Content Item 9, Info icon tool-tip text "Click to view item description"; Actual: ${elementText}`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Content Item 9, Info icon tool-tip text font-family matched as expected'); } else { errors.push(`Expected: Content Item 9, Info icon tool-tip text font-family "Click to view item description"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Content Item 9, Info icon tool-tip text font-size matched as expected'); } else { errors.push(`Expected: Content Item 9, Info icon tool-tip text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Content Item 9, Info icon tool-tip text color matched as expected'); } else { errors.push(`Expected: Content Item 9, Info icon tool-tip text color "rgba(73, 80, 87, 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')); } } }, //Standard Code 1, Content Item 9, added badge { description: 'Validate Standard Code 1, Content Item 9, added badge text, font, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 9, added badge'; const element = await driver.findElement(By.css('.badge-success')); //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 = []; //font if (elementText === 'added') { console.log('Passed: Standard Code 1, Content Item 9, added badge text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, added badge text font-family "added"; Actual: ${elementText}`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 9, added badge text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, added badge text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '12.87px') { console.log('Passed: Standard Code 1, Content Item 9, added badge text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, added badge text font-size "12.87px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 9, added badge text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, added badge text color "rgba(255, 255, 255, 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')); } } }, //Standard Code 1, Content Item 9, Primary badge { description: 'Validate Standard Code 1, Content Item 9, Primary badge text, font, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 9, Primary badge'; const element = await driver.findElement(By.css('.badge: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 = []; //font if (elementText === 'Primary') { console.log('Passed: Standard Code 1, Content Item 9, Primary badge text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, Primary badge text font-family "Primary"; Actual: ${elementText}`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 9, Primary badge text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, Primary badge text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '12.87px') { console.log('Passed: Standard Code 1, Content Item 9, Primary badge text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, Primary badge text font-size "12.87px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 9, Primary badge text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, Primary badge text color "rgba(255, 255, 255, 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')); } } }, //Standard Code 1, Content Item 9, Grade 9 added { description: 'Validate Standard Code 1, Content Item 9, Grade 9 added icon', action: async () => { const element = await driver.findElement(By.css('.fa-dot-circle-o')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 9, Grade 9 added icon was found'); } else { errors.push('Standard Code 1, Content Item 9, Grade 9 added icon was not found'); } } }, //Standard Code 1, Content Item 9, Grade 10 checkmark { description: 'Validate Standard Code 1, Content Item 9, Grade 10 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 1_1439153143_1162119830')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 9, Grade 10 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 9, Grade 10 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 9, Grade 11 checkmark { description: 'Validate Standard Code 1, Content Item 9, Grade 11 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 2_1439153656_1162119830 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 9, Grade 11 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 9, Grade 11 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 9, Grade 12 checkmark { description: 'Validate Standard Code 1, Content Item 9, Grade 12 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 3_1439154169_1162119830 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 9, Grade 12 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 9, Grade 12 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 9, All button { description: 'Validate Standard Code 1, Content Item 9, All button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 9, All button'; const element = await driver.findElement(By.css('#tr14391526301162119830 > .align-middle:nth-child(15) > .btn')); //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 === 'All') { console.log('Passed: Standard Code 1, Content Item 9, All button text matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, All button text "All"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 9, All button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, All button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '14px') { console.log('Passed: Standard Code 1, Content Item 9, All button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, All button text font-size "14px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 9, All button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, All button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(108, 117, 125, 1)') { console.log('Passed: Standard Code 1, Content Item 9, All button background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, All button background color: "rgba(108, 117, 125, 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')); } } }, //Standard Code 1, Content Item 9, Clear button { description: 'Validate Standard Code 1, Content Item 9, Clear button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 9, Clear button'; const element = await driver.findElement(By.css('#tr14391526301162119830 > .align-middle:nth-child(16) > .btn')); //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 === 'Clear') { console.log('Passed: Standard Code 1, Content Item 9, Clear button text matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, Clear button text "Clear"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 9, Clear button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, Clear button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '14px') { console.log('Passed: Standard Code 1, Content Item 9, Clear button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, Clear button text font-size "14px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 9, Clear button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, Clear button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(108, 117, 125, 1)') { console.log('Passed: Standard Code 1, Content Item 9, Clear button background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, Clear button background color: "rgba(108, 117, 125, 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: 'Click Standard Code 1, Content Item 9, Grade 9 added icon', action: async () => { const element = await driver.findElement(By.css('.badge-success')).catch(() => false); await driver.findElement(By.css('.fa-dot-circle-o')).click(); console.log('----->| NEXT ACTION: Click Standard Code 1, Content Item 9, Grade 9 added icon'); //Wait for page to load completely await driver.wait(async () => { const readyState = await driver.executeScript('return document.readyState'); return readyState === 'complete'; }, 30000, 'Search/Standards page did not fully load 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 spinner did not disappear within 30 seconds'); //Element may be removed from the DOM entirely or just hidden via CSS - handle both if (element) { await driver.wait(async () => { try { return !(await element.isDisplayed()); } catch (e) { return true; //Stale reference means it was removed from the DOM } }, 5000, 'Standard Code 1, Content Item 9, added icon did not disappear as expected'); } console.log('Passed: Standard Code 1, Content Item 9, added icon disappeared as expected'); } }, //Content Item 9, link title { description: 'Validate Content Item 9, link title text, font, size, color, and URL', action: async () => { const multipleChecks = 'Content Item 9 link title'; const element = await driver.findElement(By.linkText('Adding probabilities (Exercise)')); //Get text, font, size, color, and background 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'); const elementURL = await element.getAttribute('href'); //Track all errors const errors = []; //text if (elementText === ('Adding probabilities (Exercise)')) { console.log("Passed: Content Item 9, link title text matched as expected"); } else { errors.push(`Expected: "Adding probabilities (Exercise)" Content Item 9, link title text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Content Item 9, link title text font-family matched as expected'); } else { errors.push(`Expected: Content Item 9, link title text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Content Item 9, link title text font-size matched as expected'); } else { errors.push(`Expected: Content Item 9, link title text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(170, 170, 170, 1)') { console.log('Passed: Content Item 9, link title text color matched as expected'); } else { errors.push(`Expected: Content Item 9, link title text color "rgba(170, 170, 170, 1)"; Actual: "${elementColor}"`); } //url if (elementURL === 'https://www.khanacademy.org/math/probability/probability-geometry/addition-rule-for-probability/e/adding-probability') { console.log('Passed: Content Item 9, link title URL matched as expected'); } else { errors.push(`Expected: Content Item 9, link title URL: "https://www.khanacademy.org/math/probability/probability-geometry/addition-rule-for-probability/e/adding-probability"; 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')); } } }, //Content Item 9, Info icon tool-tip { description: 'Validate Content Item 9, Info icon tool tip', action: async () => { const multipleChecks = 'Content Item 9, Info icon tool-tip'; const element = await driver.findElement(By.css('#title14391526301162119830 > a:nth-child(2)')); //Get text, font, size, and color const elementText = await element.getAttribute('title'); 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 = []; //font if (elementText === 'Click to view item description') { console.log('Passed: Content Item 9, Info icon tool-tip text matched as expected'); } else { errors.push(`Expected: Content Item 9, Info icon tool-tip text "Click to view item description"; Actual: ${elementText}`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Content Item 9, Info icon tool-tip text font-family matched as expected'); } else { errors.push(`Expected: Content Item 9, Info icon tool-tip text font-family "Click to view item description"; Actual: ${elementFont}`); } //size if (elementSize === '14.3px') { console.log('Passed: Content Item 9, Info icon tool-tip text font-size matched as expected'); } else { errors.push(`Expected: Content Item 9, Info icon tool-tip text font-size "14.3px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(73, 80, 87, 1)') { console.log('Passed: Content Item 9, Info icon tool-tip text color matched as expected'); } else { errors.push(`Expected: Content Item 9, Info icon tool-tip text color "rgba(73, 80, 87, 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')); } } }, //Standard Code 1, Content Item 9, not aligned button { description: 'Validate Standard Code 1, Content Item 9, not aligned button text, font, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 9, not aligned button'; const element = await driver.findElement(By.css('.badge-secondary')); //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 = []; //font if (elementText === 'not aligned') { console.log('Passed: Standard Code 1, Content Item 9, not aligned button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, not aligned button text font-family "not aligned"; Actual: ${elementText}`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 9, not aligned button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, not aligned button text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '12.87px') { console.log('Passed: Standard Code 1, Content Item 9, not aligned button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, not aligned button text font-size "12.87px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 9, not aligned button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, not aligned button text color "rgba(255, 255, 255, 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')); } } }, //Standard Code 1, Content Item 9, Grade 9 added { description: 'Validate Standard Code 1, Content Item 9, Grade 9 added icon', action: async () => { const element = await driver.findElement(By.css('#\\34 9_1439152630_1162119830 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 9, Grade 9 added icon was found'); } else { errors.push('Standard Code 1, Content Item 9, Grade 9 added icon was not found'); } } }, //Standard Code 1, Content Item 9, Grade 10 checkmark { description: 'Validate Standard Code 1, Content Item 9, Grade 10 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 1_1439153143_1162119830')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 9, Grade 10 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 9, Grade 10 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 9, Grade 11 checkmark { description: 'Validate Standard Code 1, Content Item 9, Grade 11 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 2_1439153656_1162119830 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 9, Grade 11 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 9, Grade 11 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 9, Grade 12 checkmark { description: 'Validate Standard Code 1, Content Item 9, Grade 12 checkmark icon', action: async () => { const element = await driver.findElement(By.css('#\\35 3_1439154169_1162119830 .fa')); //Track all errors const errors = []; //icon if (element) { console.log('Passed: Standard Code 1, Content Item 9, Grade 12 checkmark icon was found'); } else { errors.push('Standard Code 1, Content Item 9, Grade 12 checkmark icon was not found'); } } }, //Standard Code 1, Content Item 9, All button { description: 'Validate Standard Code 1, Content Item 9, All button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 9, All button'; const element = await driver.findElement(By.css('#tr14391526301162119830 > .align-middle:nth-child(15) > .btn')); //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 === 'All') { console.log('Passed: Standard Code 1, Content Item 9, All button text matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, All button text "All"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 9, All button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, All button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '14px') { console.log('Passed: Standard Code 1, Content Item 9, All button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, All button text font-size "14px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 9, All button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, All button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(108, 117, 125, 1)') { console.log('Passed: Standard Code 1, Content Item 9, All button background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, All button background color: "rgba(108, 117, 125, 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')); } } }, //Standard Code 1, Content Item 9, Clear button { description: 'Validate Standard Code 1, Content Item 9, Clear button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 1, Content Item 9, Clear button'; const element = await driver.findElement(By.css('#tr14391526301162119830 > .align-middle:nth-child(16) > .btn')); //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 === 'Clear') { console.log('Passed: Standard Code 1, Content Item 9, Clear button text matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, Clear button text "Clear"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 1, Content Item 9, Clear button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, Clear button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '14px') { console.log('Passed: Standard Code 1, Content Item 9, Clear button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, Clear button text font-size "14px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 1, Content Item 9, Clear button text color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, Clear button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(108, 117, 125, 1)') { console.log('Passed: Standard Code 1, Content Item 9, Clear button background color matched as expected'); } else { errors.push(`Expected: Standard Code 1, Content Item 9, Clear button background color: "rgba(108, 117, 125, 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')); } } }, //Standard Code 2 title { description: 'Validate Standard Code 2, title text, font, size, and color', action: async () => { const multipleChecks = 'Standard Code 2, title'; const element = await driver.findElement(By.xpath(`(//div[@id='stdbox']/b)[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 === 'MP2') { console.log("Passed: Standard Code 2, title text matched as expected"); } else { errors.push(`Expected: "MP2" Standard Code 2, title text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 2, title text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 2, title text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '13px') { console.log('Passed: Standard Code 2, title text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 2, title text font-size "13px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(40, 39, 90, 1)') { console.log('Passed: Standard Code 2, title text color matched as expected'); } else { errors.push(`Expected: Standard Code 2, 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')); } } }, //Standard Code 2 Description { description: 'Validate Standard Code 2, description text, font, size, and color', action: async () => { const multipleChecks = 'Standard Code 2, description'; const element = await driver.findElement(By.xpath('//div[3]/div[2]/div[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.includes ('Reason abstractly and quantitatively. (Grade 9)')) { console.log("Passed: Standard Code 2, description text matched as expected"); } else { errors.push(`Expected: "Reason abstractly and quantitatively. (Grade 9)" Standard Code 2, description text; Actual: "${elementText}"`); } //font if (elementFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 2, description text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 2, description text font-family "Poppins, sans-serif"; Actual: ${elementFont}`); } //size if (elementSize === '13px') { console.log('Passed: Standard Code 2, description text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 2, description text font-size "13px"; Actual: "${elementSize}"`); } //color if (elementColor === 'rgba(40, 39, 90, 1)') { console.log('Passed: Standard Code 2, description text color matched as expected'); } else { errors.push(`Expected: Standard Code 2, description 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')); } } }, //Standard Code 2 Tools button { description: 'Validate Standard Code 2, Tools button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 2, Tools button'; const elementIcon = await driver.findElement(By.xpath(`//div[@id='stdbox']/div/div/button/i`)); const element = await driver.findElement(By.css('#stdbox > div.pull-right > div > button')); const elementExpandIcon = await driver.findElement(By.xpath(`(//button[@type='button'])[20]`)); //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 = []; //icon if (elementIcon) { console.log('Passed: Standard Code 2, tools button icon found') } else { errors.push('FAILED: Standard Code 2 tools button icon not found') } //text if (elementText === 'Tools') { console.log('Passed: Standard Code 2, Tools button text matched as expected'); } else { errors.push(`Expected: Standard Code 2, "Tools"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 2, Tools button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 2, Tools button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '16px') { console.log('Passed: Standard Code 2, Tools button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 2, Tools button text font-size "16px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 2, Tools button text color matched as expected'); } else { errors.push(`Expected: Standard Code 2, Tools button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(48, 200, 172, 1)') { console.log('Passed: Standard Code 2, Tools button background color matched as expected'); } else { errors.push(`Expected: Standard Code 2, Tools button background color: "rgba(48, 200, 172, 1)"; Actual: "${elementButtonColor}"`); } //expand icon if (elementExpandIcon) { console.log('Passed: Standard Code 2, Tools expand button icon found') } else { errors.push('FAILED: Standard Code 2, Tools expand button 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')); } } }, //Standard Code 2 Aligned Content button { description: 'Validate Standard Code 2, Aligned Content 8 button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 2, Aligned Content 8 button'; const element = await driver.findElement(By.id('corr-1439152631-tab')); const elementExpandIcon = await driver.findElement(By.id('colstate1439152631')); //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 === 'Aligned Content 5') { console.log('Passed: Standard Code 2, Aligned Content 5 button text matched as expected'); } else { errors.push(`Expected: "Aligned Content 5"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 2, Aligned Content 4 button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 2, Aligned Content 4 button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '15px') { console.log('Passed: Standard Code 2, Aligned Content 4 button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 2, Aligned Content 4 button text font-size "15px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(255, 255, 255, 1)') { console.log('Passed: Standard Code 2, Aligned Content 4 button text color matched as expected'); } else { errors.push(`Expected: Standard Code 2, Aligned Content 4 button text color: "rgba(255, 255, 255, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(40, 39, 90, 1)') { console.log('Passed: Standard Code 2, Aligned Content 4 button background color matched as expected'); } else { errors.push(`Expected: Standard Code 2, Aligned Content 4 button background color: "rgba(40, 39, 90, 1)"; Actual: "${elementButtonColor}"`); } //expand icon if (elementExpandIcon) { console.log('Passed: Standard Code 2, Aligned Content 4 expand button icon found') } else { errors.push('FAILED: Standard Code 2, Aligned Content 4 expand button 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')); } } }, //Standard Code 2 Related Standards button { description: 'Validate Standard Code 2, Related Standards 26 button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 2, Related Standards 26 button'; const element = await driver.findElement(By.css('#rel-1439152631-tab')); //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 === 'Related Standards 26') { console.log('Passed: Standard Code 2, Related Standards 26 button text matched as expected'); } else { errors.push(`Expected: "Related Standards 26"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 2, Related Standards 26 button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 2, Related Standards 26 button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '15px') { console.log('Passed: Standard Code 2, Related Standards 26 button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 2, Related Standards 26 button text font-size "15px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(182, 186, 181, 1)') { console.log('Passed: Standard Code 2, Related Standards 26 button text color matched as expected'); } else { errors.push(`Expected: Standard Code 2, Related Standards 26 button text color: "rgba(182, 186, 181, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(0, 0, 0, 0)') { console.log('Passed: Standard Code 2, Related Standards 26 button background color matched as expected'); } else { errors.push(`Expected: Standard Code 2, Related Standards 26 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')); } } }, //Standard Code 2 Add Direct Alignment button { description: 'Validate Standard Code 2, Add Direct Alignment button text, size, and color', action: async () => { const multipleChecks = 'Standard Code 2, Add Direct Alignment button'; const elementIcon = await driver.findElement(By.css('#add-1439152631-tab > .fa')); const element = await driver.findElement(By.css('#add-1439152631-tab')); //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 = []; //icon if (elementIcon) { console.log('Passed: Standard Code 2, Add Direct Alignment button icon found') } else { errors.push('FAILED: Standard Code 2, Add Direct Alignment button icon not found') } //text if (elementText === 'Add Direct Alignment') { console.log('Passed: Standard Code 2, Add Direct Alignment button text matched as expected'); } else { errors.push(`Expected: "Add Direct Alignment"; Actual: "${elementText}"`); } //font if (elementTextFont === 'Poppins, sans-serif') { console.log('Passed: Standard Code 2, Add Direct Alignment button text font-family matched as expected'); } else { errors.push(`Expected: Standard Code 2, Add Direct Alignment button text font-family "Poppins, sans-serif"; Actual: ${elementTextFont}`); } //size if (elementTextSize === '15px') { console.log('Passed: Standard Code 2, Add Direct Alignment button text font-size matched as expected'); } else { errors.push(`Expected: Standard Code 2, Add Direct Alignment button text font-size "15px"; Actual: "${elementTextSize}"`); } //color if (elementTextColor === 'rgba(182, 186, 181, 1)') { console.log('Passed: Standard Code 2, Add Direct Alignment button text color matched as expected'); } else { errors.push(`Expected: Standard Code 2, Add Direct Alignment button text color: "rgba(182, 186, 181, 1)"; Actual: "${elementTextColor}"`); } //button color if (elementButtonColor === 'rgba(0, 0, 0, 0)') { console.log('Passed: Standard Code 2, Add Direct Alignment button background color matched as expected'); } else { errors.push(`Expected: Standard Code 2, Add Direct Alignment 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 - CLEAN UP { description: 'Test Case Reset - Click Standard Code 1, Content Item 2, Grade 9 checkmark icon', action: async () => { console.log('------------->| RESET TEST CASE |<-------------'); await driver.findElement(By.css('#\\34 9_1439152630_1162119829 .fa')).click(); console.log('----->| NEXT ACTION: Click Standard Code 1, Content Item 2, Grade 9 checkmark icon'); //Wait until the element exists in the DOM const element = await driver.wait( until.elementLocated(By.css('.fa-pause-circle')), 30000 ); //Wait until it becomes visible await driver.wait( until.elementIsVisible(element), 30000 ); console.log('Passed: Standard Code 1, Content Item 2, hidden icon appeared as expected'); } }, //NEXT ACTION { description: 'Test Case Reset - Click Standard Code 1, Content Item 9, Grade 9 radio icon', action: async () => { await driver.findElement(By.css('#\\34 9_1439152630_1162119830 .fa')).click(); console.log('----->| NEXT ACTION: Click Standard Code 1, Content Item 9, Grade 9 radio icon'); //Wait until the element exists in the DOM const element = await driver.wait( until.elementLocated(By.css('.fa-dot-circle-o')), 30000 ); //Wait until it becomes visible await driver.wait( until.elementIsVisible(element), 30000 ); console.log('Passed: Standard Code 1, Content Item 9, radio icon appeared as expected'); } }, //NEXT ACTION { description: 'Log Out', action: async () => { const multipleChecks = 'Log Out'; //Track all errors const errors = []; await driver.findElement(By.css('#navbarDropdown > span')).click(); await driver.sleep(2000); await driver.findElement(By.linkText('Log Out')).click(); console.log('----->| NEXT ACTION: Clicked User Profile and Logged Out'); //Wait until the element exists in the DOM const exactLogo = await driver.wait( until.elementLocated(By.css('.logo')), 30000 ); //Wait until it becomes visible await driver.wait( until.elementIsVisible(exactLogo), 30000 ); //Wait for page to load completely await driver.wait(async () => { const readyState = await driver.executeScript('return document.readyState'); return readyState === 'complete'; }, 30000, 'ExACT Langing page did not fully load within 30 seconds'); console.log('Passed: ExACT Landing Page 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')); } } }, ]; //STAND ALONE const myStandardsSearch = (req, res) => { res.send('

ExACT Automated Test Script: My Standards - Aligned Content (myStandardsSearchAlignedContent) | Initiated

'); (async function example() { let driver = await new Builder() .forBrowser('chrome') .setChromeOptions( new ChromeOptions() .addArguments('--disable-features=MediaRouter') .addArguments('--disable-extensions') .addArguments('--disable-background-networking') .addArguments('--log-level=3') ) .build(); let testStatus = 'Failed'; let workbook; let worksheet; const startTime = new Date().toISOString(); const steps = [ { description: 'Navigate to ExACT Landing Page', action: async () => await driver.navigate().to('https://correlation.edgate.com/exact/login.php') }, { description: 'Expand browser', action: async () => await driver.manage().window().maximize() }, //Login { description: 'Login and navigate to Search Standards page', action: async () => { const multipleChecks = 'Log In and navigate to Search Standards page'; console.log('------------->| NAVIGATE TO SEARCH STANDARDS PAGE |<-------------'); console.log('------>| myStandardsSearch_AlignedContent / STAND ALONE |<-------------'); 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'); //Final sleep to allow any remaining dynamic content to settle await driver.sleep(2000); //NEXT ACTION - Click Alabama view icon await driver.findElement(By.css('tr:nth-child(1) > .text-center:nth-child(5) img')).click(); console.log('----->| NEXT ACTION: Clicked My Standards widget 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 subjectDropdown = await driver.findElement(By.css('#selectSubjects')); return await subjectDropdown.isDisplayed(); } catch (e) { return false; //Element not ready yet, keep waiting } }, 20000, 'Browse standards tab did not become visible within 20 seconds'); //NEXT ACTION - Select subject Mathematics await driver.findElement(By.css('#selectSubjects')).click(); await driver.sleep(2000); await driver.findElement(By.css('#selectSubjects > option:nth-child(4)')).click(); console.log('----->| NEXT ACTION: Selected Subject: Mathematics'); await driver.sleep(2000); //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'); //Select grade 9 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'); //Click Show Correlations From to open dropdow await driver.findElement(By.css('.col-sm-12 .multiselect-selected-text')).click(); await driver.sleep(2000); //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 ); //Select "Algebra" from dropdown await driver.findElement(By.css('.show > li:nth-child(5) input')).click(); await driver.sleep(2000); console.log('----->| NEXT ACTION: Selected Show Correlations From: 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); //Click Include Related Standards checkbox 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'); //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); //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 Include 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); //Click Search button 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'); //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 search page did not become visible within 20 seconds'); console.log('Passed: Standards search page 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')); } } }, //Then spread all your existing steps ...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', 'myStandardsSearchAlignedContentResults'); 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', 'myStandardsSearchAlignedContent.xlsx'); const clearOldResults = () => { //Remove old screenshots const screenshotDir = path.join('screenshots', 'myStandardsSearchAlignedContent'); if (fs.existsSync(screenshotDir)) { fs.rmSync(screenshotDir, { recursive: true, force: true }); } fs.mkdirSync(screenshotDir, { recursive: true }); //Remove old Excel file if (fs.existsSync(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: My Standards Search - Aligned Content (myStandardsSearchAlignedContent); All test steps completed successfully'); testStatus = 'Passed'; } else { console.log('------------->| THE END |<-------------'); console.log('FAILED: My Standards Search - Aligned Content (myStandardsSearchAlignedContent); 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 myStandardsSearch;