Save Scan Results Locally
When you save scan results locally, you can use the JSON result to integrate accessibility metrics into different reporting tools. You can also create an HTML report to share via email or chat, to notify your team of the accessibility health of your test run.
Saving results locally is only supported within automated testing.
Save and Share Results
Use the following code to save test results on the actual physical device or emulator as a .json
file. The "prefix"
parameter will be the beginning of the file name you want to save the result as.
axe.scan()?.saveResultToLocalStorage("prefix")
Note: You can change the scan's name prior to saving the result.
Use Results for Reporting
Leverage scan results for reporting by moving the JSON files to your project's build folder. Then you can utilize the axe DevTools Reporter CLI to build an HTML report from a set of scans. Alternatively, you can access the result files programmatically to integrate accessibility metrics with internal reporting tools.
Add the following script to your app's build.gradle
file, below the android{...}
block, and ensure it's not within another Gradle task. Add your app package name in the packageName
variable.
The script below will copy the reports generated from saving results locally on your emulator or device and move them into your build folder's report directory.
def reportsDirectory = "$buildDir/reports/androidTests/connected/axe"
def packageName = "your.app.package.name.here"
def createAndroidFolderDirectoryTask = task('createAndroidFolderDirectoryTask', type: Exec, group: 'reporting') {
executable "${android.getAdbExecutable().toString()}"
args 'shell', 'mkdir', '-p', '/storage/emulated/0/Android/data/' + packageName + '/files/AxeTestCases'
}
def clearAndroidDirectoryTask = task('clearAndroidDirectoryTask', type: Exec, group: 'reporting') {
executable "${android.getAdbExecutable().toString()}"
args 'shell', 'rm', '-r', '/storage/emulated/0/Android/data/' + packageName + '/files/AxeTestCases'
}
def fetchAndroidFolderAxeReportsTask = task('fetchAndroidFolderAxeReportsTask', type: Exec, group: 'reporting') {
executable "${android.getAdbExecutable().toString()}"
args 'pull', '/storage/emulated/0/Android/data/' + packageName + '/files/AxeTestCases', reportsDirectory
dependsOn {
createAndroidFolderDirectoryTask
}
finalizedBy {
clearAndroidDirectoryTask
}
doFirst {
new File(reportsDirectory).mkdirs()
}
}
def createDirectoryTask = task('createDirectoryTask', type: Exec, group: 'reporting') {
executable "${android.getAdbExecutable().toString()}"
args 'shell', 'mkdir', '-p', '/storage/emulated/0/Documents/AxeTestCases'
}
def clearDirectoryTask = task('clearDirectoryTask', type: Exec, group: 'reporting') {
executable "${android.getAdbExecutable().toString()}"
args 'shell', 'rm', '-r', '/storage/emulated/0/Documents/AxeTestCases'
finalizedBy {
fetchAndroidFolderAxeReportsTask
}
}
def fetchAxeReportsTask = task('fetchAxeReportsTask', type: Exec, group: 'reporting') {
executable "${android.getAdbExecutable().toString()}"
args 'pull', '/storage/emulated/0/Documents/AxeTestCases', reportsDirectory
dependsOn {
createDirectoryTask
}
finalizedBy {
clearDirectoryTask
}
doFirst {
new File(reportsDirectory).mkdirs()
}
}
tasks.configureEach { task ->
if (task.name == 'connectedDebugAndroidTest') {
task.finalizedBy {
fetchAxeReportsTask
}
}
}
Support on Cloud Testing Platforms
Saving a result locally will not work as expected on Cloud Testing Platforms. If you need support for Cloud Testing Platforms, please send a request to helpdesk@deque.com or at support.deque.com.
Using XML or Compose?
For XML layouts, be sure to pass in the activity to scan. axe
refers to the AxeDevTools
object you initialized in your test class setup.
axe.scan(activity)?.saveResultToLocalStorage("prefix")
For Compose layouts, axeCompose
refers to the object you initialized in your test class setup.
axeCompose.scan()?.saveResultToLocalStorage("prefix")