Objective-C Support
Follow the Setup axeDevToolsXCUI.xcframework. All the features available on this page are fully supported in Objective-C. Import the header in any file you plan to use the XCUI framework in:
#import <axeDevToolsXCUI/axeDevToolsXCUI-Swift.h>
Utilize the setUp
method in your UITests to initialize an AxeDevTools object to interact with available features. Generate an API key at axe.deque.com. If preferred, you can instead authenticate with a username and password.
@interface ObjcUITests : XCTestCase
@end
@implementation ObjcUITests
AxeDevTools* axeDevTools;
- (void)setUp {
NSError* error;
axeDevTools = [AxeDevTools loginWithAPIKey:@"API_KEY"
toServer:@""
error:&error];
}
Run a Scan
To run a scan on a screen in your application or on any XCUIElement in your application, create a new test case within your UITests and call the run
method within your AxeDevTools
object:
- (void)testAccessibilityOfFirstScreen {
XCUIApplication *app = [[XCUIApplication alloc] init];
[app launch];
NSError* error;
AxeResult* result = [axeDevTools runOnElement:app error:&error];
XCTAssertEqual(result.failures.count, 0); // This allows you to assert if there are accessibility failures
}
Send Scan to the Dashboard
Once you have the scan, you can send it to the Dashboard by calling the postResult
method from the AxeDevTools
object:
NSError* error;
[axeDevTools postResult:result withTags:@[@"Build 10.6.1"] withScanName:@"" error:&error];
If you do not want to tag your scan, you can pass in an empty array to the withTags
parameter. If you would like to give the scan a custom scan name, you can pass it into the withScanName
parameter.
Full Example
#import <axeDevToolsXCUI/axeDevToolsXCUI-Swift.h>
#import <XCTest/XCTest.h>
@interface ObjcUITests : XCTestCase
@end
@implementation ObjcUITests
AxeDevTools* axeDevTools;
- (void)setUp {
NSError* error;
axeDevTools = [AxeDevTools loginWithAPIKey:@"API_KEY"
toServer:@""
error:&error];
}
- (void)testAccessibilityOfFirstScreen {
XCUIApplication *app = [[XCUIApplication alloc] init];
[app launch];
NSError* error;
AxeResult* result = [axeDevTools runOnElement:app error:&error];
XCTAssertEqual(result.failures.count, 0);
[axeDevTools postResult:result
withTags:@[@"Build 10.6.1"]
withScanName:@""
error:&error];
}
@end
Features
Ignoring Views
Once you're logged in, use the AxeDevTools object to ignore rules for specific views. You can ignore all views of a specific class, or ignore a view with a specific Accessibility Identifier:
NSDictionary* ignoreRules = @{ @"UILabel": @[@"InScrollView"], // ignore InScrollView for all UILabels
@"LoginScreen.Button": @[@"TouchTargetSize"] // ignore TouchTargetSize for the view with this accessibility id
};
[[axeDevTools configuration] ignoreWithRulesFor: ignoreRules];
Ignoring Rules
Once you're logged in, use the AxeDevTools object to ignore any rules for an entire scan:
[[axeDevTools configuration] ignoreWithRules:@[@"A11yElementFocusBox"] :true];
You can also re-add rules to the configuration by changing the bool
from true
to false
:
[[axeDevTools configuration] ignoreWithRules:@[@"A11yElementFocusBox"] :false];
Save Scans Locally
Save results locally to utilize the axe DevTools Reporter CLI to build an executive report off a set of scans within your CI/CD pipeline.
A scan will be saved as a .json file. Saving scans locally is only supported within automated testing. If the path and file name are not specified, the results will be named "(APPID)-(CURRENT_SCREEN_TITLE).json" and will be saved in a folder called "AxeDevToolsResults" within your User folder.
Once logged in, use the AxeDevTools object to save your scan as a JSON file. To use the default path and file name, send empty strings to the parameters:
NSError* error;
[axeDevTools saveResult:result toPath:@"" withName:@"" error:&error];