diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3329823 --- /dev/null +++ b/.gitignore @@ -0,0 +1,110 @@ +# Created by https://www.gitignore.io/api/osx,node,linux + +### Linux ### +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Typescript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +### OSX ### +*.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + + +# End of https://www.gitignore.io/api/osx,node,linux + +dist/ +build/ +.idea diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 0000000..3d24e26 --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,7 @@ +module.exports = { + printWidth: 100, + singleQuote: true, + tabWidth: 4, + arrowParens: 'always', + trailingComma: 'es5', +}; diff --git a/README.md b/README.md new file mode 100644 index 0000000..443ca56 --- /dev/null +++ b/README.md @@ -0,0 +1,58 @@ +# axe-result-pretty-print + +The module allows to make readable output for aXe core accessibility results from raw aXe result object. +Prints violations summary in a table, violations details and small summary of passed rules. + +Allows skipping violations summary table print. + +See [sample console output](sampleOutput.png) + +## Install + +``` +npm i axe-result-pretty-print +``` + +## Usage + +### Example usage in TestCafe + +To run TestCafe tests with axe-core, install testcafe, axe-core and [@testcafe-community/axe](https://www.npmjs.com/package/@testcafe-community/axe): + +```shell script +npm i -D axe-result-pretty-print testcafe axe-core @testcafe-community/axe +``` + +For TestCafe example add the following clientScript in your `.testcaferc.json` config: + +```json +{ + "clientScripts": [{ "module": "axe-core/axe.min.js" }] +} +``` + +Full TestCafe test example is bellow: + +```javascript +import { runAxe } from '@testcafe-community/axe'; +import { prettyPrintAxeReport } from 'axe-result-pretty-print'; +import { t } from 'testcafe'; + +fixture('TestCafe test with Axe').page('http://example.com'); + +test('Automated accessibility testing', async (t) => { + const axeContext = { exclude: [['select']] }; + // example with providing specific axe rules + const axeOptions = { + rules: { 'color-contrast': { enabled: true }, 'duplicate-id': { enabled: true } }, + }; + const { error, results } = await runAxe(axeContext, axeOptions); + await t.expect(error).eql(null, `axe check failed with an error: ${error.message}`); + // prints full report with failed violations and passed rules summary + prettyPrintAxeReport({ + violations: results.violations, + passes: results.passes, + url: 'www.example.com', + }); +}); +``` diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000..5939f20 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,23 @@ +const config = { + cacheDirectory: '/build/.jestcache', + collectCoverage: true, + coverageDirectory: '/build/.jestcoverage', + coverageReporters: ['lcov', 'text', 'html', 'text-summary', 'json-summary'], + rootDir: process.cwd(), + testPathIgnorePatterns: ['/.build/', '/node_modules/', 'eslintrc.js'], + transform: { + '^.+\\.jsx?$': 'babel-jest', + '^.+\\.tsx?$': 'ts-jest' + }, + testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.(j|t)sx?$', + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], + globals: { + 'ts-jest': { + tsConfig: 'tsconfig.json' + } + }, + testEnvironment: 'node', + collectCoverageFrom: ['/src/**/*.ts'], +}; + +module.exports = config; diff --git a/package.json b/package.json new file mode 100644 index 0000000..1a76a8e --- /dev/null +++ b/package.json @@ -0,0 +1,56 @@ +{ + "name": "axe-result-pretty-print", + "version": "1.0.0", + "description": "The module allows to make readable output for aXe core accessibility results from raw aXe result object.", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "repository": { + "type": "git", + "url": "https://github.com/lpelypenko/axe-result-pretty-print" + }, + "engines": { + "node": ">=8.9.0" + }, + "keywords": [ + "axe", + "report", + "test", + "accessibility" + ], + "author": "Liliia Pelypenko (liliia.pelypenko@gmail.com)", + "license": "MIT", + "files": [ + "dist", + "src", + "test", + "types" + ], + "bugs": { + "url": "https://github.com/lpelypenko/axe-result-pretty-print/issues" + }, + "homepage": "https://github.com/lpelypenko/axe-result-pretty-print", + "scripts": { + "clean": "rm -rf dist build", + "prebuild": "npm run clean", + "build": "tsc --project tsconfig.build.json", + "test": "jest test", + "test:watch": "jest test --watch" + }, + "publishConfig": { + "access": "public" + }, + "peerDependencies": { + "axe-core": ">=3" + }, + "devDependencies": { + "@types/jest": "^25.2.3", + "@types/node": "^14.11.8", + "jest": "^26.5.3", + "prettier": "^2.1.2", + "ts-jest": "^26.4.1", + "typescript": "^4.0.3" + }, + "dependencies": { + "chalk": "^4.1.0" + } +} diff --git a/sampleOutput.png b/sampleOutput.png new file mode 100644 index 0000000..42d9276 Binary files /dev/null and b/sampleOutput.png differ diff --git a/src/SpecReportTypes.ts b/src/SpecReportTypes.ts new file mode 100644 index 0000000..89f0a67 --- /dev/null +++ b/src/SpecReportTypes.ts @@ -0,0 +1,23 @@ +import { Result } from 'axe-core'; + +interface Summary { + description: string; + id: string; + wcag: string; + impact: string; + nodes: number; +} + +export interface SpecPreparedData { + violationsTotal: string; + violationsSummaryTable: Summary[] | []; + violationsDetailsFormatted: string; + checksPassedSummary?: string; +} + +export interface SpecReportInput { + violations: Result[]; + passes?: Result[]; + url?: string; + skipResultTable?: boolean; +} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..7bac945 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,33 @@ +import { prepareReportData } from './prepareReportData'; +import { SpecReportInput } from './SpecReportTypes'; + +/** + * pretty print outputs only violations and passes + * @param report + */ +export function prettyPrintAxeReport(report: SpecReportInput): void { + try { + const preparedData = prepareReportData({ + violations: report.violations, + passes: report.passes, + url: report.url, + }); + // Print summary of violations as a table + if (preparedData.violationsSummaryTable.length !== 0) { + console.info(preparedData.violationsTotal); + if (!report.skipResultTable) { + console.table(preparedData.violationsSummaryTable); + } + console.info(preparedData.violationsDetailsFormatted); + } + if (preparedData.checksPassedSummary !== '') { + console.info(preparedData.checksPassedSummary); + } + } catch (e) { + // throw the error only if user made a mistake in passing wrong variable + if (e instanceof TypeError) { + throw e; + } + console.log(`printAxeReport() failed with an error${e}`); + } +} diff --git a/src/prepareReportData.ts b/src/prepareReportData.ts new file mode 100644 index 0000000..e723ee4 --- /dev/null +++ b/src/prepareReportData.ts @@ -0,0 +1,106 @@ +import { bold } from 'chalk'; +import { SpecPreparedData, SpecReportInput } from './SpecReportTypes'; + +/** + * Axe returns variety of tags that are not necessary for our purposes. + * We are interested only in WCAG related tags and Best Practices. + * Function tries to determine if tag belongs to Best Practice or any WCAG 2.x, otherwise all tags will be returned raw + * @param tags + * @returns {string} + */ +export function getWcagReference(tags: string[]): string { + const tagsNames = ['wcag2a', 'wcag2aa', 'wcag21a', 'wcag21aa', 'best-practice']; + const foundTags = tags.filter((tag) => tagsNames.includes(tag)); + + const tagNamesToAccessibilityStandard: Record = { + wcag2a: 'WCAG 2.0 Level A', + wcag2aa: 'WCAG 2.0 Level AA', + wcag21a: 'WCAG 2.1 Level A', + wcag21aa: 'WCAG 2.1 Level AA', + 'best-practice': 'Best practice', + }; + + if (foundTags.length > 0) { + return foundTags.map((tag) => tagNamesToAccessibilityStandard[tag]).join(','); + } + + return tags.join(','); +} + +/** + * Prepare report splitting it into sections: + * - total accessibility violations (counting nodes) + * - summary of violations that could be printed as table + * - detailed list of violations that could be printed as formatted text + * @param violations + * @param passes + */ +export function prepareReportData({ violations, passes, url }: SpecReportInput): SpecPreparedData { + if (!violations) { + throw new TypeError( + 'prepareReportData() requires violations to be passed as an object: prepareReportData({violations: Result[]})' + ); + } + const passesIds = passes + ? passes + .map(({ id }) => { + return id; + }) + .join(', ') + : ''; + const checksPassedSummary = passes + ? `${bold(`Page passed ${passes.length} axe rules:`)} ${passesIds}` + : ''; + if (violations.length === 0) { + return { + violationsTotal: 'No accessibility violation were detected', + violationsSummaryTable: [], + violationsDetailsFormatted: '', + checksPassedSummary, + }; + } + const total = violations.reduce((acc, { nodes }) => { + acc += nodes.length; + return acc; + }, 0); + const violationsTotal = `Axe core library found ${total} violation${total === 1 ? '' : 's'}${ + url ? ` for the ${url}` : '' + }`; + // Prepare data to show summary + const violationsSummaryTable = violations.map(({ nodes, description, id, tags, impact }) => ({ + description, + id, + wcag: getWcagReference(tags), + impact: impact || 'n/a', + nodes: nodes.length, + })); + + // Prepare data to show detailed list of violations + const violationsDetailsFormatted = violations + .map(({ nodes, description, help, id, tags, helpUrl }, i) => { + const wcagRef = ` ${bold('WCAG: ')}'${getWcagReference(tags)}'`; + const axeRuleId = `${bold('id: ')}'${id}'`; + const summary = ` ${bold('description: ')}${description}`; + const name = ` ${bold('name: ')}${help}`; + const learnMore = `${bold('learn more: ')}${helpUrl}`; + const nodeDetails = `${bold(' Affected elements:')}\n`.concat( + nodes + .map(({ target, html }) => { + const targetNodes = target.map((node) => `"${node}"`).join(', '); + return `\tSelector: ${targetNodes}\tSource code: ${html}`; + }) + .join('\n') + ); + + return `${i + + 1}. ${axeRuleId}\t${learnMore}\n${name}\n${summary}\n${wcagRef}\n${nodeDetails}\n`; + }) + .join('\n'); + + return { + violationsTotal, + violationsSummaryTable, + violationsDetailsFormatted, + checksPassedSummary, + }; +} diff --git a/test/__mock_data__/rawPasses.json b/test/__mock_data__/rawPasses.json new file mode 100644 index 0000000..4a1d2c4 --- /dev/null +++ b/test/__mock_data__/rawPasses.json @@ -0,0 +1,4828 @@ +[ + { + "id": "page-has-heading-one", + "impact": null, + "tags": ["cat.semantics", "best-practice"], + "description": "Ensure that the page, or at least one of its frames contains a level-one heading", + "help": "Page must contain a level-one heading", + "helpUrl": "https://dequeuniversity.com/rules/axe/4.0/page-has-heading-one?application=axeAPI", + "nodes": [ + { + "any": [], + "all": [ + { + "id": "page-has-heading-one", + "data": null, + "relatedNodes": [{ "html": "

Create a campaign

", "target": ["h1"] }], + "impact": "moderate", + "message": "Page has at least one level-one heading" + } + ], + "none": [], + "impact": null, + "html": "", + "target": ["html"] + } + ] + }, + { + "id": "region", + "impact": "moderate", + "tags": ["cat.keyboard", "best-practice"], + "description": "Ensures all page content is contained by landmarks", + "help": "All page content must be contained by landmarks", + "helpUrl": "https://dequeuniversity.com/rules/axe/4.0/region?application=axeAPI", + "nodes": [ + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": ["noscript"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": ["#platformAlertDomWrapper"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": ["#body-container"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-BodyWrapper"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-BodyMain"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-BodyMain > div"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-BodyMain > div > .ia-CampaignManagementBody.icl-Grid"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": ["#plugin_container_LumosBanner"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".plugin-hirec"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".plugin-hirec > div"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".plugin-hirec > div > div"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": ["#plugin_container_ReportPage"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".plugin-camp"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".plugin-camp > div"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".plugin-camp > div > div"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".plugin-camp > div > div > div"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".plugin-camp > div > div > div > .ia-CampaignManagementBody.icl-Grid"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
Back to Campaign list
", + "target": [".ia-backButton"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-backButton-left-arrow-img"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "

Create a campaign

", + "target": [".ia-CampaignManagementMainTitle"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "

Create a campaign

", + "target": ["h1"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-campaign-management-form"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-JobFilter"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "

Manage campaign jobs

", + "target": [".ia-JobFilter > h2"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": ["section"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": ["div[test-id=\"dropdown-button-sourceId\"]"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [ + "div[test-id=\"dropdown-button-sourceId\"] > .icl-ButtonDropdown--md.ia-ButtonDropdown.icl-ButtonDropdown" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [ + "div[test-id=\"dropdown-button-sourceId\"] > .icl-ButtonDropdown--md.ia-ButtonDropdown.icl-ButtonDropdown > div" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [ + "div[test-id=\"dropdown-button-sourceId\"] > .icl-ButtonDropdown--md.ia-ButtonDropdown.icl-ButtonDropdown > div > .icl-ButtonGroup" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-CampaignSchedule > .icl-Grid:nth-child(3) > .icl-u-xs-span3.icl-Grid-col"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": [".ia-CampaignSchedule-resetbutton"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-CampaignSchedule > .icl-Grid:nth-child(4)"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".icl-Grid:nth-child(4) > .icl-u-xs-span6.icl-Grid-col"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".icl-u-xs-span6.icl-Grid-col > .ia-campaign-form-checkbox"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".icl-u-xs-span6.icl-Grid-col > .ia-campaign-form-checkbox > .icl-Checkbox-item"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": [ + ".icl-u-xs-span6.icl-Grid-col > .ia-campaign-form-checkbox > .icl-Checkbox-item > .icl-Checkbox-label" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": ["input[name=\"prorate\"]"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "Prorate first month", + "target": [ + ".icl-u-xs-span6.icl-Grid-col > .ia-campaign-form-checkbox > .icl-Checkbox-item > .icl-Checkbox-label > span" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "End time", + "target": ["legend:nth-child(5)"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
All dates are in Austin time.
", + "target": [".icl-Radio-helpText:nth-child(6)"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
Select your end date and type that matches your hiring goals.
", + "target": [".icl-Radio-helpText:nth-child(7)"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-CampaignSchedule > .ia-campaign-form-radio"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-CampaignSchedule > .ia-campaign-form-radio > .icl-Radio"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": [".ia-CampaignSchedule > .ia-campaign-form-radio > .icl-Radio > legend"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-CampaignSchedule > .ia-campaign-form-radio > .icl-Radio > .icl-Radio-item:nth-child(2)"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": [ + ".ia-CampaignSchedule > .ia-campaign-form-radio > .icl-Radio > .icl-Radio-item:nth-child(2) > .icl-Radio-label[for=\"radio-one\"]" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": ["input[value=\"Ongoing\"]"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "Ongoing", + "target": [ + ".ia-CampaignSchedule > .ia-campaign-form-radio > .icl-Radio > .icl-Radio-item:nth-child(2) > .icl-Radio-label[for=\"radio-one\"] > span" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-CampaignSchedule > .ia-campaign-form-radio > .icl-Radio > .icl-Radio-item:nth-child(3)"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": [ + ".ia-CampaignSchedule > .ia-campaign-form-radio > .icl-Radio > .icl-Radio-item:nth-child(3) > .icl-Radio-label[for=\"radio-one\"]" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": [".icl-Radio-control[name=\"endDate\"][value=\"\"]"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "Set end time", + "target": [ + ".ia-CampaignSchedule > .ia-campaign-form-radio > .icl-Radio > .icl-Radio-item:nth-child(3) > .icl-Radio-label[for=\"radio-one\"] > span" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-campaign-management-block.icl-Grid:nth-child(3)"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "

Manage campaign performance

", + "target": [".ia-campaign-management-block.icl-Grid:nth-child(3) > h2"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-campaign-management-block.icl-Grid:nth-child(3) > .ia-campaign-form-radio"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-campaign-management-block.icl-Grid:nth-child(3) > .ia-campaign-form-radio > .icl-Radio"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "Budget balancing", + "target": [ + ".ia-campaign-management-block.icl-Grid:nth-child(3) > .ia-campaign-form-radio > .icl-Radio > legend" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [ + ".ia-campaign-management-block.icl-Grid:nth-child(3) > .ia-campaign-form-radio > .icl-Radio > .icl-Radio-item:nth-child(2)" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": [ + ".ia-campaign-management-block.icl-Grid:nth-child(3) > .ia-campaign-form-radio > .icl-Radio > .icl-Radio-item:nth-child(2) > .icl-Radio-label[for=\"radio-one\"]" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": ["input[value=\"CLICK_BALANCING\"]"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "Click balancing", + "target": [ + ".ia-campaign-management-block.icl-Grid:nth-child(3) > .ia-campaign-form-radio > .icl-Radio > .icl-Radio-item:nth-child(2) > .icl-Radio-label[for=\"radio-one\"] > span" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
We'll keep the clicks roughly balanced across all jobs in the campaign.
", + "target": [".icl-Radio-item:nth-child(2) > .icl-Radio-helpText"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-campaign-balancing-more"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".icl-u-xs-span4"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".icl-u-xs-span4 > .ia-campaign-form-checkbox"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".icl-u-xs-span4 > .ia-campaign-form-checkbox > .icl-Checkbox-item"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": [".icl-u-xs-span4 > .ia-campaign-form-checkbox > .icl-Checkbox-item > .icl-Checkbox-label"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": ["input[name=\"balancingIncludeOrganic\"]"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "Include Organic", + "target": [ + ".icl-u-xs-span4 > .ia-campaign-form-checkbox > .icl-Checkbox-item > .icl-Checkbox-label > span" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [ + ".ia-campaign-management-block.icl-Grid:nth-child(3) > .ia-campaign-form-radio > .icl-Radio > .icl-Radio-item:nth-child(3)" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": [ + ".ia-campaign-management-block.icl-Grid:nth-child(3) > .ia-campaign-form-radio > .icl-Radio > .icl-Radio-item:nth-child(3) > .icl-Radio-label[for=\"radio-one\"]" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": ["input[value=\"APPLY_BALANCING\"]"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "Apply balancing", + "target": [ + ".ia-campaign-management-block.icl-Grid:nth-child(3) > .ia-campaign-form-radio > .icl-Radio > .icl-Radio-item:nth-child(3) > .icl-Radio-label[for=\"radio-one\"] > span" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
We'll keep the applications roughly balanced across all jobs in the campaign.
", + "target": [".icl-Radio-item:nth-child(3) > .icl-Radio-helpText"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".icl-Radio-item:nth-child(4)"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": [".icl-Radio-item:nth-child(4) > .icl-Radio-label[for=\"radio-one\"]"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": ["input[value=\"NO_BALANCING\"]"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "No balancing", + "target": [".icl-Radio-item:nth-child(4) > .icl-Radio-label[for=\"radio-one\"] > span"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
We'll try to get you the most total clicks across all jobs in the campaign, even if some jobs get lots and some jobs get few.
", + "target": [".icl-Radio-item:nth-child(4) > .icl-Radio-helpText"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-campaign-management-per-job-limits"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "

Set job limits (optional)

", + "target": [".ia-campaign-management-per-job-limits > h2"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "

You can limit the number of applies or amount of spend per job across all jobs in a single campaign. After a sponsored job crosses a limit, it will be paused. Your remaining budget will be spent on active jobs in the campaign.

", + "target": [".ia-campaign-management-block-comment"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": ["br"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-campaign-management-per-job-limits-grid.icl-Grid"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-campaign-management-per-job-limits-limit-type-column"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-campaign-management-per-job-limits-limit-type-column > .icl-TextInput-labelWrapper"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": [ + ".ia-campaign-management-per-job-limits-limit-type-column > .icl-TextInput-labelWrapper > .with-select-indentation.icl-TextInput-label" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": ["div[test-id=\"dropdown-button-newLimitType\"]"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [ + "div[test-id=\"dropdown-button-newLimitType\"] > .icl-ButtonDropdown--md.ia-ButtonDropdown.icl-ButtonDropdown" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [ + "div[test-id=\"dropdown-button-newLimitType\"] > .icl-ButtonDropdown--md.ia-ButtonDropdown.icl-ButtonDropdown > div" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [ + "div[test-id=\"dropdown-button-newLimitType\"] > .icl-ButtonDropdown--md.ia-ButtonDropdown.icl-ButtonDropdown > div > .icl-ButtonGroup" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-campaign-management-per-job-limits-create-button"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": [".ia-campaign-management-per-job-limits-create-button > .icl-Button--md[type=\"button\"]"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-campaign-management-per-job-limits > div:nth-child(4)"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [ + ".ia-campaign-management-per-job-limits > div:nth-child(4) > .ia-campaign-management-per-job-limits-grid" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-campaign-management-per-job-limits-grid > .icl-Grid"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".icl-u-xs-span12.icl-Grid-col:nth-child(1)"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-campaign-management-per-job-limits-divider"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": [ + ".ia-campaign-management-per-job-limits-divider > .with-select-indentation.icl-TextInput-label" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "

Currently you have no active limits.

", + "target": [ + ".ia-campaign-management-per-job-limits-grid > .icl-Grid > .icl-u-xs-span12.icl-Grid-col:nth-child(2)" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "

Currently you have no active limits.

", + "target": [".ia-campaign-management-per-job-limits-no-active-limits"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [ + ".ia-campaign-management-per-job-limits > div:nth-child(4) > .ia-campaign-management-per-job-limits-grid > div:nth-child(2)" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-campaign-management-block.icl-Grid:nth-child(5)"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "

Name campaign

", + "target": [".ia-campaign-management-block.icl-Grid:nth-child(5) > h2"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [ + ".ia-campaign-management-block.icl-Grid:nth-child(5) > .icl-u-xs-span12.icl-Grid-col:nth-child(2)" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".icl-u-xs-span12.icl-Grid-col:nth-child(2) > .ia-campaign-form-textarea.icl-Textarea"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [ + ".icl-u-xs-span12.icl-Grid-col:nth-child(2) > .ia-campaign-form-textarea.icl-Textarea > .icl-Textarea-wrapper" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [ + ".icl-u-xs-span12.icl-Grid-col:nth-child(2) > .ia-campaign-form-textarea.icl-Textarea > .icl-Textarea-wrapper > .icl-Textarea-labelWrapper" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": ["label[for=\"adName\"]"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": ["textarea[name=\"adName\"]"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-TrackingToken-textarea"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-TrackingToken-textarea > .ia-campaign-form-textarea.icl-Textarea"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [ + ".ia-TrackingToken-textarea > .ia-campaign-form-textarea.icl-Textarea > .icl-Textarea-wrapper" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [ + ".ia-TrackingToken-textarea > .ia-campaign-form-textarea.icl-Textarea > .icl-Textarea-wrapper > .icl-Textarea-labelWrapper" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": ["label[for=\"trackingToken\"]"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": ["textarea[name=\"trackingToken\"]"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-form-submit-buttons"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": ["button[type=\"submit\"]"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": [".ia-form-submit-buttons > .icl-Button--md[type=\"button\"]"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
*Certain jobs may not be shown in accordance with our Terms
", + "target": [".ia-campaign-terms-link"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "Certain jobs may not be shown in accordance with our Terms", + "target": [".ia-campaign-terms-link > span"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "Terms", + "target": [".ia-campaign-terms-link > span > a"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".icl-u-xs-span6.icl-Grid-col:nth-child(3)"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-campaign-jobs-table-pane"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
Select a source
", + "target": [".ia-campaign-jobs-table-pane > div:nth-child(1) > div:nth-child(1)"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "Select a source", + "target": [".ia-campaign-jobs-table-pane-title"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
Only selected jobs will be sponsored
", + "target": [".ia-campaign-jobs-table-pane > div:nth-child(1) > div:nth-child(2)"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "Only selected jobs will be sponsored", + "target": ["#campaign-job-search-input-helpText"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-campaign-jobs-table-pane > div:nth-child(2)"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".search-input"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".ia-campaign-table-search-container"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".icl-TextInputClearable"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".icl-TextInputClearable > .icl-TextInput"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": ["#label-campaign-job-search-input"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
", + "target": [".icl-TextInputClearable > .icl-TextInput > .icl-TextInput-wrapper"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
  • Campaign jobs(0)
  • ", + "target": [".icl-Tabs-tab--active"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "Campaign jobs(0)", + "target": [".icl-Tabs-tab--active > .icl-Tabs-link[role=\"tab\"][aria-controls=\"\"]"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
  • Excluded(0) - Not included(0)
  • ", + "target": [".icl-Tabs-tab[role=\"presentation\"]:nth-child(2)"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "Excluded(0) - Not included(0)", + "target": [ + ".icl-Tabs-tab[role=\"presentation\"]:nth-child(2) > .icl-Tabs-link[role=\"tab\"][aria-controls=\"\"]" + ] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": ["table"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": ["thead"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": ["tr"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": ["th:nth-child(1)"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
    ", + "target": [".centered-div"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": [".centered-div > span"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": ["th:nth-child(2)"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": ["th:nth-child(3)"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": ["th:nth-child(4)"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": ["th:nth-child(5)"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "", + "target": ["tbody"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
      ", + "target": [".pagination"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
    • <<
    • ", + "target": [".disabled:nth-child(1)"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "<<", + "target": [".disabled:nth-child(1) > a[role=\"button\"]"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
    • 1
    • ", + "target": [".active"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "1", + "target": ["a[aria-label=\"Page\\ 1\\ is\\ your\\ current\\ page\"]"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
    • >>
    • ", + "target": [".disabled:nth-child(3)"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": ">>", + "target": [".disabled:nth-child(3) > a[role=\"button\"]"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
      ", + "target": [".icl-ButtonDropdown--sm"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
      ", + "target": [".icl-ButtonDropdown--sm > div"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
      ", + "target": [".icl-ButtonDropdown--sm > div > .icl-ButtonGroup"] + }, + { + "any": [ + { + "id": "region", + "data": null, + "relatedNodes": [], + "impact": "moderate", + "message": "All page content is contained by landmarks" + } + ], + "all": [], + "none": [], + "impact": null, + "html": "
    TITLE(URL)COMPANYLOCATIONREFE#
    element should not contain the same text as the summary attribute", + "helpUrl": "https://dequeuniversity.com/rules/axe/4.0/table-duplicate-name?application=axeAPI", + "nodes": [ + { + "any": [], + "all": [], + "none": [ + { + "id": "same-caption-summary", + "data": null, + "relatedNodes": [], + "impact": "minor", + "message": "Content of summary attribute and are not duplicated" + } + ], + "impact": null, + "html": "", + "target": ["table"] + } + ] + }, + { + "id": "table-fake-caption", + "impact": null, + "tags": ["cat.tables", "experimental", "wcag2a", "wcag131", "section508", "section508.22.g"], + "description": "Ensure that tables with a caption use the
    element.", + "help": "Data or header cells should not be used to give caption to a data table.", + "helpUrl": "https://dequeuniversity.com/rules/axe/4.0/table-fake-caption?application=axeAPI", + "nodes": [ + { + "any": [], + "all": [ + { + "id": "caption-faked", + "data": null, + "relatedNodes": [], + "impact": "serious", + "message": "The first row of a table is not used as a caption" + } + ], + "none": [], + "impact": null, + "html": "", + "target": ["table"] + } + ] + }, + { + "id": "td-headers-attr", + "impact": null, + "tags": ["cat.tables", "wcag2a", "wcag131", "section508", "section508.22.g"], + "description": "Ensure that each cell in a table using the headers refers to another cell in that table", + "help": "All cells in a table element that use the headers attribute must only refer to other cells of that same table", + "helpUrl": "https://dequeuniversity.com/rules/axe/4.0/td-headers-attr?application=axeAPI", + "nodes": [ + { + "any": [], + "all": [ + { + "id": "td-headers-attr", + "data": null, + "relatedNodes": [], + "impact": "serious", + "message": "The headers attribute is exclusively used to refer to other cells in the table" + } + ], + "none": [], + "impact": null, + "html": "
    ", + "target": ["table"] + } + ] + } +] diff --git a/test/__mock_data__/rawViolations.json b/test/__mock_data__/rawViolations.json new file mode 100644 index 0000000..c2f4ab3 --- /dev/null +++ b/test/__mock_data__/rawViolations.json @@ -0,0 +1,969 @@ +[ + { + "id": "color-contrast", + "impact": "serious", + "tags": ["cat.color", "wcag2aa", "wcag143"], + "description": "Ensures the contrast between foreground and background colors meets WCAG 2 AA contrast ratio thresholds", + "help": "Elements must have sufficient color contrast", + "helpUrl": "https://dequeuniversity.com/rules/axe/4.0/color-contrast?application=axeAPI", + "nodes": [ + { + "any": [ + { + "id": "color-contrast", + "data": { + "fgColor": "#6f6f6f", + "bgColor": "#f2f2f2", + "contrastRatio": 4.48, + "fontSize": "9.0pt (12px)", + "fontWeight": "normal", + "expectedContrastRatio": "4.5:1" + }, + "relatedNodes": [ + { + "html": "", + "target": [ + "div:nth-child(2) > .ia-Radio-tabs > .ia-Radio-tab:nth-child(3) > .ia-Radio-tab-label" + ] + } + ], + "impact": "serious", + "message": "Element has insufficient color contrast of 4.48 (foreground color: #6f6f6f, background color: #f2f2f2, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1" + } + ], + "all": [], + "none": [], + "impact": "serious", + "html": "
    Set a bid that reflects how much an ad click is worth to your business. You will never pay more than you've bid.
    ", + "target": [ + "div:nth-child(2) > .ia-Radio-tabs > .ia-Radio-tab:nth-child(3) > .ia-Radio-tab-label > .icl-Radio-helpText" + ], + "failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.48 (foreground color: #6f6f6f, background color: #f2f2f2, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1" + }, + { + "any": [ + { + "id": "color-contrast", + "data": { + "fgColor": "#6f6f6f", + "bgColor": "#f2f2f2", + "contrastRatio": 4.48, + "fontSize": "9.0pt (12px)", + "fontWeight": "normal", + "expectedContrastRatio": "4.5:1" + }, + "relatedNodes": [ + { + "html": "", + "target": ["label[for=\"label-radio-adStatus-1\"]"] + } + ], + "impact": "serious", + "message": "Element has insufficient color contrast of 4.48 (foreground color: #6f6f6f, background color: #f2f2f2, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1" + } + ], + "all": [], + "none": [], + "impact": "serious", + "html": "
    Paused campaigns will not sponsor jobs until you make them active.
    ", + "target": ["label[for=\"label-radio-adStatus-1\"] > .icl-Radio-helpText"], + "failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.48 (foreground color: #6f6f6f, background color: #f2f2f2, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1" + }, + { + "any": [ + { + "id": "color-contrast", + "data": { + "fgColor": "#76798f", + "bgColor": "#ffffff", + "contrastRatio": 4.28, + "fontSize": "10.5pt (14px)", + "fontWeight": "normal", + "expectedContrastRatio": "4.5:1" + }, + "relatedNodes": [ + { + "html": "
    ", + "target": [".ia-campaign-management-per-job-limits"] + } + ], + "impact": "serious", + "message": "Element has insufficient color contrast of 4.28 (foreground color: #76798f, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1" + } + ], + "all": [], + "none": [], + "impact": "serious", + "html": "

    You can limit the number of applies or amount of spend per job across all jobs in a single campaign. After a sponsored job crosses a limit, it will be paused. Your remaining budget will be spent on active jobs in the campaign.

    ", + "target": [".ia-campaign-management-block-comment"], + "failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 4.28 (foreground color: #76798f, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1" + }, + { + "any": [ + { + "id": "color-contrast", + "data": { + "fgColor": "#cccccc", + "bgColor": "#ffffff", + "contrastRatio": 1.6, + "fontSize": "10.5pt (14px)", + "fontWeight": "normal", + "expectedContrastRatio": "4.5:1" + }, + "relatedNodes": [ + { + "html": "
    ", + "target": [".ia-campaign-management-per-job-limits"] + } + ], + "impact": "serious", + "message": "Element has insufficient color contrast of 1.6 (foreground color: #cccccc, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1" + } + ], + "all": [], + "none": [], + "impact": "serious", + "html": "

    Currently you have no active limits.

    ", + "target": [".ia-campaign-management-per-job-limits-no-active-limits"], + "failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 1.6 (foreground color: #cccccc, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1" + }, + { + "any": [ + { + "id": "color-contrast", + "data": { + "fgColor": "#808080", + "bgColor": "#ffffff", + "contrastRatio": 3.94, + "fontSize": "9.0pt (12px)", + "fontWeight": "normal", + "expectedContrastRatio": "4.5:1" + }, + "relatedNodes": [], + "impact": "serious", + "message": "Element has insufficient color contrast of 3.94 (foreground color: #808080, background color: #ffffff, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1" + } + ], + "all": [], + "none": [], + "impact": "serious", + "html": "
    ", + "target": [".ia-Footer-disclaimer"], + "failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.94 (foreground color: #808080, background color: #ffffff, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1" + }, + { + "any": [ + { + "id": "color-contrast", + "data": { + "fgColor": "#808080", + "bgColor": "#ffffff", + "contrastRatio": 3.94, + "fontSize": "9.0pt (12px)", + "fontWeight": "normal", + "expectedContrastRatio": "4.5:1" + }, + "relatedNodes": [], + "impact": "serious", + "message": "Element has insufficient color contrast of 3.94 (foreground color: #808080, background color: #ffffff, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1" + } + ], + "all": [], + "none": [], + "impact": "serious", + "html": "Cookies, Privacy and Terms – Do Not Sell My Personal Information – ©2020 Indeed", + "target": [".ia-util-floatRight:nth-child(3)"], + "failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.94 (foreground color: #808080, background color: #ffffff, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1" + }, + { + "any": [ + { + "id": "color-contrast", + "data": { + "fgColor": "#7777cc", + "bgColor": "#ffffff", + "contrastRatio": 3.96, + "fontSize": "9.0pt (12px)", + "fontWeight": "normal", + "expectedContrastRatio": "4.5:1" + }, + "relatedNodes": [], + "impact": "serious", + "message": "Element has insufficient color contrast of 3.96 (foreground color: #7777cc, background color: #ffffff, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1" + } + ], + "all": [], + "none": [], + "impact": "serious", + "html": "Cookies, Privacy and Terms", + "target": ["a[href$=\"legal\"]"], + "failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.96 (foreground color: #7777cc, background color: #ffffff, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1" + }, + { + "any": [ + { + "id": "color-contrast", + "data": { + "fgColor": "#7777cc", + "bgColor": "#ffffff", + "contrastRatio": 3.96, + "fontSize": "9.0pt (12px)", + "fontWeight": "normal", + "expectedContrastRatio": "4.5:1" + }, + "relatedNodes": [], + "impact": "serious", + "message": "Element has insufficient color contrast of 3.96 (foreground color: #7777cc, background color: #ffffff, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1" + } + ], + "all": [], + "none": [], + "impact": "serious", + "html": "Do Not Sell My Personal Information", + "target": [".ia-util-floatRight:nth-child(3) > span > a"], + "failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.96 (foreground color: #7777cc, background color: #ffffff, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1" + }, + { + "any": [ + { + "id": "color-contrast", + "data": { + "fgColor": "#7777cc", + "bgColor": "#ffffff", + "contrastRatio": 3.96, + "fontSize": "9.0pt (12px)", + "fontWeight": "normal", + "expectedContrastRatio": "4.5:1" + }, + "relatedNodes": [], + "impact": "serious", + "message": "Element has insufficient color contrast of 3.96 (foreground color: #7777cc, background color: #ffffff, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1" + } + ], + "all": [], + "none": [], + "impact": "serious", + "html": "Indeed", + "target": ["a[href$=\"indeed\\.com\\/\"]"], + "failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 3.96 (foreground color: #7777cc, background color: #ffffff, font size: 9.0pt (12px), font weight: normal). Expected contrast ratio of 4.5:1" + } + ] + }, + { + "id": "duplicate-id", + "impact": "minor", + "tags": ["cat.parsing", "wcag2a", "wcag411"], + "description": "Ensures every id attribute value is unique", + "help": "id attribute value must be unique", + "helpUrl": "https://dequeuniversity.com/rules/axe/4.0/duplicate-id?application=axeAPI", + "nodes": [ + { + "any": [ + { + "id": "duplicate-id", + "data": "label-radio-one", + "relatedNodes": [ + { + "html": "", + "target": [ + ".ia-CampaignSchedule > .ia-campaign-form-radio > .icl-Radio > .icl-Radio-item:nth-child(3) > .icl-Radio-label[for=\"radio-one\"]" + ] + }, + { + "html": "", + "target": [ + ".ia-campaign-management-block.icl-Grid:nth-child(3) > .ia-campaign-form-radio > .icl-Radio > .icl-Radio-item:nth-child(2) > .icl-Radio-label[for=\"radio-one\"]" + ] + }, + { + "html": "", + "target": [ + ".ia-campaign-management-block.icl-Grid:nth-child(3) > .ia-campaign-form-radio > .icl-Radio > .icl-Radio-item:nth-child(3) > .icl-Radio-label[for=\"radio-one\"]" + ] + }, + { + "html": "", + "target": [ + ".icl-Radio-item:nth-child(4) > .icl-Radio-label[for=\"radio-one\"]" + ] + } + ], + "impact": "minor", + "message": "Document has multiple static elements with the same id attribute: label-radio-one" + } + ], + "all": [], + "none": [], + "impact": "minor", + "html": "", + "target": [ + ".ia-CampaignSchedule > .ia-campaign-form-radio > .icl-Radio > .icl-Radio-item:nth-child(2) > .icl-Radio-label[for=\"radio-one\"]" + ], + "failureSummary": "Fix any of the following:\n Document has multiple static elements with the same id attribute: label-radio-one" + } + ] + }, + { + "id": "label", + "impact": "critical", + "tags": ["cat.forms", "wcag2a", "wcag412", "wcag131", "section508", "section508.22.n"], + "description": "Ensures every form element has a label", + "help": "Form elements must have labels", + "helpUrl": "https://dequeuniversity.com/rules/axe/4.0/label?application=axeAPI", + "nodes": [ + { + "any": [ + { + "id": "aria-label", + "data": null, + "relatedNodes": [], + "impact": "serious", + "message": "aria-label attribute does not exist or is empty" + }, + { + "id": "aria-labelledby", + "data": null, + "relatedNodes": [], + "impact": "serious", + "message": "aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty" + }, + { + "id": "implicit-label", + "data": null, + "relatedNodes": [], + "impact": "critical", + "message": "Form element does not have an implicit (wrapped)