{"id":14978918,"url":"https://github.com/sridharbandi/java-a11y","last_synced_at":"2025-10-28T14:30:40.238Z","repository":{"id":45623806,"uuid":"160586868","full_name":"sridharbandi/Java-a11y","owner":"sridharbandi","description":"Accessibility Automated Testing with Java Selenium ","archived":false,"fork":false,"pushed_at":"2024-10-10T11:38:26.000Z","size":1513,"stargazers_count":13,"open_issues_count":4,"forks_count":12,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-02-01T15:11:29.013Z","etag":null,"topics":["a11y","a11y-testing","accessibility","accessibility-automation","axe","deque","htmlcodesniffer","pa11y","selenium","selenium-java","selenium-webdriver"],"latest_commit_sha":null,"homepage":"https://sridharbandi.github.io/Java-a11y/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sridharbandi.png","metadata":{"files":{"readme":"ReadMe.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-12-05T22:31:30.000Z","updated_at":"2024-10-10T11:38:30.000Z","dependencies_parsed_at":"2024-09-19T01:01:31.987Z","dependency_job_id":"6f75f1b8-7567-48a2-8a40-76a8b26101e4","html_url":"https://github.com/sridharbandi/Java-a11y","commit_stats":{"total_commits":225,"total_committers":6,"mean_commits":37.5,"dds":0.03111111111111109,"last_synced_commit":"a377c8a0f01838a53c72d11493b5d7be905aff71"},"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sridharbandi%2FJava-a11y","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sridharbandi%2FJava-a11y/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sridharbandi%2FJava-a11y/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sridharbandi%2FJava-a11y/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sridharbandi","download_url":"https://codeload.github.com/sridharbandi/Java-a11y/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238662631,"owners_count":19509638,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["a11y","a11y-testing","accessibility","accessibility-automation","axe","deque","htmlcodesniffer","pa11y","selenium","selenium-java","selenium-webdriver"],"created_at":"2024-09-24T13:58:37.908Z","updated_at":"2025-10-28T14:30:34.884Z","avatar_url":"https://github.com/sridharbandi.png","language":"Java","readme":"# Java-a11y\n## Accessibility Automation for Web Apps with Java and Selenium Webdriver.\n\n\u003eNote If you are using version 2.1.4 and below, refer [readme](/ReadMe_Pre.md)\n\n### This project uses [HTML CodeSniffer](https://squizlabs.github.io/HTML_CodeSniffer/) and [Deque Axe](https://www.deque.com/)\n\n**HTML CodeSniffer** : checks HTML source code and detects any Accessibility violations. Comes with standards that cover the three (A, AA \u0026 AAA) conformance levels of the W3C's Web Content Accessibility Guidelines (WCAG) 2.1 and the U.S. Section 508 legislation.\n\n**Deque Axe** : World’s leading digital accessibility toolkit. Powerful and accurate accessibility toolkit can get you to 80% issue coverage, or more, during development.\n\n[![Maven Central](https://img.shields.io/maven-central/v/io.github.sridharbandi/java-a11y.svg)](http://search.maven.org/#search|ga|1|g:\"io.github.sridharbandi\")\n[![jdk badge](https://img.shields.io/badge/jdk-8-green.svg)](http://www.oracle.com/technetwork/java/javase/downloads/index.html)\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/8b32dbe54c8d4b5e902390926e8b0d46)](https://www.codacy.com/gh/sridharbandi/Java-a11y/dashboard?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=sridharbandi/Java-a11y\u0026amp;utm_campaign=Badge_Grade)\n[![Codacy Badge](https://app.codacy.com/project/badge/Coverage/8b32dbe54c8d4b5e902390926e8b0d46)](https://www.codacy.com/gh/sridharbandi/Java-a11y/dashboard?utm_source=github.com\u0026utm_medium=referral\u0026utm_content=sridharbandi/Java-a11y\u0026utm_campaign=Badge_Coverage)\n[![License badge](https://img.shields.io/badge/license-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n[![Contributer badge](https://img.shields.io/github/contributors/sridharbandi/Java-a11y.svg)](https://github.com/sridharbandi/Java-a11y/graphs/contributors)\n\n### Features\n1. Simple \u0026 Easy to use\n2. No need of prior knowledge on Accessibility\n3. Works with Java Selenium [Webdriver](https://www.selenium.dev/projects/)\n4. Rich Reporting\n5. Open source\n\n### Usage\nFor maven based project add the below dependency\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003eio.github.sridharbandi\u003c/groupId\u003e\n  \u003cartifactId\u003ejava-a11y\u003c/artifactId\u003e\n  \u003cversion\u003e3.0.4\u003c/version\u003e\n\u003c/dependency\u003e\n```\nFor gradle based project add the below dependency\n```\ncompile 'io.github.sridharbandi:java-a11y:3.0.4'\n```\nFor non gradle/maven project download the jar from below mentioned link and add it to CLASSPATH for your project\n\n[https://github.com/sridharbandi/Java-a11y/releases](https://github.com/sridharbandi/Java-a11y/releases)\n\n### Getting Started\n#### Using HTML CodeSniffer\nCreate object of `HtmlCsRunner` as below. `driver` will be your WebDriver instance.\n```java\nHtmlCsRunner htmlCsRunner = new HtmlCsRunner(driver);;\n```\n\nOnce after you navigated to any page/popup with Selenium Webdriver execute Accessibility on that particular page/popup\n```java\nhtmlCsRunner.execute();\n```\n\nThe above `execute` will also generate `JSON Report` on accessibility issues at page/popup level\n\nOnce after all the tests executed, you can call the below method to generate consolidated `HTML Report` on accessibility issues\n```java\nhtmlCsRunner.generateHtmlReport();\n```\n\nBelow is junit example with reporting.\n\n```java\nimport freemarker.template.TemplateException;\nimport io.github.bonigarcia.wdm.ChromeDriverManager;\nimport io.github.sridharbandi.HtmlCsRunner;\nimport org.junit.jupiter.api.AfterAll;\nimport org.junit.jupiter.api.AfterEach;\nimport org.junit.jupiter.api.BeforeEach;\nimport org.junit.jupiter.api.Test;\nimport org.openqa.selenium.WebDriver;\nimport org.openqa.selenium.chrome.ChromeDriver;\n\nimport java.io.IOException;\nimport java.net.URISyntaxException;\nimport java.time.Duration;\n\n/**\n * A sample test to demonstrate\n */\npublic class Example {\n\n    private WebDriver driver;\n    private static HtmlCsRunner htmlCsRunner;\n\n    @BeforeEach\n    public void beforeTest() {\n        ChromeDriverManager.chromedriver().setup();\n        driver = new ChromeDriver();\n        driver.manage().timeouts().pageLoadTimeout(Duration.ofSeconds(60));\n        driver.manage().window().fullscreen();\n        htmlCsRunner = new HtmlCsRunner(driver);\n\n    }\n\n    @AfterEach\n    public void tearDown() throws IOException {\n        htmlCsRunner.execute();\n        driver.quit();\n    }\n\n    @AfterAll\n    public static void generateReport() throws IOException {\n        htmlCsRunner.generateHtmlReport();\n    }\n\n    @Test\n    public void googleTest() {\n        driver.get(\"https://www.google.com/\");\n    }\n\n    @Test\n    public void stockTest() {\n        driver.get(\"https://www.istockphoto.com/\");\n    }\n}\n```\n\nBy default, it will check against `WCAG2AA` standards. However, you can configure it to standard you want to test with\n```java\nhtmlCsRunner.setStandard(HTMLCS.WCAG2A);\n```\n\nHTML Reports will be generated under `./target/java-a11y/htmlcs` folder.\n\nBelow are the report screenshots\n\nConsolidated Report\n\n![Index](/readme/htmlcs_index.png)\n\nPage Report\n\n![Page](/readme/htmlcs_page.png)\n\n#### Using Deque Axe\nCreate object of `AxeRunner` as below. `driver` will be your WebDriver instance.\n```java\nAxeRunner axeRunner = new AxeRunner(driver);\n```\n\nOnce after you navigated to any page/popup with Selenium Webdriver execute Accessibility on that particular page/popup\n```java\naxeRunner.execute();\n```\n\nThe above `execute` will also generate `JSON Report` on accessibility issues at page/popup level\n\nOnce after all the tests executed, you can call the below method to generate consolidated `HTML Report` on accessibility issues\n```java\naxeRunner.generateHtmlReport();\n```\n\nBelow is junit example with reporting.\n\n```java\nimport freemarker.template.TemplateException;\nimport io.github.bonigarcia.wdm.ChromeDriverManager;\nimport io.github.sridharbandi.AxeRunner;\nimport org.junit.jupiter.api.AfterAll;\nimport org.junit.jupiter.api.AfterEach;\nimport org.junit.jupiter.api.BeforeEach;\nimport org.junit.jupiter.api.Test;\nimport org.openqa.selenium.WebDriver;\nimport org.openqa.selenium.chrome.ChromeDriver;\n\nimport java.io.IOException;\nimport java.net.URISyntaxException;\nimport java.time.Duration;\n\n/**\n * A sample test to demonstrate\n */\npublic class Example {\n\n    private WebDriver driver;\n    private static AxeRunner axeRunner;\n\n    @BeforeEach\n    public void beforeTest() {\n        ChromeDriverManager.chromedriver().setup();\n        driver = new ChromeDriver();\n        driver.manage().timeouts().pageLoadTimeout(Duration.ofSeconds(60));\n        driver.manage().window().fullscreen();\n        axeRunner = new AxeRunner(driver);\n\n    }\n\n    @AfterEach\n    public void tearDown() throws IOException {\n        axeRunner.execute();\n        driver.quit();\n    }\n\n    @AfterAll\n    public static void generateReport() throws IOException {\n        axeRunner.generateHtmlReport();\n    }\n\n    @Test\n    public void googleTest() {\n        driver.get(\"https://www.google.com/\");\n    }\n\n    @Test\n    public void stockTest() {\n        driver.get(\"https://www.istockphoto.com/\");\n    }\n\n}\n```\n\nBy default, it will check against `WCAG2AA` and `section508` tags. However, you can configure it to tag you want to test with\n```java\naxeRunner.setTags(AxeTag.WCAG21AA);\n```\nOr multiple tags using varargs syntax\n```java\naxeRunner.setTags(AxeTag.WCAG21A, AxeTag.BEST_PRACTICE);\n```\n\nEach [Tag](https://www.deque.com/axe/core-documentation/api-documentation/#axe-core-tags) has set of [Rules](https://github.com/dequelabs/axe-core/blob/develop/doc/rule-descriptions.md) and you can enable/disable particular rule as needed\n```java\naxeRunner.disableRules(\"link-name\", \"aria-allowed-role\")\n         .enableRules(\"autocomplete-valid\", \"region\")\n```\n\nHTML Reports will be generated under `./target/java-a11y/axe` folder.\n\nBelow are the report screenshots\n\nConsolidated Report\n\n![Index](/readme/axe_index.png)\n\nPage Report\n\n![Page](/readme/axe_page.png)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsridharbandi%2Fjava-a11y","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsridharbandi%2Fjava-a11y","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsridharbandi%2Fjava-a11y/lists"}