Accessibility Testing with Katalon

Dear Community,

I was happy to find that Accessibility testing was considered by Katalon with official documentaion such as: Accessibility test automation in Katalon Studio | Katalon Docs and pointing to the well known axe-core library. This topic was debated on this forum in the past but never got to any conclusion / fruitful guide for newcomers to follow so I am starting this new thread here, especially knowing we recently moved to Katalon 10.x which can have some consequences…

I happily followed the link in the Katalon official doc, downloaded the recommended version of package selenium-4.4.1.jar then added it to my KSE and tried to create a keyword as suggested, then ran a simple test and… it failed.

I then removed the fancy / unecessary keyword complexity (can come as step 2 / enhancement for accessibility testing scale up) and came with this simple root script to check axe core capabilities fast:

import com.deque.html.axecore.selenium.AxeBuilder as AxeBuilder
import com.kms.katalon.core.webui.driver.DriverFactory as DriverFactory

WebUI.openBrowser('')
WebUI.navigateToUrl(targetURL)
AxeBuilder axe = new AxeBuilder()
def driver = DriverFactory.getWebDriver()
axe.analyze(driver)

I get a similar error to when I was trying to run via keyword, and I fear this is not working anymore with Katalon 4.x / Selenium 4 :frowning:

java.lang.NoSuchMethodError: 'org.openqa.selenium.WebDriver$Timeouts org.openqa.selenium.WebDriver$Timeouts.setScriptTimeout(long, java.util.concurrent.TimeUnit)'

Is there someone in our community actually using this library / currently running accessibility tests and who could share some insights?

3 Likes

I have no experience working with Axe.

Especially this part

setScriptTimeout(long,

is suspicious.

In the modern Selenium 4 and later versions, the setTimeout and related methods are used with the java.time.Duration class, moving away from the older, deprecated long time, TimeUnit unit signature. Therefore your application has some version incompatibility problem.

I have no idea how to fix it.

2 Likes

Thanks for confirming my fears. :slight_smile:

I contacted the library creator, seing some recent activity on axe-core github gives me hope, I will update here if I get some update.

1 Like

1) Do not override Selenium in Katalon; only add the axe JAR

Katalon’s own docs recommend adding only the axe-core Selenium integration JAR, not a Selenium JAR, and explicitly warn that the integration is “not officially supported” and version-sensitive.​

  • Remove any selenium-*.jar you manually added to:
    • Project > Settings > Library Management > External Libraries.
  • Keep only the axe-core Selenium integration JAR from Deque (for example, axe-selenium-java/axe-core-selenium), so Katalon’s bundled Selenium remains the only Selenium implementation on the classpath.​
  • Then retry a minimal script:
import com.deque.html.axecore.selenium.AxeBuilder
import com.kms.katalon.core.webui.driver.DriverFactory
import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI

WebUI.openBrowser('')
WebUI.navigateToUrl(targetURL)

def driver = DriverFactory.getWebDriver()
new AxeBuilder().analyze(driver)
  • If the same NoSuchMethodError persists even without your own Selenium JAR, it means the Deque adapter itself is not compatible with the Selenium version inside Katalon 10.x.​

2) Use the browser-injected axe.min.js pattern instead

Because axe-selenium-java is deprecated and tightly coupled to older Selenium APIs, a more robust approach is to inject axe.min.js directly and call it via executeAsyncScript, avoiding the AxeBuilder Java wrapper entirely.​

High-level idea:

  1. Download axe.min.js from Deque and place it under, for example, Include/scripts/axe/axe.min.js in your project.
  2. In a custom keyword:
  • Read the file contents into a String.
  • driver.executeScript(axeScript) to inject axe into the page.
  • Then call:
def result = driver.executeAsyncScript(
  'var callback = arguments[arguments.length - 1]; ' +
  'axe.run().then(results => callback(results));'
)
  • Serialize result to JSON and write it to a report file, or assert based on result.violations.​
  1. This pattern mirrors official axe-core + Selenium examples and avoids the problematic setScriptTimeout call inside the deprecated adapter.​

The dequelabs/axe-core-maven-html project just recently (16 hours ago) raised an issue:

This issue suggests that even the latest version of the Axe product has the aforementioned method signature problem outstanding.

I suppose that @yann.sautreuil needs to wait for them to fix the problem. Or you might want to fix the problem in the Axe project and contribute a pull-request to them.


By the way, Selenium-Java 4.0.0 was released at Oct 2021, 4 years ago. This means the Axe project was not aware of the method signature incompatibility problem for 4 years. Maybe nobody has noticed the issue up to now when @yann.sautreuil found it. Presumably the issue does not matter for the Axe users very much. I am afraid that the Axe project would not work on this issue after the 4 years of ignorance.

Indeed @kazurayam I contacted the project owner yesterday after you confirmed my thoughts about selenium 4 compatibility and they created this issue. So happy to see things moving so fast. :slight_smile: Need to wait now indeed.

1 Like

Thanks for your response @dineshh

Regarding the JAR, I think it’s the right one I downloaded from the link proposed in Katalon documentation here: https://mvnrepository.com/artifact/com.deque.html.axe-core/selenium/4.4.1

Also where do you see that it’s not officially supported, the katalon page seems on the contrary to say it works very well with Katalon and is the go to way of doing accessibility tests: Accessibility Testing: A Complete Guide - “You can easily automate accessibility testing at scale by combining Katalon’s low-code automation features with Axe’s accessibility testing tool thanks to the Axe-core library integrated in Katalon Studio.”

Anyway when I mentioned my error to the repo owner they replied by creating a bug on their side, recognizing there is something they need to adjust.

Regarding the second option, I spent half an hour fighting to run the project locally and generate this simple js file with npm run build and stuff, throwing errors in my face and requesting to install X so that I can then install or run Y and so that I can… I was already fedup with this nonsense 20 years ago, I still am. :slight_smile: Now if someone has a better configured machine / dev environment to generate the js file, I would be happy to test your second approach.

I guess that @dineshh looked at axe-selenium-java/README.md at master · dequelabs/axe-selenium-java · GitHub and found a notion of “DEPRECATED” there:

but unfortunately he missed the appended comment “The package has been moved to axe-core-maven-html”.

At the very top of the axe-core-maven-html project’s README, they say you can use Playwright to run a test on top of their library.

I guess that Accessibility tests would be more intuitively implemented in JavaScript/TypeScript locally on browser than via the remote WebDriver protocol in Java/Groovy. So Playwright would be better fit than Selenium for Accessibility Testing.

@yann.sautreuil

Why not you try switching from Katalon to Playwright? To try it, you do not have to wait for the axe-core-maven-html project to improve itself for Selenium.

You’ve identified a critical compatibility issue between axe-core 4.4.1 and Katalon Studio 10.x with Selenium 4. The error you’re experiencing is a confirmed version mismatch problem:

java.lang.NoSuchMethodError: 'org.openqa.selenium.WebDriver$Timeouts 
org.openqa.selenium.WebDriver$Timeouts.setScriptTimeout(long, java.util.concurrent.TimeUnit)'

Root Cause:

  • Katalon Studio 10.x uses Selenium 4.x (with W3C WebDriver standard)
  • axe-core 4.4.1 was built for Selenium 4.4.1 but has internal API calls that are incompatible with newer Selenium 4 versions bundled in Katalon 10.x
  • The setScriptTimeout() method signature changed in later Selenium 4 versions, causing the NoSuchMethodError

Important Note from Official Documentation:
The Katalon docs explicitly state:

“This integration provides assistance for certain user-specific use cases, but it is not officially supported. Compatibility with all user requirements is not guaranteed.”


Solutions

Solution 1: Use a Newer/Compatible axe-core Version (Recommended)

The issue is that axe-core 4.4.1 is outdated. Try using a newer version of axe-core that’s compatible with Selenium 4.x:

Step 1: Download a newer axe-core version

Instead of 4.4.1, try downloading 4.7.0 or later from Maven:

Step 2: Add to Katalon

  1. Go to Project > Settings > Library Management
  2. Remove the old selenium-4.4.1.jar
  3. Add the new axe-core JAR file (e.g., selenium-4.7.0.jar or later)

Step 3: Test with your script

import com.deque.html.axecore.selenium.AxeBuilder
import com.kms.katalon.core.webui.driver.DriverFactory

WebUI.openBrowser('')
WebUI.navigateToUrl('your-target-url')

try {
    AxeBuilder axe = new AxeBuilder()
    def driver = DriverFactory.getWebDriver()
    def results = axe.analyze(driver)
    
    println("Accessibility violations found: " + results.getViolations().size())
} catch (Exception e) {
    println("Error: " + e.getMessage())
    e.printStackTrace()
}

WebUI.closeBrowser()

Solution 2: Use the Official Katalon Custom Keyword (With Fixes)

If newer versions don’t work, use the official Katalon documentation approach but with error handling:

import com.kms.katalon.core.util.KeywordUtil
import java.text.SimpleDateFormat
import com.kms.katalon.core.configuration.RunConfiguration
import com.kms.katalon.core.webui.driver.DriverFactory
import com.deque.html.axecore.selenium.AxeBuilder
import com.deque.html.axecore.selenium.AxeReporter
import com.deque.html.axecore.selenium.ResultType
import com.deque.html.axecore.results.Results
import com.deque.html.axecore.results.Rule
import static com.deque.html.axecore.selenium.AxeReporter.getReadableAxeResults

@Keyword
def checkAccessibility() {
    try {
        Results results = new AxeBuilder().analyze(DriverFactory.getWebDriver())
        List<Rule> violations = results.getViolations()
        
        if(violations.size() == 0) {
            KeywordUtil.logInfo("No Violation Found")
            return true
        }
        
        String AxeReportPath = RunConfiguration.getReportFolder() + File.separator
        String timeStamp = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss").format(new java.util.Date())
        String AxeViolationReportPath = AxeReportPath + "AccessibilityViolations_" + timeStamp
        
        AxeReporter.writeResultsToJsonFile(AxeViolationReportPath, results)
        KeywordUtil.logInfo("Violation Report Path: " + AxeViolationReportPath)
        
        if(getReadableAxeResults(ResultType.Violations.getKey(), DriverFactory.getWebDriver(), violations)) {
            AxeReporter.writeResultsToTextFile(AxeViolationReportPath, AxeReporter.getAxeResultString())
        }
        
        return false // Violations found
    } catch (Exception e) {
        KeywordUtil.logError("Accessibility check failed: " + e.getMessage())
        e.printStackTrace()
        throw e
    }
}

Solution 3: Alternative - Use Selenium’s Native JavaScript Execution

If axe-core continues to fail, implement accessibility testing using Selenium’s native JavaScript execution to run axe-core directly in the browser:

import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI
import com.kms.katalon.core.webui.driver.DriverFactory
import groovy.json.JsonSlurper

@Keyword
def checkAccessibilityWithJS() {
    WebUI.openBrowser('')
    WebUI.navigateToUrl('your-target-url')
    
    // Inject axe-core script from CDN
    WebUI.executeJavaScript("""
        var script = document.createElement('script');
        script.src = 'https://cdnjs.cloudflare.com/ajax/libs/axe-core/4.7.0/axe.min.js';
        document.head.appendChild(script);
    """, null)
    
    WebUI.delay(2) // Wait for script to load
    
    // Run axe analysis
    String results = WebUI.executeJavaScript("""
        return JSON.stringify(axe.getResults());
    """, null)
    
    // Parse and verify results
    def jsonSlurper = new JsonSlurper()
    def axeResults = jsonSlurper.parseText(results)
    
    println("Violations: " + axeResults.violations.size())
    println("Passes: " + axeResults.passes.size())
    
    WebUI.closeBrowser()
    
    return axeResults
}

Key Recommendations

Aspect Recommendation
First Try Download axe-core 4.7.0 or later (not 4.4.1)
If Still Failing Use the JavaScript-based approach (Solution 3)
Official Support Note that axe-core integration is NOT officially supported by Katalon
Katalon 10.x Requires Selenium 4.x compatibility; verify JAR versions match
Error Handling Always wrap in try-catch blocks for production use

Next Steps

  1. Try Solution 1 first - Download a newer axe-core version (4.7.0+)
  2. If that fails, use Solution 3 (JavaScript-based approach) - this is more reliable
  3. Consider reporting this compatibility issue to the Katalon community forum or support if you need official guidance
1 Like

Unfortunately, this would not work. The current develop branch of the axe-core-maven-html project still has the method signagure problem unresolved.

I confirmed this at axe-core-maven-html/selenium/src/main/java/com/deque/html/axecore/selenium/AxeBuilder.java at develop · dequelabs/axe-core-maven-html · GitHub, the line#678.

1 Like

Thanks @Monty_Bagati I tried option 2 but it failed same way as initial method.

I tried option 3 and first javascript run goes fine but got this error related to second javascript run

12-18-2025 05:45:00 PM results = executeJavaScript("
        return JSON.stringify(axe.getResults());
    ", null)

Elapsed time: 0.243s

Unable to execute JavaScript. (Root cause: com.kms.katalon.core.exception.StepFailedException: Unable to execute JavaScript.
...
Caused by: org.openqa.selenium.JavascriptException: javascript error: axe.getResults is not a function

I asked copilot and it suggested axe.run() instead. Via Katalon I don’t manage to get it running but via Chrome when running in console

var script = document.createElement('script');
        script.src = 'https://cdnjs.cloudflare.com/ajax/libs/axe-core/4.7.0/axe.min.js';
        document.head.appendChild(script);

and then

axe.run()

then I get a result indeed:

All I need to figure out now, is how to get this working from KSE. :slight_smile:

1 Like

Apparently the call axe.run() returned a Promise object.

The Promise object runs asynchrously. You should remember Asynchronous JavaScript.

Now you want to get the result of a Promise synchronously and to convert the result into a string. So you need to prepend the call with await.

// Example assuming axe.run is used in a testing environment like Playwright or a browser context
// The 'results' variable holds the object returned by axe.run()

// ... inside your test or callback function ...
const accessibilityScanResults = await axe.run(document); // or wherever you get the results
const resultsString = JSON.stringify(accessibilityScanResults);

// You can now use the resultsString, for example, logging it to the console
console.log(resultsString);

and

return resultString;

in JavaScript will send the string back to the caller WebUI.executeJavascript(script) in your Test Case script.

Finally, your Groovy script can parse the string to Groovy Object and read the contents:

import groovy.json.JsonSlurper
...
String result = WebUI.executeJavascript(script)
def jsonSlurper = new JsonSlurper()
def parsedJson = jsonSlurper.parse(result)
println("id:" + parsedJson.id)
...

Now we know that the following Katalon document is obsolete and misleading. It should be revised.

c/c @Elly_Tran

Sending it to Documentation team, thanks Kazu

Thanks for your input @kazurayam !! After a few failed attempts yet interacting with Copilot and mentionning what you mentioned it finally came with a working piece of code, which unfortunately I still struggle to fully understand as I am complete newbie in javascript but it works!! (for now :slight_smile: )

Here it is in case someone is interested:

WebUI.executeJavaScript("""
    window.__axeResults = null;
    window.__axeError = null;

    (function(){
        function runAxe(){
            axe.run(document).then(function(results){
                window.__axeResults = results;
            }).catch(function(err){
                window.__axeError = err.message || 'Unknown error';
            });
        }

        if (window.axe) {
            runAxe();
        } else {
            var script = document.createElement('script');
            script.src = 'https://cdnjs.cloudflare.com/ajax/libs/axe-core/4.7.0/axe.min.js';
            script.async = true;
            script.onload = runAxe;
            script.onerror = function(e){ window.__axeError = 'Failed to load axe-core'; };
            document.head.appendChild(script);
        }
    })();
""", null)
	
	// Wait for axe to finish (adjust delay if needed)
	WebUI.delay(5) // 5 seconds
	
	// Retrieve results from the browser
	String resultsJson = WebUI.executeJavaScript("""
    return JSON.stringify(window.__axeResults || { error: window.__axeError || 'No results yet' });
""", null)
	
	println(resultsJson)
	
	// Parse and print violations
	def parsed = new JsonSlurper().parseText(resultsJson)
	if (parsed?.violations) {
		println("Violations count: ${parsed.violations.size()}")
		parsed.violations.each { v ->
			println("- ${v.id}: ${v.description} (impact: ${v.impact})")
		}
	} else {
		println("Error or no violations: ${parsed.error}")
	}

The last part parsing violations is optional, the main things is println(resultsJson) taking window.__axeResults and it’s what I was looking for.

Funny part for the end, Copilot proposed several time to use WebUI.executeAsyncJavaScript… if only it existed. :slight_smile:

I consider the topic solved, thanks for the help!!

1 Like

@yann.sautreuil

Thank you for sharing your achievement. Let me add a bit to your code.

The following code adds some import statements and WebUI.openBrowser() and closeBrowser(). This code performs a Accessibilty testing against the https://katalon-demo-cura.herokuapp.com/

import com.kms.katalon.core.webui.keyword.WebUiBuiltInKeywords as WebUI

import groovy.json.JsonSlurper

WebUI.openBrowser('')
WebUI.navigateToUrl('https://katalon-demo-cura.herokuapp.com/')

WebUI.executeJavaScript("""
    window.__axeResults = null;
    window.__axeError = null;

    (function(){
        function runAxe(){
            axe.run(document).then(function(results){
                window.__axeResults = results;
            }).catch(function(err){
                window.__axeError = err.message || 'Unknown error';
            });
        }

        if (window.axe) {
            runAxe();
        } else {
            var script = document.createElement('script');
            script.src = 'https://cdnjs.cloudflare.com/ajax/libs/axe-core/4.7.0/axe.min.js';
            script.async = true;
            script.onload = runAxe;
            script.onerror = function(e){ window.__axeError = 'Failed to load axe-core'; };
            document.head.appendChild(script);
        }
    })();
""", null)
	
// Wait for axe to finish (adjust delay if needed)
WebUI.delay(5) // 5 seconds
	
// Retrieve results from the browser
String resultsJson = WebUI.executeJavaScript("""
    return JSON.stringify(window.__axeResults || { error: window.__axeError || 'No results yet' });
""", null)
	
println(resultsJson)
	
// Parse and print violations
def parsed = new JsonSlurper().parseText(resultsJson)
if (parsed?.violations) {
	println("Violations count: ${parsed.violations.size()}")
	parsed.violations.each { v ->
		println("- ${v.id}: ${v.description} (impact: ${v.impact})")
	}
} else {
	println("Error or no violations: ${parsed.error}")
}

WebUI.closeBrowser()

When I ran this, I saw the output in the console tab of Katalon Studio GUI.

2025-12-21 11:22:43.084 INFO  c.k.k.c.l.logback.LogbackConfigurator    - Logback default configuration initialized from: /Applications/Katalon Studio Enterprise.app/Contents/Eclipse/configuration/org.eclipse.osgi/132/0/.cp/resources/logback/logback-execution.xml
2025-12-21 11:22:43.088 INFO  c.k.k.c.l.logback.LogbackConfigurator    - Logback custom configuration initialized from: /Users/kazuakiurayama/katalon-workspace/healthcare-tests/Include/config/log.properties
2025-12-21 11:22:44.433 INFO  c.k.katalon.core.main.TestCaseExecutor   - --------------------
2025-12-21 11:22:44.434 INFO  c.k.katalon.core.main.TestCaseExecutor   - START Test Cases/Axe_by_yann.sautreuil
2025-12-21 11:22:45.015 DEBUG testcase.Axe_by_yann.sautreuil           - 1: openBrowser("")
2025-12-21 11:22:45.299 INFO  c.k.k.core.webui.driver.DriverFactory    - Starting 'Chrome' driver
2025-12-21 11:22:45.309 INFO  c.k.k.c.w.util.WebDriverPropertyUtil     - User set preference: ['prefs', '{profile.password_manager_leak_detection=false}']
2025-12-21 11:22:45.360 INFO  c.k.k.core.webui.driver.DriverFactory    - Action delay is set to 0 milliseconds
12月 21, 2025 11:22:55 午前 org.openqa.selenium.devtools.CdpVersionFinder findNearestMatch
警告: Unable to find CDP implementation matching 143
12月 21, 2025 11:22:55 午前 org.openqa.selenium.chromium.ChromiumDriver lambda$new$4
警告: Unable to find version of CDP to use for 143.0.7499.147. You may need to include a dependency on a specific version of the CDP using something similar to `org.seleniumhq.selenium:selenium-devtools-v86:4.34.0` where the version ("v86") matches the version of the chromium-based browser you're using and the version number of the artifact is the same as Selenium's.
2025-12-21 11:22:56.440 INFO  c.k.k.core.webui.driver.DriverFactory    - sessionId = 67846cf04a192206961d5dd164f0a57d
2025-12-21 11:22:56.444 INFO  c.k.k.core.webui.driver.DriverFactory    - browser = Chrome 143.0.7499.147
2025-12-21 11:22:56.445 INFO  c.k.k.core.webui.driver.DriverFactory    - platform = Mac OS X
2025-12-21 11:22:56.446 INFO  c.k.k.core.webui.driver.DriverFactory    - seleniumVersion = 4.34.0
2025-12-21 11:22:56.470 INFO  c.k.k.core.webui.driver.DriverFactory    - proxyInformation = ProxyInformation { proxyOption=NO_PROXY, proxyServerType=HTTP, username=, password=********, proxyServerAddress=, proxyServerPort=0, executionList="", isApplyToDesiredCapabilities=true }
2025-12-21 11:22:56.637 DEBUG testcase.Axe_by_yann.sautreuil           - 2: navigateToUrl("https://katalon-demo-cura.herokuapp.com/")
2025-12-21 11:23:01.346 DEBUG testcase.Axe_by_yann.sautreuil           - 3: executeJavaScript("
    window.__axeResults = null;
    window.__axeError = null;

    (function(){
        function runAxe(){
            axe.run(document).then(function(results){
                window.__axeResults = results;
            }).catch(function(err){
                window.__axeError = err.message || 'Unknown error';
            });
        }

        if (window.axe) {
            runAxe();
        } else {
            var script = document.createElement('script');
            script.src = 'https://cdnjs.cloudflare.com/ajax/libs/axe-core/4.7.0/axe.min.js';
            script.async = true;
            script.onload = runAxe;
            script.onerror = function(e){ window.__axeError = 'Failed to load axe-core'; };
            document.head.appendChild(script);
        }
    })();
", null)
2025-12-21 11:23:01.455 DEBUG testcase.Axe_by_yann.sautreuil           - 4: delay(5)
2025-12-21 11:23:06.570 DEBUG testcase.Axe_by_yann.sautreuil           - 5: resultsJson = executeJavaScript("
    return JSON.stringify(window.__axeResults || { error: window.__axeError || 'No results yet' });
", null)
2025-12-21 11:23:06.775 DEBUG testcase.Axe_by_yann.sautreuil           - 6: println(resultsJson)
{"testEngine":{"name":"axe-core","version":"4.7.0"},"testRunner":{"name":"axe"},"testEnvironment":{"userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36","windowWidth":1200,"windowHeight":692,"orientationAngle":0,"orientationType":"landscape-primary"},"timestamp":"2025-12-21T02:23:05.870Z","url":"https://katalon-demo-cura.herokuapp.com/","toolOptions":{"reporter":"v1"},"inapplicable":[{"id":"accesskeys","impact":null,"tags":["cat.keyboard","best-practice"],"description":"Ensures every accesskey attribute value is unique","help":"accesskey attribute value should be unique","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/accesskeys?application=axeAPI","nodes":[]},{"id":"area-alt","impact":null,"tags":["cat.text-alternatives","wcag2a","wcag244","wcag412","section508","section508.22.a","ACT","TTv5","TT6.a"],"description":"Ensures <area> elements of image maps have alternate text","help":"Active <area> elements must have alternate text","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/area-alt?application=axeAPI","nodes":[]},{"id":"aria-allowed-attr","impact":null,"tags":["cat.aria","wcag2a","wcag412"],"description":"Ensures ARIA attributes are allowed for an element's role","help":"Elements must only use allowed ARIA attributes","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/aria-allowed-attr?application=axeAPI","nodes":[]},{"id":"aria-allowed-role","impact":null,"tags":["cat.aria","best-practice"],"description":"Ensures role attribute has an appropriate value for the element","help":"ARIA role should be appropriate for the element","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/aria-allowed-role?application=axeAPI","nodes":[]},{"id":"aria-command-name","impact":null,"tags":["cat.aria","wcag2a","wcag412","ACT","TTv5","TT6.a"],"description":"Ensures every ARIA button, link and menuitem has an accessible name","help":"ARIA commands must have an accessible name","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/aria-command-name?application=axeAPI","nodes":[]},{"id":"aria-dialog-name","impact":null,"tags":["cat.aria","best-practice"],"description":"Ensures every ARIA dialog and alertdialog node has an accessible name","help":"ARIA dialog and alertdialog nodes should have an accessible name","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/aria-dialog-name?application=axeAPI","nodes":[]},{"id":"aria-hidden-focus","impact":null,"tags":["cat.name-role-value","wcag2a","wcag412"],"description":"Ensures aria-hidden elements are not focusable nor contain focusable elements","help":"ARIA hidden element must not be focusable or contain focusable elements","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/aria-hidden-focus?application=axeAPI","nodes":[]},{"id":"aria-input-field-name","impact":null,"tags":["cat.aria","wcag2a","wcag412","ACT","TTv5","TT5.c"],"description":"Ensures every ARIA input field has an accessible name","help":"ARIA input fields must have an accessible name","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/aria-input-field-name?application=axeAPI","nodes":[]},{"id":"aria-meter-name","impact":null,"tags":["cat.aria","wcag2a","wcag111"],"description":"Ensures every ARIA meter node has an accessible name","help":"ARIA meter nodes must have an accessible name","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/aria-meter-name?application=axeAPI","nodes":[]},{"id":"aria-progressbar-name","impact":null,"tags":["cat.aria","wcag2a","wcag111"],"description":"Ensures every ARIA progressbar node has an accessible name","help":"ARIA progressbar nodes must have an accessible name","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/aria-progressbar-name?application=axeAPI","nodes":[]},{"id":"aria-required-attr","impact":null,"tags":["cat.aria","wcag2a","wcag412"],"description":"Ensures elements with ARIA roles have all required ARIA attributes","help":"Required ARIA attributes must be provided","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/aria-required-attr?application=axeAPI","nodes":[]},{"id":"aria-required-children","impact":null,"tags":["cat.aria","wcag2a","wcag131"],"description":"Ensures elements with an ARIA role that require child roles contain them","help":"Certain ARIA roles must contain particular children","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/aria-required-children?application=axeAPI","nodes":[]},{"id":"aria-required-parent","impact":null,"tags":["cat.aria","wcag2a","wcag131"],"description":"Ensures elements with an ARIA role that require parent roles are contained by them","help":"Certain ARIA roles must be contained by particular parents","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/aria-required-parent?application=axeAPI","nodes":[]},{"id":"aria-roles","impact":null,"tags":["cat.aria","wcag2a","wcag412"],"description":"Ensures all elements with a role attribute use a valid value","help":"ARIA roles used must conform to valid values","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/aria-roles?application=axeAPI","nodes":[]},{"id":"aria-text","impact":null,"tags":["cat.aria","best-practice"],"description":"Ensures \"role=text\" is used on elements with no focusable descendants","help":"\"role=text\" should have no focusable descendants","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/aria-text?application=axeAPI","nodes":[]},{"id":"aria-toggle-field-name","impact":null,"tags":["cat.aria","wcag2a","wcag412","ACT","TTv5","TT5.c"],"description":"Ensures every ARIA toggle field has an accessible name","help":"ARIA toggle fields must have an accessible name","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/aria-toggle-field-name?application=axeAPI","nodes":[]},{"id":"aria-tooltip-name","impact":null,"tags":["cat.aria","wcag2a","wcag412"],"description":"Ensures every ARIA tooltip node has an accessible name","help":"ARIA tooltip nodes must have an accessible name","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/aria-tooltip-name?application=axeAPI","nodes":[]},{"id":"aria-treeitem-name","impact":null,"tags":["cat.aria","best-practice"],"description":"Ensures every ARIA treeitem node has an accessible name","help":"ARIA treeitem nodes should have an accessible name","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/aria-treeitem-name?application=axeAPI","nodes":[]},{"id":"aria-valid-attr-value","impact":null,"tags":["cat.aria","wcag2a","wcag412"],"description":"Ensures all ARIA attributes have valid values","help":"ARIA attributes must conform to valid values","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/aria-valid-attr-value?application=axeAPI","nodes":[]},{"id":"aria-valid-attr","impact":null,"tags":["cat.aria","wcag2a","wcag412"],"description":"Ensures attributes that begin with aria- are valid ARIA attributes","help":"ARIA attributes must conform to valid names","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/aria-valid-attr?application=axeAPI","nodes":[]},{"id":"autocomplete-valid","impact":null,"tags":["cat.forms","wcag21aa","wcag135","ACT"],"description":"Ensure the autocomplete attribute is correct and suitable for the form field","help":"autocomplete attribute must be used correctly","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/autocomplete-valid?application=axeAPI","nodes":[]},{"id":"avoid-inline-spacing","impact":null,"tags":["cat.structure","wcag21aa","wcag1412","ACT"],"description":"Ensure that text spacing set through style attributes can be adjusted with custom stylesheets","help":"Inline text spacing must be adjustable with custom stylesheets","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/avoid-inline-spacing?application=axeAPI","nodes":[]},{"id":"blink","impact":null,"tags":["cat.time-and-media","wcag2a","wcag222","section508","section508.22.j","TTv5","TT2.b"],"description":"Ensures <blink> elements are not used","help":"<blink> elements are deprecated and must not be used","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/blink?application=axeAPI","nodes":[]},{"id":"button-name","impact":null,"tags":["cat.name-role-value","wcag2a","wcag412","section508","section508.22.a","ACT","TTv5","TT6.a"],"description":"Ensures buttons have discernible text","help":"Buttons must have discernible text","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/button-name?application=axeAPI","nodes":[]},{"id":"definition-list","impact":null,"tags":["cat.structure","wcag2a","wcag131"],"description":"Ensures <dl> elements are structured correctly","help":"<dl> elements must only directly contain properly-ordered <dt> and <dd> groups, <script>, <template> or <div> elements","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/definition-list?application=axeAPI","nodes":[]},{"id":"dlitem","impact":null,"tags":["cat.structure","wcag2a","wcag131"],"description":"Ensures <dt> and <dd> elements are contained by a <dl>","help":"<dt> and <dd> elements must be contained by a <dl>","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/dlitem?application=axeAPI","nodes":[]},{"id":"duplicate-id-aria","impact":null,"tags":["cat.parsing","wcag2a","wcag411"],"description":"Ensures every id attribute value used in ARIA and in labels is unique","help":"IDs used in ARIA and labels must be unique","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/duplicate-id-aria?application=axeAPI","nodes":[]},{"id":"empty-table-header","impact":null,"tags":["cat.name-role-value","best-practice"],"description":"Ensures table headers have discernible text","help":"Table header text should not be empty","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/empty-table-header?application=axeAPI","nodes":[]},{"id":"form-field-multiple-labels","impact":null,"tags":["cat.forms","wcag2a","wcag332","TTv5","TT5.c"],"description":"Ensures form field does not have multiple label elements","help":"Form field must not have multiple label elements","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/form-field-multiple-labels?application=axeAPI","nodes":[]},{"id":"frame-focusable-content","impact":null,"tags":["cat.keyboard","wcag2a","wcag211","TTv5","TT4.a"],"description":"Ensures <frame> and <iframe> elements with focusable content do not have tabindex=-1","help":"Frames with focusable content must not have tabindex=-1","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/frame-focusable-content?application=axeAPI","nodes":[]},{"id":"frame-tested","impact":null,"tags":["cat.structure","review-item","best-practice"],"description":"Ensures <iframe> and <frame> elements contain the axe-core script","help":"Frames should be tested with axe-core","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/frame-tested?application=axeAPI","nodes":[]},{"id":"frame-title-unique","impact":null,"tags":["cat.text-alternatives","wcag412","wcag2a","TTv5","TT12.c"],"description":"Ensures <iframe> and <frame> elements contain a unique title attribute","help":"Frames must have a unique title attribute","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/frame-title-unique?application=axeAPI","nodes":[]},{"id":"frame-title","impact":null,"tags":["cat.text-alternatives","wcag2a","wcag412","section508","section508.22.i","TTv5","TT12.c"],"description":"Ensures <iframe> and <frame> elements have an accessible name","help":"Frames must have an accessible name","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/frame-title?application=axeAPI","nodes":[]},{"id":"html-xml-lang-mismatch","impact":null,"tags":["cat.language","wcag2a","wcag311","ACT"],"description":"Ensure that HTML elements with both valid lang and xml:lang attributes agree on the base language of the page","help":"HTML elements with lang and xml:lang must have the same base language","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/html-xml-lang-mismatch?application=axeAPI","nodes":[]},{"id":"image-alt","impact":null,"tags":["cat.text-alternatives","wcag2a","wcag111","section508","section508.22.a","ACT","TTv5","TT7.a","TT7.b"],"description":"Ensures <img> elements have alternate text or a role of none or presentation","help":"Images must have alternate text","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/image-alt?application=axeAPI","nodes":[]},{"id":"image-redundant-alt","impact":null,"tags":["cat.text-alternatives","best-practice"],"description":"Ensure image alternative is not repeated as text","help":"Alternative text of images should not be repeated as text","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/image-redundant-alt?application=axeAPI","nodes":[]},{"id":"input-button-name","impact":null,"tags":["cat.name-role-value","wcag2a","wcag412","section508","section508.22.a","ACT","TTv5","TT5.c"],"description":"Ensures input buttons have discernible text","help":"Input buttons must have discernible text","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/input-button-name?application=axeAPI","nodes":[]},{"id":"input-image-alt","impact":null,"tags":["cat.text-alternatives","wcag2a","wcag111","wcag412","section508","section508.22.a","ACT","TTv5","TT7.a"],"description":"Ensures <input type=\"image\"> elements have alternate text","help":"Image buttons must have alternate text","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/input-image-alt?application=axeAPI","nodes":[]},{"id":"label-title-only","impact":null,"tags":["cat.forms","best-practice"],"description":"Ensures that every form element has a visible label and is not solely labeled using hidden labels, or the title or aria-describedby attributes","help":"Form elements should have a visible label","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/label-title-only?application=axeAPI","nodes":[]},{"id":"label","impact":null,"tags":["cat.forms","wcag2a","wcag412","section508","section508.22.n","ACT","TTv5","TT5.c"],"description":"Ensures every form element has a label","help":"Form elements must have labels","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/label?application=axeAPI","nodes":[]},{"id":"landmark-complementary-is-top-level","impact":null,"tags":["cat.semantics","best-practice"],"description":"Ensures the complementary landmark or aside is at top level","help":"Aside should not be contained in another landmark","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/landmark-complementary-is-top-level?application=axeAPI","nodes":[]},{"id":"landmark-main-is-top-level","impact":null,"tags":["cat.semantics","best-practice"],"description":"Ensures the main landmark is at top level","help":"Main landmark should not be contained in another landmark","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/landmark-main-is-top-level?application=axeAPI","nodes":[]},{"id":"landmark-no-duplicate-main","impact":null,"tags":["cat.semantics","best-practice"],"description":"Ensures the document has at most one main landmark","help":"Document should not have more than one main landmark","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/landmark-no-duplicate-main?application=axeAPI","nodes":[]},{"id":"link-in-text-block","impact":null,"tags":["cat.color","wcag2a","wcag141","TTv5","TT13.a"],"description":"Ensure links are distinguished from surrounding text in a way that does not rely on color","help":"Links must be distinguishable without relying on color","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/link-in-text-block?application=axeAPI","nodes":[]},{"id":"marquee","impact":null,"tags":["cat.parsing","wcag2a","wcag222","TTv5","TT2.b"],"description":"Ensures <marquee> elements are not used","help":"<marquee> elements are deprecated and must not be used","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/marquee?application=axeAPI","nodes":[]},{"id":"meta-refresh","impact":null,"tags":["cat.time-and-media","wcag2a","wcag221","TTv5","TT2.c"],"description":"Ensures <meta http-equiv=\"refresh\"> is not used for delayed refresh","help":"Delayed refresh under 20 hours must not be used","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/meta-refresh?application=axeAPI","nodes":[]},{"id":"object-alt","impact":null,"tags":["cat.text-alternatives","wcag2a","wcag111","section508","section508.22.a"],"description":"Ensures <object> elements have alternate text","help":"<object> elements must have alternate text","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/object-alt?application=axeAPI","nodes":[]},{"id":"presentation-role-conflict","impact":null,"tags":["cat.aria","best-practice","ACT"],"description":"Elements marked as presentational should not have global ARIA or tabindex to ensure all screen readers ignore them","help":"Ensure elements marked as presentational are consistently ignored","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/presentation-role-conflict?application=axeAPI","nodes":[]},{"id":"role-img-alt","impact":null,"tags":["cat.text-alternatives","wcag2a","wcag111","section508","section508.22.a","ACT","TTv5","TT7.a"],"description":"Ensures [role='img'] elements have alternate text","help":"[role='img'] elements must have an alternative text","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/role-img-alt?application=axeAPI","nodes":[]},{"id":"scope-attr-valid","impact":null,"tags":["cat.tables","best-practice"],"description":"Ensures the scope attribute is used correctly on tables","help":"scope attribute should be used correctly","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/scope-attr-valid?application=axeAPI","nodes":[]},{"id":"scrollable-region-focusable","impact":null,"tags":["cat.keyboard","wcag2a","wcag211"],"description":"Ensure elements that have scrollable content are accessible by keyboard","help":"Scrollable region must have keyboard access","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/scrollable-region-focusable?application=axeAPI","nodes":[]},{"id":"select-name","impact":null,"tags":["cat.forms","wcag2a","wcag412","section508","section508.22.n","ACT","TTv5","TT5.c"],"description":"Ensures select element has an accessible name","help":"Select element must have an accessible name","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/select-name?application=axeAPI","nodes":[]},{"id":"server-side-image-map","impact":null,"tags":["cat.text-alternatives","wcag2a","wcag211","section508","section508.22.f"],"description":"Ensures that server-side image maps are not used","help":"Server-side image maps must not be used","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/server-side-image-map?application=axeAPI","nodes":[]},{"id":"skip-link","impact":null,"tags":["cat.keyboard","best-practice"],"description":"Ensure all skip links have a focusable target","help":"The skip-link target should exist and be focusable","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/skip-link?application=axeAPI","nodes":[]},{"id":"svg-img-alt","impact":null,"tags":["cat.text-alternatives","wcag2a","wcag111","section508","section508.22.a","ACT","TTv5","TT7.a"],"description":"Ensures <svg> elements with an img, graphics-document or graphics-symbol role have an accessible text","help":"<svg> elements with an img role must have an alternative text","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/svg-img-alt?application=axeAPI","nodes":[]},{"id":"tabindex","impact":null,"tags":["cat.keyboard","best-practice"],"description":"Ensures tabindex attribute values are not greater than 0","help":"Elements should not have tabindex greater than zero","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/tabindex?application=axeAPI","nodes":[]},{"id":"table-duplicate-name","impact":null,"tags":["cat.tables","best-practice"],"description":"Ensure the <caption> element does not contain the same text as the summary attribute","help":"tables should not have the same summary and caption","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/table-duplicate-name?application=axeAPI","nodes":[]},{"id":"td-headers-attr","impact":null,"tags":["cat.tables","wcag2a","wcag131","section508","section508.22.g"],"description":"Ensure that each cell in a table that uses the headers attribute refers only to other cells in that table","help":"Table cells that use the headers attribute must only refer to cells in the same table","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/td-headers-attr?application=axeAPI","nodes":[]},{"id":"th-has-data-cells","impact":null,"tags":["cat.tables","wcag2a","wcag131","section508","section508.22.g","TTv5","14.b"],"description":"Ensure that <th> elements and elements with role=columnheader/rowheader have data cells they describe","help":"Table headers in a data table must refer to data cells","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/th-has-data-cells?application=axeAPI","nodes":[]},{"id":"valid-lang","impact":null,"tags":["cat.language","wcag2aa","wcag312","ACT","TTv5","TT11.b"],"description":"Ensures lang attributes have valid values","help":"lang attribute must have a valid value","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/valid-lang?application=axeAPI","nodes":[]},{"id":"video-caption","impact":null,"tags":["cat.text-alternatives","wcag2a","wcag122","section508","section508.22.a","TTv5","TT17.a"],"description":"Ensures <video> elements have captions","help":"<video> elements must have captions","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/video-caption?application=axeAPI","nodes":[]},{"id":"no-autoplay-audio","impact":null,"tags":["cat.time-and-media","wcag2a","wcag142","ACT","TTv5","TT2.a"],"description":"Ensures <video> or <audio> elements do not autoplay audio for more than 3 seconds without a control mechanism to stop or mute the audio","help":"<video> or <audio> elements must not play automatically","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/no-autoplay-audio?application=axeAPI","nodes":[]}],"passes":[{"id":"aria-hidden-body","impact":null,"tags":["cat.aria","wcag2a","wcag412"],"description":"Ensures aria-hidden='true' is not present on the document body.","help":"aria-hidden='true' must not be present on the document body","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/aria-hidden-body?application=axeAPI","nodes":[{"any":[{"id":"aria-hidden-body","data":null,"relatedNodes":[],"impact":"critical","message":"No aria-hidden attribute is present on document body"}],"all":[],"none":[],"impact":null,"html":"<body>","target":["body"]}]},{"id":"bypass","impact":null,"tags":["cat.keyboard","wcag2a","wcag241","section508","section508.22.o","TTv5","TT9.a"],"description":"Ensures each page has at least one mechanism for a user to bypass navigation and jump straight to the content","help":"Page must have means to bypass repeated blocks","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/bypass?application=axeAPI","nodes":[{"any":[{"id":"internal-link-present","data":null,"relatedNodes":[],"impact":"serious","message":"Valid skip link found"},{"id":"header-present","data":null,"relatedNodes":[{"html":"<h1>CURA Healthcare Service</h1>","target":["h1"]},{"html":"<h3>We Care About Your Health</h3>","target":["h3"]},{"html":"<h4><strong>CURA Healthcare Service</strong>\n                </h4>","target":["h4"]}],"impact":"serious","message":"Page has a heading"}],"all":[],"none":[],"impact":null,"html":"<html lang=\"en\">","target":["html"]}]},{"id":"color-contrast","impact":"serious","tags":["cat.color","wcag2aa","wcag143","ACT","TTv5","TT13.c"],"description":"Ensures the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds","help":"Elements must meet minimum color contrast ratio thresholds","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/color-contrast?application=axeAPI","nodes":[{"any":[{"id":"color-contrast","data":{"fgColor":"#ffffff","bgColor":"#666666","contrastRatio":5.74,"fontSize":"13.5pt (18px)","fontWeight":"normal","expectedContrastRatio":"4.5:1"},"relatedNodes":[],"impact":"serious","message":"Element has sufficient color contrast of 5.74"}],"all":[],"none":[],"impact":null,"html":"<a href=\"./\" onclick=\"$('#menu-close').click();\">CURA Healthcare</a>","target":[".sidebar-brand > a[href=\"./\"][onclick=\"$('#menu-close').click();\"]"]},{"any":[{"id":"color-contrast","data":{"fgColor":"#333333","bgColor":"#ffffff","contrastRatio":12.63,"fontSize":"13.5pt (18px)","fontWeight":"bold","expectedContrastRatio":"4.5:1"},"relatedNodes":[],"impact":"serious","message":"Element has sufficient color contrast of 12.63"}],"all":[],"none":[],"impact":null,"html":"<strong>CURA Healthcare Service</strong>","target":["strong"]},{"any":[{"id":"color-contrast","data":{"fgColor":"#333333","bgColor":"#ffffff","contrastRatio":12.63,"fontSize":"10.5pt (14px)","fontWeight":"normal","expectedContrastRatio":"4.5:1"},"relatedNodes":[],"impact":"serious","message":"Element has sufficient color contrast of 12.63"}],"all":[],"none":[],"impact":null,"html":"<p>Atlanta 550 Pharr Road NE Suite 525<br>Atlanta, GA 30305</p>","target":["p:nth-child(2)"]},{"any":[{"id":"color-contrast","data":{"fgColor":"#333333","bgColor":"#ffffff","contrastRatio":12.63,"fontSize":"10.5pt (14px)","fontWeight":"normal","expectedContrastRatio":"4.5:1"},"relatedNodes":[],"impact":"serious","message":"Element has sufficient color contrast of 12.63"}],"all":[],"none":[],"impact":null,"html":"<li><i class=\"fa fa-phone fa-fw\"></i> (678) 813-1KMS</li>","target":[".list-unstyled > li:nth-child(1)"]},{"any":[{"id":"color-contrast","data":{"fgColor":"#337ab7","bgColor":"#ffffff","contrastRatio":4.55,"fontSize":"10.5pt (14px)","fontWeight":"normal","expectedContrastRatio":"4.5:1"},"relatedNodes":[],"impact":"serious","message":"Element has sufficient color contrast of 4.55"}],"all":[],"none":[],"impact":null,"html":"<a href=\"mailto:info@katalon.com\">info@katalon.com</a>","target":["a[href$=\"mailto:info@katalon.com\"]"]}]},{"id":"document-title","impact":null,"tags":["cat.text-alternatives","wcag2a","wcag242","ACT","TTv5","TT12.a"],"description":"Ensures each HTML document contains a non-empty <title> element","help":"Documents must have <title> element to aid in navigation","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/document-title?application=axeAPI","nodes":[{"any":[{"id":"doc-has-title","data":null,"relatedNodes":[],"impact":"serious","message":"Document has a non-empty <title> element"}],"all":[],"none":[],"impact":null,"html":"<html lang=\"en\">","target":["html"]}]},{"id":"duplicate-id-active","impact":null,"tags":["cat.parsing","wcag2a","wcag411"],"description":"Ensures every id attribute value of active elements is unique","help":"IDs of active elements must be unique","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/duplicate-id-active?application=axeAPI","nodes":[{"any":[{"id":"duplicate-id-active","data":"menu-toggle","relatedNodes":[],"impact":"serious","message":"Document has no active elements that share the same id attribute"}],"all":[],"none":[],"impact":null,"html":"<a id=\"menu-toggle\" href=\"#\" class=\"btn btn-dark btn-lg toggle\"><i class=\"fa fa-bars\"></i></a>","target":["#menu-toggle"]},{"any":[{"id":"duplicate-id-active","data":"menu-close","relatedNodes":[],"impact":"serious","message":"Document has no active elements that share the same id attribute"}],"all":[],"none":[],"impact":null,"html":"<a id=\"menu-close\" href=\"#\" class=\"btn btn-light btn-lg pull-right toggle\"><i class=\"fa fa-times\"></i></a>","target":["#menu-close"]},{"any":[{"id":"duplicate-id-active","data":"btn-make-appointment","relatedNodes":[],"impact":"serious","message":"Document has no active elements that share the same id attribute"}],"all":[],"none":[],"impact":null,"html":"<a id=\"btn-make-appointment\" href=\"./profile.php#login\" class=\"btn btn-dark btn-lg\">Make Appointment</a>","target":["#btn-make-appointment"]}]},{"id":"duplicate-id","impact":null,"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.7/duplicate-id?application=axeAPI","nodes":[{"any":[{"id":"duplicate-id","data":"sidebar-wrapper","relatedNodes":[],"impact":"minor","message":"Document has no static elements that share the same id attribute"}],"all":[],"none":[],"impact":null,"html":"<nav id=\"sidebar-wrapper\">","target":["#sidebar-wrapper"]},{"any":[{"id":"duplicate-id","data":"top","relatedNodes":[],"impact":"minor","message":"Document has no static elements that share the same id attribute"}],"all":[],"none":[],"impact":null,"html":"<header id=\"top\" class=\"header\">","target":["#top"]},{"any":[{"id":"duplicate-id","data":"to-top","relatedNodes":[],"impact":"minor","message":"Document has no static elements that share the same id attribute"}],"all":[],"none":[],"impact":null,"html":"<a id=\"to-top\" href=\"#top\" class=\"btn btn-dark btn-lg\"><i class=\"fa fa-chevron-up fa-fw fa-1x\"></i></a>","target":["#to-top"]}]},{"id":"empty-heading","impact":null,"tags":["cat.name-role-value","best-practice"],"description":"Ensures headings have discernible text","help":"Headings should not be empty","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/empty-heading?application=axeAPI","nodes":[{"any":[{"id":"has-visible-text","data":null,"relatedNodes":[],"impact":"minor","message":"Element has text that is visible to screen readers"}],"all":[],"none":[],"impact":null,"html":"<h1>CURA Healthcare Service</h1>","target":["h1"]},{"any":[{"id":"has-visible-text","data":null,"relatedNodes":[],"impact":"minor","message":"Element has text that is visible to screen readers"}],"all":[],"none":[],"impact":null,"html":"<h3>We Care About Your Health</h3>","target":["h3"]},{"any":[{"id":"has-visible-text","data":null,"relatedNodes":[],"impact":"minor","message":"Element has text that is visible to screen readers"}],"all":[],"none":[],"impact":null,"html":"<h4><strong>CURA Healthcare Service</strong>\n                </h4>","target":["h4"]}]},{"id":"heading-order","impact":"moderate","tags":["cat.semantics","best-practice"],"description":"Ensures the order of headings is semantically correct","help":"Heading levels should only increase by one","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/heading-order?application=axeAPI","nodes":[{"any":[{"id":"heading-order","data":{"headingOrder":[{"ancestry":["html > body > header:nth-child(3) > div > h1:nth-child(1)"],"level":1},{"ancestry":["html > body > header:nth-child(3) > div > h3:nth-child(2)"],"level":3},{"ancestry":["html > body > footer:nth-child(4) > div:nth-child(1) > div > div > h4:nth-child(1)"],"level":4}]},"relatedNodes":[],"impact":"moderate","message":"Heading order valid"}],"all":[],"none":[],"impact":null,"html":"<h1>CURA Healthcare Service</h1>","target":["h1"]},{"any":[{"id":"heading-order","data":null,"relatedNodes":[],"impact":"moderate","message":"Heading order valid"}],"all":[],"none":[],"impact":null,"html":"<h4><strong>CURA Healthcare Service</strong>\n                </h4>","target":["h4"]}]},{"id":"html-has-lang","impact":null,"tags":["cat.language","wcag2a","wcag311","ACT","TTv5","TT11.a"],"description":"Ensures every HTML document has a lang attribute","help":"<html> element must have a lang attribute","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/html-has-lang?application=axeAPI","nodes":[{"any":[{"id":"has-lang","data":null,"relatedNodes":[],"impact":"serious","message":"The <html> element has a lang attribute"}],"all":[],"none":[],"impact":null,"html":"<html lang=\"en\">","target":["html"]}]},{"id":"html-lang-valid","impact":null,"tags":["cat.language","wcag2a","wcag311","ACT","TTv5","TT11.a"],"description":"Ensures the lang attribute of the <html> element has a valid value","help":"<html> element must have a valid value for the lang attribute","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/html-lang-valid?application=axeAPI","nodes":[{"any":[],"all":[],"none":[{"id":"valid-lang","data":null,"relatedNodes":[],"impact":"serious","message":"Value of lang attribute is included in the list of valid languages"}],"impact":null,"html":"<html lang=\"en\">","target":["html"]}]},{"id":"landmark-banner-is-top-level","impact":null,"tags":["cat.semantics","best-practice"],"description":"Ensures the banner landmark is at top level","help":"Banner landmark should not be contained in another landmark","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/landmark-banner-is-top-level?application=axeAPI","nodes":[{"any":[{"id":"landmark-is-top-level","data":{"role":"banner"},"relatedNodes":[],"impact":"moderate","message":"The banner landmark is at the top level."}],"all":[],"none":[],"impact":null,"html":"<header id=\"top\" class=\"header\">","target":["#top"]}]},{"id":"landmark-contentinfo-is-top-level","impact":null,"tags":["cat.semantics","best-practice"],"description":"Ensures the contentinfo landmark is at top level","help":"Contentinfo landmark should not be contained in another landmark","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/landmark-contentinfo-is-top-level?application=axeAPI","nodes":[{"any":[{"id":"landmark-is-top-level","data":{"role":"contentinfo"},"relatedNodes":[],"impact":"moderate","message":"The contentinfo landmark is at the top level."}],"all":[],"none":[],"impact":null,"html":"<footer>","target":["footer"]}]},{"id":"landmark-no-duplicate-banner","impact":null,"tags":["cat.semantics","best-practice"],"description":"Ensures the document has at most one banner landmark","help":"Document should not have more than one banner landmark","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/landmark-no-duplicate-banner?application=axeAPI","nodes":[{"any":[{"id":"page-no-duplicate-banner","data":null,"relatedNodes":[],"impact":"moderate","message":"Document does not have more than one banner landmark"}],"all":[],"none":[],"impact":null,"html":"<header id=\"top\" class=\"header\">","target":["#top"]}]},{"id":"landmark-no-duplicate-contentinfo","impact":null,"tags":["cat.semantics","best-practice"],"description":"Ensures the document has at most one contentinfo landmark","help":"Document should not have more than one contentinfo landmark","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/landmark-no-duplicate-contentinfo?application=axeAPI","nodes":[{"any":[{"id":"page-no-duplicate-contentinfo","data":null,"relatedNodes":[],"impact":"moderate","message":"Document does not have more than one contentinfo landmark"}],"all":[],"none":[],"impact":null,"html":"<footer>","target":["footer"]}]},{"id":"landmark-unique","impact":null,"tags":["cat.semantics","best-practice"],"help":"Ensures landmarks are unique","description":"Landmarks should have a unique role or role/label/title (i.e. accessible name) combination","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/landmark-unique?application=axeAPI","nodes":[{"any":[{"id":"landmark-is-unique","data":{"role":"navigation","accessibleText":null},"relatedNodes":[],"impact":"moderate","message":"Landmarks must have a unique role or role/label/title (i.e. accessible name) combination"}],"all":[],"none":[],"impact":null,"html":"<nav id=\"sidebar-wrapper\">","target":["#sidebar-wrapper"]},{"any":[{"id":"landmark-is-unique","data":{"role":"banner","accessibleText":null},"relatedNodes":[],"impact":"moderate","message":"Landmarks must have a unique role or role/label/title (i.e. accessible name) combination"}],"all":[],"none":[],"impact":null,"html":"<header id=\"top\" class=\"header\">","target":["#top"]},{"any":[{"id":"landmark-is-unique","data":{"role":"contentinfo","accessibleText":null},"relatedNodes":[],"impact":"moderate","message":"Landmarks must have a unique role or role/label/title (i.e. accessible name) combination"}],"all":[],"none":[],"impact":null,"html":"<footer>","target":["footer"]}]},{"id":"link-name","impact":"serious","tags":["cat.name-role-value","wcag2a","wcag412","wcag244","section508","section508.22.a","ACT","TTv5","TT6.a"],"description":"Ensures links have discernible text","help":"Links must have discernible text","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/link-name?application=axeAPI","nodes":[{"any":[{"id":"has-visible-text","data":null,"relatedNodes":[],"impact":"minor","message":"Element has text that is visible to screen readers"}],"all":[],"none":[{"id":"focusable-no-name","data":null,"relatedNodes":[],"impact":"serious","message":"Element is not in tab order or has accessible text"}],"impact":null,"html":"<a href=\"./\" onclick=\"$('#menu-close').click();\">CURA Healthcare</a>","target":[".sidebar-brand > a[href=\"./\"][onclick=\"$('#menu-close').click();\"]"]},{"any":[{"id":"has-visible-text","data":null,"relatedNodes":[],"impact":"minor","message":"Element has text that is visible to screen readers"}],"all":[],"none":[{"id":"focusable-no-name","data":null,"relatedNodes":[],"impact":"serious","message":"Element is not in tab order or has accessible text"}],"impact":null,"html":"<a href=\"./\" onclick=\"$('#menu-close').click();\">Home</a>","target":["li:nth-child(3) > a[href=\"./\"][onclick=\"$('#menu-close').click();\"]"]},{"any":[{"id":"has-visible-text","data":null,"relatedNodes":[],"impact":"minor","message":"Element has text that is visible to screen readers"}],"all":[],"none":[{"id":"focusable-no-name","data":null,"relatedNodes":[],"impact":"serious","message":"Element is not in tab order or has accessible text"}],"impact":null,"html":"<a href=\"profile.php#login\" onclick=\"$('#menu-close').click();\">Login</a>","target":["a[href$=\"profile.php#login\"][onclick=\"$('#menu-close').click();\"]"]},{"any":[{"id":"has-visible-text","data":null,"relatedNodes":[],"impact":"minor","message":"Element has text that is visible to screen readers"}],"all":[],"none":[{"id":"focusable-no-name","data":null,"relatedNodes":[],"impact":"serious","message":"Element is not in tab order or has accessible text"}],"impact":null,"html":"<a id=\"btn-make-appointment\" href=\"./profile.php#login\" class=\"btn btn-dark btn-lg\">Make Appointment</a>","target":["#btn-make-appointment"]},{"any":[{"id":"has-visible-text","data":null,"relatedNodes":[],"impact":"minor","message":"Element has text that is visible to screen readers"}],"all":[],"none":[{"id":"focusable-no-name","data":null,"relatedNodes":[],"impact":"serious","message":"Element is not in tab order or has accessible text"}],"impact":null,"html":"<a href=\"mailto:info@katalon.com\">info@katalon.com</a>","target":["a[href$=\"mailto:info@katalon.com\"]"]}]},{"id":"list","impact":"serious","tags":["cat.structure","wcag2a","wcag131"],"description":"Ensures that lists are structured correctly","help":"<ul> and <ol> must only directly contain <li>, <script> or <template> elements","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/list?application=axeAPI","nodes":[{"any":[],"all":[],"none":[{"id":"only-listitems","data":null,"relatedNodes":[],"impact":"serious","message":"List element only has direct children that are allowed inside <li> elements"}],"impact":null,"html":"<ul class=\"list-unstyled\">\n                    <li><i class=\"fa fa-phone fa-fw\"></i> (678) 813-1KMS</li>\n                    <li><i class=\"fa fa-envelope-o fa-fw\"></i> <a href=\"mailto:info@katalon.com\">info@katalon.com</a>\n                    </li>\n                </ul>","target":[".list-unstyled"]},{"any":[],"all":[],"none":[{"id":"only-listitems","data":null,"relatedNodes":[],"impact":"serious","message":"List element only has direct children that are allowed inside <li> elements"}],"impact":null,"html":"<ul class=\"list-inline\">","target":[".list-inline"]}]},{"id":"listitem","impact":null,"tags":["cat.structure","wcag2a","wcag131"],"description":"Ensures <li> elements are used semantically","help":"<li> elements must be contained in a <ul> or <ol>","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/listitem?application=axeAPI","nodes":[{"any":[{"id":"listitem","data":null,"relatedNodes":[],"impact":"serious","message":"List item has a <ul>, <ol> or role=\"list\" parent element"}],"all":[],"none":[],"impact":null,"html":"<li class=\"sidebar-brand\">\n            <a href=\"./\" onclick=\"$('#menu-close').click();\">CURA Healthcare</a>\n        </li>","target":[".sidebar-brand"]},{"any":[{"id":"listitem","data":null,"relatedNodes":[],"impact":"serious","message":"List item has a <ul>, <ol> or role=\"list\" parent element"}],"all":[],"none":[],"impact":null,"html":"<li>\n            <a href=\"./\" onclick=\"$('#menu-close').click();\">Home</a>\n        </li>","target":[".sidebar-nav > li:nth-child(3)"]},{"any":[{"id":"listitem","data":null,"relatedNodes":[],"impact":"serious","message":"List item has a <ul>, <ol> or role=\"list\" parent element"}],"all":[],"none":[],"impact":null,"html":"<li>\n            <a href=\"profile.php#login\" onclick=\"$('#menu-close').click();\">Login</a>\n        </li>","target":["li:nth-child(4)"]},{"any":[{"id":"listitem","data":null,"relatedNodes":[],"impact":"serious","message":"List item has a <ul>, <ol> or role=\"list\" parent element"}],"all":[],"none":[],"impact":null,"html":"<li><i class=\"fa fa-phone fa-fw\"></i> (678) 813-1KMS</li>","target":[".list-unstyled > li:nth-child(1)"]},{"any":[{"id":"listitem","data":null,"relatedNodes":[],"impact":"serious","message":"List item has a <ul>, <ol> or role=\"list\" parent element"}],"all":[],"none":[],"impact":null,"html":"<li><i class=\"fa fa-envelope-o fa-fw\"></i> <a href=\"mailto:info@katalon.com\">info@katalon.com</a>\n                    </li>","target":[".list-unstyled > li:nth-child(2)"]},{"any":[{"id":"listitem","data":null,"relatedNodes":[],"impact":"serious","message":"List item has a <ul>, <ol> or role=\"list\" parent element"}],"all":[],"none":[],"impact":null,"html":"<li>\n                        <a href=\"#\"><i class=\"fa fa-facebook fa-fw fa-3x\"></i></a>\n                    </li>","target":[".list-inline > li:nth-child(1)"]},{"any":[{"id":"listitem","data":null,"relatedNodes":[],"impact":"serious","message":"List item has a <ul>, <ol> or role=\"list\" parent element"}],"all":[],"none":[],"impact":null,"html":"<li>\n                        <a href=\"#\"><i class=\"fa fa-twitter fa-fw fa-3x\"></i></a>\n                    </li>","target":[".list-inline > li:nth-child(2)"]},{"any":[{"id":"listitem","data":null,"relatedNodes":[],"impact":"serious","message":"List item has a <ul>, <ol> or role=\"list\" parent element"}],"all":[],"none":[],"impact":null,"html":"<li>\n                        <a href=\"#\"><i class=\"fa fa-dribbble fa-fw fa-3x\"></i></a>\n                    </li>","target":[".list-inline > li:nth-child(3)"]}]},{"id":"meta-viewport-large","impact":null,"tags":["cat.sensory-and-visual-cues","best-practice"],"description":"Ensures <meta name=\"viewport\"> can scale a significant amount","help":"Users should be able to zoom and scale the text up to 500%","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/meta-viewport-large?application=axeAPI","nodes":[{"any":[{"id":"meta-viewport-large","data":null,"relatedNodes":[],"impact":"minor","message":"<meta> tag does not prevent significant zooming on mobile devices"}],"all":[],"none":[],"impact":null,"html":"<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">","target":["meta[name=\"viewport\"]"]}]},{"id":"meta-viewport","impact":null,"tags":["cat.sensory-and-visual-cues","wcag2aa","wcag144","ACT"],"description":"Ensures <meta name=\"viewport\"> does not disable text scaling and zooming","help":"Zooming and scaling must not be disabled","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/meta-viewport?application=axeAPI","nodes":[{"any":[{"id":"meta-viewport","data":null,"relatedNodes":[],"impact":"critical","message":"<meta> tag does not disable zooming on mobile devices"}],"all":[],"none":[],"impact":null,"html":"<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">","target":["meta[name=\"viewport\"]"]}]},{"id":"nested-interactive","impact":null,"tags":["cat.keyboard","wcag2a","wcag412","TTv5","TT4.a"],"description":"Ensures interactive controls are not nested as they are not always announced by screen readers or can cause focus problems for assistive technologies","help":"Interactive controls must not be nested","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/nested-interactive?application=axeAPI","nodes":[{"any":[{"id":"no-focusable-content","data":null,"relatedNodes":[],"impact":"serious","message":"Element does not have focusable descendants"}],"all":[],"none":[],"impact":null,"html":"<hr class=\"small\">","target":["hr"]}]},{"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 should contain a level-one heading","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/page-has-heading-one?application=axeAPI","nodes":[{"any":[],"all":[{"id":"page-has-heading-one","data":null,"relatedNodes":[{"html":"<h1>CURA Healthcare Service</h1>","target":["h1"]}],"impact":"moderate","message":"Page has at least one level-one heading"}],"none":[],"impact":null,"html":"<html lang=\"en\">","target":["html"]}]},{"id":"region","impact":null,"tags":["cat.keyboard","best-practice"],"description":"Ensures all page content is contained by landmarks","help":"All page content should be contained by landmarks","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/region?application=axeAPI","nodes":[{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<a id=\"menu-toggle\" href=\"#\" class=\"btn btn-dark btn-lg toggle\"><i class=\"fa fa-bars\"></i></a>","target":["#menu-toggle"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<i class=\"fa fa-bars\"></i>","target":[".fa-bars"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<nav id=\"sidebar-wrapper\">","target":["#sidebar-wrapper"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<ul class=\"sidebar-nav\">","target":[".sidebar-nav"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<a id=\"menu-close\" href=\"#\" class=\"btn btn-light btn-lg pull-right toggle\"><i class=\"fa fa-times\"></i></a>","target":["#menu-close"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<i class=\"fa fa-times\"></i>","target":[".fa-times"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<li class=\"sidebar-brand\">\n            <a href=\"./\" onclick=\"$('#menu-close').click();\">CURA Healthcare</a>\n        </li>","target":[".sidebar-brand"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<a href=\"./\" onclick=\"$('#menu-close').click();\">CURA Healthcare</a>","target":[".sidebar-brand > a[href=\"./\"][onclick=\"$('#menu-close').click();\"]"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<li>\n            <a href=\"./\" onclick=\"$('#menu-close').click();\">Home</a>\n        </li>","target":[".sidebar-nav > li:nth-child(3)"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<a href=\"./\" onclick=\"$('#menu-close').click();\">Home</a>","target":["li:nth-child(3) > a[href=\"./\"][onclick=\"$('#menu-close').click();\"]"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<li>\n            <a href=\"profile.php#login\" onclick=\"$('#menu-close').click();\">Login</a>\n        </li>","target":["li:nth-child(4)"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<a href=\"profile.php#login\" onclick=\"$('#menu-close').click();\">Login</a>","target":["a[href$=\"profile.php#login\"][onclick=\"$('#menu-close').click();\"]"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<header id=\"top\" class=\"header\">","target":["#top"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<div class=\"text-vertical-center\">\n        <h1>CURA Healthcare Service</h1>\n        <h3>We Care About Your Health</h3>\n        <br>\n        <a id=\"btn-make-appointment\" href=\"./profile.php#login\" class=\"btn btn-dark btn-lg\">Make Appointment</a>\n    </div>","target":[".text-vertical-center"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<h1>CURA Healthcare Service</h1>","target":["h1"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<h3>We Care About Your Health</h3>","target":["h3"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<br>","target":[".text-vertical-center > br"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<a id=\"btn-make-appointment\" href=\"./profile.php#login\" class=\"btn btn-dark btn-lg\">Make Appointment</a>","target":["#btn-make-appointment"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<footer>","target":["footer"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<div class=\"container\">","target":[".container"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<div class=\"row\">","target":[".row"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<div class=\"col-lg-10 col-lg-offset-1 text-center\">","target":[".col-lg-10"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<h4><strong>CURA Healthcare Service</strong>\n                </h4>","target":["h4"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<strong>CURA Healthcare Service</strong>","target":["strong"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<p>Atlanta 550 Pharr Road NE Suite 525<br>Atlanta, GA 30305</p>","target":["p:nth-child(2)"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<br>","target":["p:nth-child(2) > br"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<ul class=\"list-unstyled\">\n                    <li><i class=\"fa fa-phone fa-fw\"></i> (678) 813-1KMS</li>\n                    <li><i class=\"fa fa-envelope-o fa-fw\"></i> <a href=\"mailto:info@katalon.com\">info@katalon.com</a>\n                    </li>\n                </ul>","target":[".list-unstyled"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<li><i class=\"fa fa-phone fa-fw\"></i> (678) 813-1KMS</li>","target":[".list-unstyled > li:nth-child(1)"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<i class=\"fa fa-phone fa-fw\"></i>","target":[".fa-phone"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<li><i class=\"fa fa-envelope-o fa-fw\"></i> <a href=\"mailto:info@katalon.com\">info@katalon.com</a>\n                    </li>","target":[".list-unstyled > li:nth-child(2)"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<i class=\"fa fa-envelope-o fa-fw\"></i>","target":[".fa-envelope-o"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<a href=\"mailto:info@katalon.com\">info@katalon.com</a>","target":["a[href$=\"mailto:info@katalon.com\"]"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<br>","target":[".col-lg-10 > br"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<ul class=\"list-inline\">","target":[".list-inline"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<li>\n                        <a href=\"#\"><i class=\"fa fa-facebook fa-fw fa-3x\"></i></a>\n                    </li>","target":[".list-inline > li:nth-child(1)"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<a href=\"#\"><i class=\"fa fa-facebook fa-fw fa-3x\"></i></a>","target":["li:nth-child(1) > a[href=\"#\"]"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<i class=\"fa fa-facebook fa-fw fa-3x\"></i>","target":[".fa-facebook"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<li>\n                        <a href=\"#\"><i class=\"fa fa-twitter fa-fw fa-3x\"></i></a>\n                    </li>","target":[".list-inline > li:nth-child(2)"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<a href=\"#\"><i class=\"fa fa-twitter fa-fw fa-3x\"></i></a>","target":["li:nth-child(2) > a[href=\"#\"]"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<i class=\"fa fa-twitter fa-fw fa-3x\"></i>","target":[".fa-twitter"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<li>\n                        <a href=\"#\"><i class=\"fa fa-dribbble fa-fw fa-3x\"></i></a>\n                    </li>","target":[".list-inline > li:nth-child(3)"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<a href=\"#\"><i class=\"fa fa-dribbble fa-fw fa-3x\"></i></a>","target":["li:nth-child(3) > a[href=\"#\"]"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<i class=\"fa fa-dribbble fa-fw fa-3x\"></i>","target":[".fa-dribbble"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<hr class=\"small\">","target":["hr"]},{"any":[{"id":"region","data":{"isIframe":false},"relatedNodes":[],"impact":"moderate","message":"All page content is contained by landmarks"}],"all":[],"none":[],"impact":null,"html":"<p class=\"text-muted\">Copyright © CURA Healthcare Service 2025</p>","target":[".text-muted"]}]}],"incomplete":[{"id":"color-contrast","impact":"serious","tags":["cat.color","wcag2aa","wcag143","ACT","TTv5","TT13.c"],"description":"Ensures the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds","help":"Elements must meet minimum color contrast ratio thresholds","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/color-contrast?application=axeAPI","nodes":[{"any":[{"id":"color-contrast","data":{"contrastRatio":0,"fontSize":"47.3pt (63px)","fontWeight":"normal","messageKey":"bgImage","expectedContrastRatio":"3:1"},"relatedNodes":[{"html":"<header id=\"top\" class=\"header\">","target":["#top"]}],"impact":"serious","message":"Element's background color could not be determined due to a background image"}],"all":[],"none":[],"impact":"serious","html":"<h1>CURA Healthcare Service</h1>","target":["h1"],"failureSummary":"Fix any of the following:\n  Element's background color could not be determined due to a background image"},{"any":[{"id":"color-contrast","data":{"contrastRatio":0,"fontSize":"18.0pt (24px)","fontWeight":"normal","messageKey":"bgImage","expectedContrastRatio":"3:1"},"relatedNodes":[{"html":"<header id=\"top\" class=\"header\">","target":["#top"]}],"impact":"serious","message":"Element's background color could not be determined due to a background image"}],"all":[],"none":[],"impact":"serious","html":"<h3>We Care About Your Health</h3>","target":["h3"],"failureSummary":"Fix any of the following:\n  Element's background color could not be determined due to a background image"},{"any":[{"id":"color-contrast","data":{"contrastRatio":0,"fontSize":"13.5pt (18px)","fontWeight":"normal","messageKey":"bgImage","expectedContrastRatio":"4.5:1"},"relatedNodes":[{"html":"<a id=\"btn-make-appointment\" href=\"./profile.php#login\" class=\"btn btn-dark btn-lg\">Make Appointment</a>","target":["#btn-make-appointment"]},{"html":"<header id=\"top\" class=\"header\">","target":["#top"]}],"impact":"serious","message":"Element's background color could not be determined due to a background image"}],"all":[],"none":[],"impact":"serious","html":"<a id=\"btn-make-appointment\" href=\"./profile.php#login\" class=\"btn btn-dark btn-lg\">Make Appointment</a>","target":["#btn-make-appointment"],"failureSummary":"Fix any of the following:\n  Element's background color could not be determined due to a background image"}]}],"violations":[{"id":"color-contrast","impact":"serious","tags":["cat.color","wcag2aa","wcag143","ACT","TTv5","TT13.c"],"description":"Ensures the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds","help":"Elements must meet minimum color contrast ratio thresholds","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/color-contrast?application=axeAPI","nodes":[{"any":[{"id":"color-contrast","data":{"fgColor":"#cccccc","bgColor":"#666666","contrastRatio":3.57,"fontSize":"10.5pt (14px)","fontWeight":"normal","messageKey":null,"expectedContrastRatio":"4.5:1"},"relatedNodes":[{"html":"<nav id=\"sidebar-wrapper\">","target":["#sidebar-wrapper"]}],"impact":"serious","message":"Element has insufficient color contrast of 3.57 (foreground color: #cccccc, background color: #666666, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1"}],"all":[],"none":[],"impact":"serious","html":"<a href=\"./\" onclick=\"$('#menu-close').click();\">Home</a>","target":["li:nth-child(3) > a[href=\"./\"][onclick=\"$('#menu-close').click();\"]"],"failureSummary":"Fix any of the following:\n  Element has insufficient color contrast of 3.57 (foreground color: #cccccc, background color: #666666, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1"},{"any":[{"id":"color-contrast","data":{"fgColor":"#cccccc","bgColor":"#666666","contrastRatio":3.57,"fontSize":"10.5pt (14px)","fontWeight":"normal","messageKey":null,"expectedContrastRatio":"4.5:1"},"relatedNodes":[{"html":"<nav id=\"sidebar-wrapper\">","target":["#sidebar-wrapper"]}],"impact":"serious","message":"Element has insufficient color contrast of 3.57 (foreground color: #cccccc, background color: #666666, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1"}],"all":[],"none":[],"impact":"serious","html":"<a href=\"profile.php#login\" onclick=\"$('#menu-close').click();\">Login</a>","target":["a[href$=\"profile.php#login\"][onclick=\"$('#menu-close').click();\"]"],"failureSummary":"Fix any of the following:\n  Element has insufficient color contrast of 3.57 (foreground color: #cccccc, background color: #666666, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1"},{"any":[{"id":"color-contrast","data":{"fgColor":"#777777","bgColor":"#ffffff","contrastRatio":4.47,"fontSize":"10.5pt (14px)","fontWeight":"normal","messageKey":null,"expectedContrastRatio":"4.5:1"},"relatedNodes":[],"impact":"serious","message":"Element has insufficient color contrast of 4.47 (foreground color: #777777, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1"}],"all":[],"none":[],"impact":"serious","html":"<p class=\"text-muted\">Copyright © CURA Healthcare Service 2025</p>","target":[".text-muted"],"failureSummary":"Fix any of the following:\n  Element has insufficient color contrast of 4.47 (foreground color: #777777, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1"}]},{"id":"heading-order","impact":"moderate","tags":["cat.semantics","best-practice"],"description":"Ensures the order of headings is semantically correct","help":"Heading levels should only increase by one","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/heading-order?application=axeAPI","nodes":[{"any":[{"id":"heading-order","data":null,"relatedNodes":[],"impact":"moderate","message":"Heading order invalid"}],"all":[],"none":[],"impact":"moderate","html":"<h3>We Care About Your Health</h3>","target":["h3"],"failureSummary":"Fix any of the following:\n  Heading order invalid"}]},{"id":"landmark-one-main","impact":"moderate","tags":["cat.semantics","best-practice"],"description":"Ensures the document has a main landmark","help":"Document should have one main landmark","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/landmark-one-main?application=axeAPI","nodes":[{"any":[],"all":[{"id":"page-has-main","data":null,"relatedNodes":[],"impact":"moderate","message":"Document does not have a main landmark"}],"none":[],"impact":"moderate","html":"<html lang=\"en\">","target":["html"],"failureSummary":"Fix all of the following:\n  Document does not have a main landmark"}]},{"id":"link-name","impact":"serious","tags":["cat.name-role-value","wcag2a","wcag412","wcag244","section508","section508.22.a","ACT","TTv5","TT6.a"],"description":"Ensures links have discernible text","help":"Links must have discernible text","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/link-name?application=axeAPI","nodes":[{"any":[{"id":"has-visible-text","data":null,"relatedNodes":[],"impact":"minor","message":"Element does not have text that is visible to screen readers"},{"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":"non-empty-title","data":{"messageKey":"noAttr"},"relatedNodes":[],"impact":"serious","message":"Element has no title attribute"}],"all":[],"none":[{"id":"focusable-no-name","data":null,"relatedNodes":[],"impact":"serious","message":"Element is in tab order and does not have accessible text"}],"impact":"serious","html":"<a id=\"menu-toggle\" href=\"#\" class=\"btn btn-dark btn-lg toggle\"><i class=\"fa fa-bars\"></i></a>","target":["#menu-toggle"],"failureSummary":"Fix all of the following:\n  Element is in tab order and does not have accessible text\n\nFix any of the following:\n  Element does not have text that is visible to screen readers\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute"},{"any":[{"id":"has-visible-text","data":null,"relatedNodes":[],"impact":"minor","message":"Element does not have text that is visible to screen readers"},{"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":"non-empty-title","data":{"messageKey":"noAttr"},"relatedNodes":[],"impact":"serious","message":"Element has no title attribute"}],"all":[],"none":[{"id":"focusable-no-name","data":null,"relatedNodes":[],"impact":"serious","message":"Element is in tab order and does not have accessible text"}],"impact":"serious","html":"<a id=\"menu-close\" href=\"#\" class=\"btn btn-light btn-lg pull-right toggle\"><i class=\"fa fa-times\"></i></a>","target":["#menu-close"],"failureSummary":"Fix all of the following:\n  Element is in tab order and does not have accessible text\n\nFix any of the following:\n  Element does not have text that is visible to screen readers\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute"},{"any":[{"id":"has-visible-text","data":null,"relatedNodes":[],"impact":"minor","message":"Element does not have text that is visible to screen readers"},{"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":"non-empty-title","data":{"messageKey":"noAttr"},"relatedNodes":[],"impact":"serious","message":"Element has no title attribute"}],"all":[],"none":[{"id":"focusable-no-name","data":null,"relatedNodes":[],"impact":"serious","message":"Element is in tab order and does not have accessible text"}],"impact":"serious","html":"<a href=\"#\"><i class=\"fa fa-facebook fa-fw fa-3x\"></i></a>","target":["li:nth-child(1) > a[href=\"#\"]"],"failureSummary":"Fix all of the following:\n  Element is in tab order and does not have accessible text\n\nFix any of the following:\n  Element does not have text that is visible to screen readers\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute"},{"any":[{"id":"has-visible-text","data":null,"relatedNodes":[],"impact":"minor","message":"Element does not have text that is visible to screen readers"},{"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":"non-empty-title","data":{"messageKey":"noAttr"},"relatedNodes":[],"impact":"serious","message":"Element has no title attribute"}],"all":[],"none":[{"id":"focusable-no-name","data":null,"relatedNodes":[],"impact":"serious","message":"Element is in tab order and does not have accessible text"}],"impact":"serious","html":"<a href=\"#\"><i class=\"fa fa-twitter fa-fw fa-3x\"></i></a>","target":["li:nth-child(2) > a[href=\"#\"]"],"failureSummary":"Fix all of the following:\n  Element is in tab order and does not have accessible text\n\nFix any of the following:\n  Element does not have text that is visible to screen readers\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute"},{"any":[{"id":"has-visible-text","data":null,"relatedNodes":[],"impact":"minor","message":"Element does not have text that is visible to screen readers"},{"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":"non-empty-title","data":{"messageKey":"noAttr"},"relatedNodes":[],"impact":"serious","message":"Element has no title attribute"}],"all":[],"none":[{"id":"focusable-no-name","data":null,"relatedNodes":[],"impact":"serious","message":"Element is in tab order and does not have accessible text"}],"impact":"serious","html":"<a href=\"#\"><i class=\"fa fa-dribbble fa-fw fa-3x\"></i></a>","target":["li:nth-child(3) > a[href=\"#\"]"],"failureSummary":"Fix all of the following:\n  Element is in tab order and does not have accessible text\n\nFix any of the following:\n  Element does not have text that is visible to screen readers\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute"}]},{"id":"list","impact":"serious","tags":["cat.structure","wcag2a","wcag131"],"description":"Ensures that lists are structured correctly","help":"<ul> and <ol> must only directly contain <li>, <script> or <template> elements","helpUrl":"https://dequeuniversity.com/rules/axe/4.7/list?application=axeAPI","nodes":[{"any":[],"all":[],"none":[{"id":"only-listitems","data":{"values":"a"},"relatedNodes":[{"html":"<a id=\"menu-close\" href=\"#\" class=\"btn btn-light btn-lg pull-right toggle\"><i class=\"fa fa-times\"></i></a>","target":["#menu-close"]}],"impact":"serious","message":"List element has direct children that are not allowed: a"}],"impact":"serious","html":"<ul class=\"sidebar-nav\">","target":[".sidebar-nav"],"failureSummary":"Fix all of the following:\n  List element has direct children that are not allowed: a"}]}]}
2025-12-21 11:23:06.799 DEBUG testcase.Axe_by_yann.sautreuil           - 7: parsed = JsonSlurper().parseText(resultsJson)
2025-12-21 11:23:06.866 DEBUG testcase.Axe_by_yann.sautreuil           - 8: if (violations)
2025-12-21 11:23:06.911 DEBUG testcase.Axe_by_yann.sautreuil           - 1: println(Violations count: $parsed.violations.size())
Violations count: 5
2025-12-21 11:23:06.989 DEBUG testcase.Axe_by_yann.sautreuil           - 2: violations.each({ java.lang.Object v -> ... })
- color-contrast: Ensures the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds (impact: serious)
- heading-order: Ensures the order of headings is semantically correct (impact: moderate)
- landmark-one-main: Ensures the document has a main landmark (impact: moderate)
- link-name: Ensures links have discernible text (impact: serious)
- list: Ensures that lists are structured correctly (impact: serious)
2025-12-21 11:23:07.005 DEBUG testcase.Axe_by_yann.sautreuil           - 10: closeBrowser()
2025-12-21 11:23:07.174 INFO  c.k.katalon.core.main.TestCaseExecutor   - END Test Cases/Axe_by_yann.sautreuil

It worked.

1 Like

I ran the above code several times. Occasionally I got errors. I wanted to make the script more stable. So I tried modifying the script. But I couldn’t manage it. It was too difficult for me to debug a JavaScript fragment via the Selenium’s executeJavascript() which provides very little help for debugging. Eventually I abandoned my attempt.

1 Like

Accessibility Testing with @axe-core/playwright

I made a GitHub project and published it:

In there I explained how I made a Node.js project which employs the @axe-core/playwright. The project demonstrates how to perform an Accessibility testing over the URL https://katalon-demo-cura.herokuapp.com/ using Axe-core and Playwright. It was easy for me to create this demo. I found myself standing on the shoulders of giants.

1 Like