From 27fcbe7f9b7bda0337a9478b4d183231236cd655 Mon Sep 17 00:00:00 2001 From: Anton Kharchevskyi Date: Tue, 30 Nov 2021 23:12:51 +0200 Subject: [PATCH 1/8] Add accessibility id to navigation title --- FlowCrypt/Controllers/Inbox/InboxViewController.swift | 1 + .../Backups Option Scene/BackupOptionsViewController.swift | 2 +- .../Backup/Backups Scene/BackupViewController.swift | 2 +- .../BackupSelectKeyViewController.swift | 2 +- FlowCryptUI/Nodes/TableViewController.swift | 6 ++++++ 5 files changed, 10 insertions(+), 3 deletions(-) diff --git a/FlowCrypt/Controllers/Inbox/InboxViewController.swift b/FlowCrypt/Controllers/Inbox/InboxViewController.swift index 5d33d6d11..2e0efbebd 100644 --- a/FlowCrypt/Controllers/Inbox/InboxViewController.swift +++ b/FlowCrypt/Controllers/Inbox/InboxViewController.swift @@ -92,6 +92,7 @@ final class InboxViewController: ASDKViewController { extension InboxViewController { private func setupUI() { title = inboxTitle + navigationItem.titleView?.accessibilityIdentifier = 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 863e912fc..bbd4542e1 100644 --- a/FlowCrypt/Controllers/Settings/Backup/Backups Option Scene/BackupOptionsViewController.swift +++ b/FlowCrypt/Controllers/Settings/Backup/Backups Option Scene/BackupOptionsViewController.swift @@ -22,7 +22,7 @@ enum BackupOption: Int, CaseIterable, Equatable { } @MainActor -final class BackupOptionsViewController: ASDKViewController { +final class BackupOptionsViewController: TableNodeViewControlle { 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 a77747db9..4b08d8582 100644 --- a/FlowCrypt/Controllers/Settings/Backup/Backups Scene/BackupViewController.swift +++ b/FlowCrypt/Controllers/Settings/Backup/Backups Scene/BackupViewController.swift @@ -10,7 +10,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 5aca0a769..19d021fac 100644 --- a/FlowCrypt/Controllers/Settings/Backup/Backups Seleckt Key Scene/BackupSelectKeyViewController.swift +++ b/FlowCrypt/Controllers/Settings/Backup/Backups Seleckt Key Scene/BackupSelectKeyViewController.swift @@ -11,7 +11,7 @@ import FlowCryptUI import Foundation @MainActor -final class BackupSelectKeyViewController: ASDKViewController { +final class BackupSelectKeyViewController: TableNodeViewController { private let backupService: BackupServiceType private let service: ServiceActor private let decorator: BackupSelectKeyDecoratorType diff --git a/FlowCryptUI/Nodes/TableViewController.swift b/FlowCryptUI/Nodes/TableViewController.swift index d6506df1e..306f0f8ca 100644 --- a/FlowCryptUI/Nodes/TableViewController.swift +++ b/FlowCryptUI/Nodes/TableViewController.swift @@ -10,6 +10,12 @@ import AsyncDisplayKit @MainActor open class TableNodeViewController: ASDKViewController { + public override var title: String? { + didSet { + navigationItem.titleView?.accessibilityIdentifier = title + } + } + public override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { super.traitCollectionDidChange(previousTraitCollection) node.reloadData() From e24f77685daf3388416d0625db3334d967054fa8 Mon Sep 17 00:00:00 2001 From: Anton Kharchevskyi Date: Tue, 30 Nov 2021 23:14:56 +0200 Subject: [PATCH 2/8] Typo fix --- .../Backups Option Scene/BackupOptionsViewController.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FlowCrypt/Controllers/Settings/Backup/Backups Option Scene/BackupOptionsViewController.swift b/FlowCrypt/Controllers/Settings/Backup/Backups Option Scene/BackupOptionsViewController.swift index bbd4542e1..90dbca2df 100644 --- a/FlowCrypt/Controllers/Settings/Backup/Backups Option Scene/BackupOptionsViewController.swift +++ b/FlowCrypt/Controllers/Settings/Backup/Backups Option Scene/BackupOptionsViewController.swift @@ -22,7 +22,7 @@ enum BackupOption: Int, CaseIterable, Equatable { } @MainActor -final class BackupOptionsViewController: TableNodeViewControlle { +final class BackupOptionsViewController: TableNodeViewController { enum Parts: Int, CaseIterable { case email, download, action, info } From 77e701c113001b6fd4cb77dfaefd18f4aaa3af6b Mon Sep 17 00:00:00 2001 From: Anton Kharchevskyi Date: Tue, 30 Nov 2021 23:26:07 +0200 Subject: [PATCH 3/8] add accessibilityLabel to navigation item --- FlowCrypt/Controllers/Inbox/InboxViewController.swift | 2 +- FlowCryptUI/Nodes/TableViewController.swift | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/FlowCrypt/Controllers/Inbox/InboxViewController.swift b/FlowCrypt/Controllers/Inbox/InboxViewController.swift index 2e0efbebd..7436185c9 100644 --- a/FlowCrypt/Controllers/Inbox/InboxViewController.swift +++ b/FlowCrypt/Controllers/Inbox/InboxViewController.swift @@ -92,7 +92,7 @@ final class InboxViewController: ASDKViewController { extension InboxViewController { private func setupUI() { title = inboxTitle - navigationItem.titleView?.accessibilityIdentifier = inboxTitle + navigationItem.setAccessibility(id: inboxTitle) tableNode.do { $0.delegate = self diff --git a/FlowCryptUI/Nodes/TableViewController.swift b/FlowCryptUI/Nodes/TableViewController.swift index 306f0f8ca..96e543c44 100644 --- a/FlowCryptUI/Nodes/TableViewController.swift +++ b/FlowCryptUI/Nodes/TableViewController.swift @@ -12,7 +12,7 @@ import AsyncDisplayKit open class TableNodeViewController: ASDKViewController { public override var title: String? { didSet { - navigationItem.titleView?.accessibilityIdentifier = title + navigationItem.setAccessibility(id: title) } } @@ -21,3 +21,11 @@ open class TableNodeViewController: ASDKViewController { node.reloadData() } } + +public extension UINavigationItem { + func setAccessibility(id: String?) { + isAccessibilityElement = true + titleView?.accessibilityIdentifier = title + accessibilityLabel = title + } +} From dd1605007a8524593f9b215d0bd4fe420076ce4a Mon Sep 17 00:00:00 2001 From: Anton Kharchevskyi Date: Wed, 1 Dec 2021 10:50:11 +0200 Subject: [PATCH 4/8] Test code for checking accessibility id in nav title --- FlowCryptUI/Nodes/TableViewController.swift | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/FlowCryptUI/Nodes/TableViewController.swift b/FlowCryptUI/Nodes/TableViewController.swift index 96e543c44..0bea3db48 100644 --- a/FlowCryptUI/Nodes/TableViewController.swift +++ b/FlowCryptUI/Nodes/TableViewController.swift @@ -24,8 +24,13 @@ open class TableNodeViewController: ASDKViewController { public extension UINavigationItem { func setAccessibility(id: String?) { - isAccessibilityElement = true - titleView?.accessibilityIdentifier = title - accessibilityLabel = title + let titleLabel = UILabel() + titleLabel.text = id + titleLabel.isAccessibilityElement = true + titleLabel.accessibilityIdentifier = title + titleLabel.accessibilityLabel = title + titleLabel.backgroundColor = .red + titleLabel.sizeToFit() + titleView = titleLabel } } From 10f2462538b5b405f2eaef6748c758d8c9dc2e86 Mon Sep 17 00:00:00 2001 From: Anton Kharchevskyi Date: Wed, 1 Dec 2021 18:05:04 +0200 Subject: [PATCH 5/8] Add accessibilityTraits --- FlowCryptUI/Nodes/TableViewController.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/FlowCryptUI/Nodes/TableViewController.swift b/FlowCryptUI/Nodes/TableViewController.swift index 0bea3db48..21190c0c5 100644 --- a/FlowCryptUI/Nodes/TableViewController.swift +++ b/FlowCryptUI/Nodes/TableViewController.swift @@ -29,6 +29,7 @@ public extension UINavigationItem { titleLabel.isAccessibilityElement = true titleLabel.accessibilityIdentifier = title titleLabel.accessibilityLabel = title + titleLabel.accessibilityTraits = .header titleLabel.backgroundColor = .red titleLabel.sizeToFit() titleView = titleLabel From 2ba8b890977b1d3240e556b378ad1682168520be Mon Sep 17 00:00:00 2001 From: Anton Kharchevskyi Date: Mon, 6 Dec 2021 15:37:14 +0200 Subject: [PATCH 6/8] Add accessibility id --- .gitignore | 1 + .../Backups Scene/BackupViewController.swift | 1 - FlowCryptUI/Nodes/TableViewController.swift | 21 +++++++++++++------ 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index d068fefbe..14e4516f7 100644 --- a/.gitignore +++ b/.gitignore @@ -50,4 +50,5 @@ appium/tmp appium/.env appium/FlowCrypt.app appium/video +appium/.env diff --git a/FlowCrypt/Controllers/Settings/Backup/Backups Scene/BackupViewController.swift b/FlowCrypt/Controllers/Settings/Backup/Backups Scene/BackupViewController.swift index 4b08d8582..66809f789 100644 --- a/FlowCrypt/Controllers/Settings/Backup/Backups Scene/BackupViewController.swift +++ b/FlowCrypt/Controllers/Settings/Backup/Backups Scene/BackupViewController.swift @@ -9,7 +9,6 @@ import AsyncDisplayKit import FlowCryptUI -@MainActor final class BackupViewController: TableNodeViewController { private enum Parts: Int, CaseIterable { case info, action diff --git a/FlowCryptUI/Nodes/TableViewController.swift b/FlowCryptUI/Nodes/TableViewController.swift index 21190c0c5..b0909d4cf 100644 --- a/FlowCryptUI/Nodes/TableViewController.swift +++ b/FlowCryptUI/Nodes/TableViewController.swift @@ -25,13 +25,22 @@ open class TableNodeViewController: ASDKViewController { public extension UINavigationItem { func setAccessibility(id: String?) { let titleLabel = UILabel() - titleLabel.text = id - titleLabel.isAccessibilityElement = true - titleLabel.accessibilityIdentifier = title - titleLabel.accessibilityLabel = title - titleLabel.accessibilityTraits = .header - titleLabel.backgroundColor = .red + 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 } } From 91676b9a175588b0302ea09d5d93dea624efd1ff Mon Sep 17 00:00:00 2001 From: Anton Kharchevskyi Date: Mon, 6 Dec 2021 15:38:18 +0200 Subject: [PATCH 7/8] Update appium README.md --- appium/README.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/appium/README.md b/appium/README.md index 90b8872ba..89c2653ba 100644 --- a/appium/README.md +++ b/appium/README.md @@ -19,3 +19,27 @@ Run this in `appium` folder. `npm run-script only.test.all` - run all ui tests without building the `.app`. Use this if you already built the `.app` before, and now only want to change the UI test spec without rebuilding the app `npm run-script only.test.filter "user is able to view text email"` - run a particular ui test without building `.app`, filtered by name + +## 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 From 9af5c53b991786bea4e514aa424e417d59a34aa1 Mon Sep 17 00:00:00 2001 From: Anton Kharchevskyi Date: Mon, 6 Dec 2021 15:44:22 +0200 Subject: [PATCH 8/8] Update gitignore --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 14e4516f7..d068fefbe 100644 --- a/.gitignore +++ b/.gitignore @@ -50,5 +50,4 @@ appium/tmp appium/.env appium/FlowCrypt.app appium/video -appium/.env