commit 55ee1373530f1bdcb08649d139d37e17fed37e7a
parent 3260eac5182505530cdfebba420c572da70c6071
Author: Michael Camilleri <[email protected]>
Date: Sat, 14 Mar 2026 18:37:38 +0900
Use stable identifiers for accessibility identifiers on macOS
Diffstat:
2 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/ListlessMac/Views/TaskRowView.swift b/ListlessMac/Views/TaskRowView.swift
@@ -99,7 +99,7 @@ struct TaskRowView: View {
.focused($focusedField, equals: .task(taskID))
.frame(maxWidth: .infinity, alignment: .leading)
.accessibilityIdentifier(
- isCurrentlyEditing ? "task-textfield" : "task-text-\(task.title)")
+ isCurrentlyEditing ? "task-textfield" : "task-text-\(taskID.uuidString)")
}
.padding(.top, 4)
.padding(.vertical, 8)
diff --git a/Tests/UI/ListlessMacUITests.swift b/Tests/UI/ListlessMacUITests.swift
@@ -27,9 +27,10 @@ final class ListlessMacUITests: XCTestCase {
}
/// Returns the text field for a committed task with the given title.
- /// Committed tasks expose as TextField with identifier "task-text-\(title)".
func taskText(_ title: String) -> XCUIElement {
- app.textFields["task-text-\(title)"]
+ app.textFields.matching(
+ NSPredicate(format: "identifier BEGINSWITH 'task-text-' AND value == %@", title)
+ ).firstMatch
}
/// Creates a task by typing into the draft field and pressing Return.
@@ -187,9 +188,8 @@ final class ListlessMacUITests: XCTestCase {
navigateToTask(at: 1)
app.typeKey(.upArrow, modifierFlags: .command)
- // Use firstMatch to avoid ambiguity if draft row duplicates an identifier
- let bravo = app.textFields.matching(identifier: "task-text-Bravo").firstMatch
- let alpha = app.textFields.matching(identifier: "task-text-Alpha").firstMatch
+ let bravo = taskText("Bravo")
+ let alpha = taskText("Alpha")
XCTAssertTrue(bravo.waitForExistence(timeout: 2))
XCTAssertTrue(alpha.exists)
XCTAssertLessThan(
@@ -204,8 +204,8 @@ final class ListlessMacUITests: XCTestCase {
navigateToTask(at: 0)
app.typeKey(.downArrow, modifierFlags: .command)
- let alpha = app.textFields.matching(identifier: "task-text-Alpha").firstMatch
- let bravo = app.textFields.matching(identifier: "task-text-Bravo").firstMatch
+ let alpha = taskText("Alpha")
+ let bravo = taskText("Bravo")
XCTAssertTrue(alpha.waitForExistence(timeout: 2))
XCTAssertTrue(bravo.exists)
XCTAssertGreaterThan(