diff --git a/FlowCrypt/Controllers/Inbox/InboxViewController.swift b/FlowCrypt/Controllers/Inbox/InboxViewController.swift index bf27fcf47..e0561b71d 100644 --- a/FlowCrypt/Controllers/Inbox/InboxViewController.swift +++ b/FlowCrypt/Controllers/Inbox/InboxViewController.swift @@ -100,6 +100,7 @@ final class InboxViewController: ASDKViewController { extension InboxViewController { private func setupUI() { title = inboxTitle + navigationItem.setAccessibility(id: inboxTitle) tableNode.do { $0.delegate = self diff --git a/FlowCrypt/Controllers/Settings/Backup/Backups Option Scene/BackupOptionsViewController.swift b/FlowCrypt/Controllers/Settings/Backup/Backups Option Scene/BackupOptionsViewController.swift index 14e7073f0..fc6b1d1c5 100644 --- a/FlowCrypt/Controllers/Settings/Backup/Backups Option Scene/BackupOptionsViewController.swift +++ b/FlowCrypt/Controllers/Settings/Backup/Backups Option Scene/BackupOptionsViewController.swift @@ -21,7 +21,7 @@ enum BackupOption: Int, CaseIterable, Equatable { } @MainActor -final class BackupOptionsViewController: ASDKViewController { +final class BackupOptionsViewController: TableNodeViewController { enum Parts: Int, CaseIterable { case email, download, action, info } diff --git a/FlowCrypt/Controllers/Settings/Backup/Backups Scene/BackupViewController.swift b/FlowCrypt/Controllers/Settings/Backup/Backups Scene/BackupViewController.swift index 39556f822..8b08ab49b 100644 --- a/FlowCrypt/Controllers/Settings/Backup/Backups Scene/BackupViewController.swift +++ b/FlowCrypt/Controllers/Settings/Backup/Backups Scene/BackupViewController.swift @@ -9,8 +9,7 @@ import AsyncDisplayKit import FlowCryptUI -@MainActor -final class BackupViewController: ASDKViewController { +final class BackupViewController: TableNodeViewController { private enum Parts: Int, CaseIterable { case info, action } diff --git a/FlowCrypt/Controllers/Settings/Backup/Backups Seleckt Key Scene/BackupSelectKeyViewController.swift b/FlowCrypt/Controllers/Settings/Backup/Backups Seleckt Key Scene/BackupSelectKeyViewController.swift index 50e5c4f91..b7afaa68a 100644 --- a/FlowCrypt/Controllers/Settings/Backup/Backups Seleckt Key Scene/BackupSelectKeyViewController.swift +++ b/FlowCrypt/Controllers/Settings/Backup/Backups Seleckt Key Scene/BackupSelectKeyViewController.swift @@ -10,8 +10,7 @@ import AsyncDisplayKit import FlowCryptUI import Foundation -@MainActor -final class BackupSelectKeyViewController: ASDKViewController { +final class BackupSelectKeyViewController: TableNodeViewController { private let appContext: AppContext private let service: ServiceActor diff --git a/FlowCryptUI/Nodes/TableViewController.swift b/FlowCryptUI/Nodes/TableViewController.swift index 2c5143067..b0909d4cf 100644 --- a/FlowCryptUI/Nodes/TableViewController.swift +++ b/FlowCryptUI/Nodes/TableViewController.swift @@ -10,9 +10,37 @@ import AsyncDisplayKit @MainActor open class TableNodeViewController: ASDKViewController { + public override var title: String? { + didSet { + navigationItem.setAccessibility(id: title) + } + } public override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { super.traitCollectionDidChange(previousTraitCollection) node.reloadData() } } + +public extension UINavigationItem { + func setAccessibility(id: String?) { + let titleLabel = UILabel() + titleLabel.attributedText = id?.attributed( + .medium(16), + color: .white, + alignment: .center + ) + titleLabel.sizeToFit() + titleView = titleLabel + + let accessibilityIdentifier = "navigationItem\((id ?? ""))" + .replacingOccurrences(of: " ", with: "") + .capitalized + titleLabel.isAccessibilityElement = true + titleLabel.accessibilityTraits = .header + titleView?.accessibilityIdentifier = accessibilityIdentifier + titleView?.isAccessibilityElement = true + titleView?.accessibilityTraits = .header + isAccessibilityElement = true + } +} diff --git a/appium/README.md b/appium/README.md index d3fc8eaf9..5dd8a984b 100644 --- a/appium/README.md +++ b/appium/README.md @@ -22,4 +22,28 @@ To run a particular test: - `npm run-script test.live "user is able to view text email"` - `npm run-script test.mock "app setup fails with bad EKM URL"` -To run all tests: `npm run-script test.live.all` or `npm run-script test.mock.all` \ No newline at end of file +To run all tests: `npm run-script test.live.all` or `npm run-script test.mock.all` + +## Inspect accessibility identifiers + 1. Install `https://github.com/appium/appium-inspector`. Releases `https://github.com/appium/appium-inspector/releases` + 2. Download `appium-inspector.dmg`. + 3. Before openning package run `xattr -cr appium-inspector.dmg` on downloaded file. + 4. Allow access in `System Prefferences -> Privacy Tab -> Accessibility` + 5. Use next capabilities for `Appium Inspector` + ` + { + "platformName": "iOS", + "iosInstallPause": 5000, + "deviceName": "iPhone 13", + "app": "*path to already buil app/FlowCrypt.app*", + "platformVersion": "15.0", + "automationName": "XCUITest", + "newCommandTimeout": 10000, + "wdaLaunchTimeout": 300000, + "wdaConnectionTimeout": 600000, + "wdaStartupRetries": 4, + "wdaStartupRetryInterval": 120000 + } + ` + 6. Remote host - `127.0.0.1`, Port - `4723`, Path - `/wd/hub` + 7. Run `Start Session` \ No newline at end of file