问题
I want to support VoiceOver. I have an UIButton
inside of an UITableViewCell
. According to a best practice I have disabled the button for accessibility (.isAccessibilityElement = false
) and implemented a custom accessibility action for the cell (accessibilityCustomActions, NSAccessibilityCustomAction
).
This way VoiceOver would not find and read the button as an own element. To make the feature behind the button accessible, I have added a custom accessibility action to the cell. With the custom action the user can select the action with swipe up and down. And then perform it with double-tap.
Now I want to test this action with an UITest. It's not possible to access the button inside of an UITest, because its disabled for accessibility.
How can I perform a custom accessibility action inside of an UITest?
回答1:
How can I perform a custom accessibility action inside of an UITest?
Actually, you can't with {Xcode 11, iOS 13} and even if you can get an array of actions in UITest, it's nil and you can't fire the selectors from XCUITEST (UI tests don't get code-level access to the app as unit tests do).
Testing manually is currently the only way to test accessibility custom actions with VoiceOver.
Take a look at this answer given by an Apple engineer during the WWDC 2019.
回答2:
Don't know if I got your question correct or if this would work, but you can try coordinate(withNormalizedOffset:) function to click on that UIButton
Eg.
let buttonRectMidX = 300.0
let cellWidth = 320.0
let buttonRectMidY = 25.0
let cellHeight = 50.0
app.tables.firstMatch
.cells.element(boundBy: 2)
.coordinate(withNormalizedOffset: CGVector(dx: buttonRectMidX / cellWidth, dy: buttonRectMidY / cellHeight))
.tap()
来源:https://stackoverflow.com/questions/53373806/ios-uitest-how-to-test-custom-accessibility-actions