Component Versions
- axeDevToolsXCUI v2.6.0
- axe-devtools-android v4.0.0
What's New?
Introducing axe DevTools Mobile Analyzer
Use the new axe DevTools Mobile Analyzer to test iOS or Android apps built with any technology without access to the source code. Test both native and cross-platform apps, such as SwiftUI and UIKit in iOS, Jetpack Compose and XML in Android, React Native, Flutter, Xamarin and Ionic. axe DevTools Mobile Analyzer replaces the embedded Floating Action Button for user-initiated (manual) accessibility testing. To make the switch, remove the embedded code for the Floating Action Button from your app, and follow the docs to get started with the new axe DevTools Mobile Analyzer.
iOS
- Views built with SwiftUI and cross-platform apps can now be tested via user-initiated (manual) testing using the new axe DevTools Mobile Analyzer for iOS.
- The Supports Dynamic Type rule is now available in the XCUI framework. This rule resizes the text multiple times and re-evaluates the screen after each resize to look for issues, which takes a few seconds to run. For this reason, we've released this as opt-in. To opt in, set
optInToSDT
as true from the axe configuration API.axeDevTools.configuration.optInToSDT = true
. - The minimum supported iOS version is now iOS 14 (previously iOS 13).
Android
- Cross-platform apps can now be tested via user-initiated (manual) testing using the new axe DevTools Mobile Analyzer for Android.
- Apps using Jetpack Compose views will now run the full rule set via either user-initiated (manual) or automated testing. (Previously Android apps using Jetpack Compose had a smaller ruleset.)
- We now support the UI Automator testing framework for automated testing.
- The updated Android SDK allows automated accessibility scanning through Espresso and UI Automator using the Instrumentation Registry, which doesn't require you to specify any view or activity.
- Breaking change: The
DashboardService
class has been replaced with theResultsDashboard
class.
Dashboard
- Improved loading time for issue count and summary from main Dashboard screen.
- Improved the appearance of the View Hierarchy when viewed in the Safari browser.
Bug Fixes
axe DevTools Mobile for iOS
- Color Contrast rule - We will no longer run color contrast rules on disabled buttons because color contrast rules are inapplicable to disabled elements.
- Colliding Controls rule - Any control that is not marked as accessibility focusable or is not an accessibility element will no longer be considered when looking at colliding controls.
- Locally saved results - The scan name is now properly added to the JSON file when saved locally or downloaded from the Dashboard. This fixes the "unnamed scan" title that was previously showing in HTML reports generated from the Reporter CLI.
axe DevTools Mobile Dashboard
- Accessibility fixes: Added missing aria role="button", improved the announcement modal heading, removed the tooltip in the view hierarchy, and added better screen reader announcements for pagination.
- Fixed the scan name in the screenshot which was previously overlapping the 'Inspect' button.
- Fixed an issue where free trial users were seeing an infinite spinner.
Updates
This release marks the last of our updates to the UIKit framework for automated testing on iOS apps. We will continue to offer this framework for the foreseeable future, but will no longer make bug fixes or updates. We encourage you to switch to the XCUI framework which will be updated with new rules and improvements going forward. If you are currently using the UIKit framework for automated unit or UI testing and would like support transitioning to the XCUI framework, please let us know. Submit a request at support.deque.com, or email helpdesk@deque.com.
Known Issues
If you're experiencing any of the below issues, please contact us at helpdesk@deque.com or support.deque.com. We will then be able to notify you once it's resolved or of an identified workaround if none is listed.
- axe DevTools Mobile automated testing runs on native iOS, native Android, and React Native apps. Please contact your Deque representative for accessibility testing solutions on your tech stack.
- To support you in getting accurate results and applicable remediation advice axe DevTools Mobile rules does not run in web views or rendered PDFs. To test HTML content, please utilize axe DevTools for Web. axe Monitor supports scanning PDFs for accessibility.
axe DevTools Mobile for iOS
axeDevToolsUIKit.xcframework
Views built with SwiftUI cannot be tested using this framework for automated testing.
Use the axeDevToolsXCUI framework in UITesting for SwiftUI views.
Custom rule support is available only in Swift
The custom rule API is not open to Objective-C.
False Positives: InScrollView, SupportsDynamicType, Colliding Views
We are actively working on fixes for the following false positives and will update this list as fixes are released.
InScrollView
InScrollView may report issues for text within banner-behaving elements. To make these elements available to those that require larger text, use UILargeContentViewer
.
SupportsDynamicType
You may see false positives in the following scenarios:
- If using the
UIContentSizeCategoryDidChange
notification, the framework may incorrectly report that text does not respond to Dynamic Type in UITests. - If using
NotificationCenter.default.addObserver(forName:.., object:.., queue:.., using:..)
to respond to theUIContentSizeCategoryDidChange
notification. - If using
traitCollectionDidChange
on a text's parent view or view controller to respond to Dynamic Type.
When a scrollable subview contains text, and that subview does not span to the edge of the screen's bounds, you will see failures for text located within the view's bounds.
axeDevToolsXCUI.xcframework
SwiftUI Picker and UIKit Picker
Picker views in SwiftUI and UIKit may cause the framework to get stuck on simulators or devices. (#636)
Rules against Nested Controls
While looking at an improvement for our rules, we found that in XCTest, nested controls are not returned in the accessibility tree. A bug has been filed with Apple. (#1110)
False Positive: In Scroll View, ActiveControlName
We are actively working on fixes for the following false positives and will update this list as fixes are released.
In Scroll View
May report issues for text within banner-behaving elements. To make these elements available to those that require larger text, use UILargeContentViewer
. (#622)
ActiveControlName
If an UIImageView has an `accessibilityIdentifier` set but is not focusable by VoiceOver, and it has focusable controls nested within it, ActiveControlName may report a false positive on the UIImageView. Removing the `accessibilityIdentifier` resolves the issue. (#1178)
False Negative: Image View Name, Focusable Text in iOS 13 through iOS 14.8.1
We are actively working on fixes for the following false negatives and will update this list as fixes are released.
Image View Name
If an UIImageView has an `accessibilityIdentifier` set but is not focusable by VoiceOver, ImageViewName may report a false negative on the UIImageView. Removing the `accessibilityIdentifier` resolves the issue. (#1188)
Focusable Text
Elements marked as non-accessibility elements may report improper results due to a bug in Apple's framework.
axe DevTools Mobile for Android
Crash when using Proguard
If your debug or test build is utilizing Proguard, follow the steps to ignore Deque in your Proguard settings.
Crash when `minifiedEnabled` is set to true
If minifying your build, you'll see a crash with an error log reporting an adapter could not be found when trying to login to the axe DevTools library. Disable minify for your debug builds with axe DevTools implemented. (#729)
Errors Compiling with Java8 Project and axe DevTools Android 3.1.0
Try the following imports:
implementation 'androidx.core:core-ktx:1.9.0' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4'After importing the above library, if you see errors related to minSDK version for core-ktx library try the following in your project’s Android Manifest:
<uses-sdk tools:overrideLibrary="androidx.core" />
Builds with r8 enabled throw an error
A build with r8 enabled may attempt to minify the axeDevTools library resulting in an error similar to:
Caused by: java.lang.NullPointerException: throw with null exception at g.b.b.a$a.a(Unknown Source:1) at g.b.b.a$a.a(Unknown Source:0) at g.b.b.a.a(AccessToken.java:190)To resolve this error add the following line to your ProGuard file to keep axeDevTools classes:
keep class com.deque.** { *; }
Error message similar to:
Expected exactly '1' node but found '2' nodes that satisfy: (isRoot)
If you encounter an error along the lines of `Expected exactly '1' node but found '2' nodes that satisfy: (isRoot)`, please contact us at helpdesk@deque.com or support.deque.com for assistance. Under certain conditions, there may be two Compose root nodes existing at the same time.
axe DevTools Mobile Dashboard
Some Android scan names are unformatted
Some Android scan names that are defaulted to the screen title will appear as the full class name including the bundle identifier. In a future release, this will be resolved so that the screen title is formatted into a more readable name. As a workaround, you can set the scan name from the dashboard or frameworks. (#1643)