如何将 accessibilityIdentifier 添加到 UIAlertController 中的 textField

How can I add an accessibilityIdentifier to a textField within a UIAlertController

使用 XCUITest 我很难在 UIAlertController 上找到一个文本字段,它用于将项目添加到列表中。

我已经向警报本身添加了一个 accessibilityIdentifier,但如果可能的话,我也想向 textField 添加一个,因为到目前为止我的测试(部分记录)只能在函数第一次运行时找到该字段运行。第二次打开警报以将项目添加到列表时,它无法在 textField 上找到焦点。

UIAlertConroller 看起来像这样:

let alert = UIAlertController(title: "Add A Task", message: "Add new", preferredStyle: .alert)
        alert.view.accessibilityIdentifier = "Add Task Panel" // Added this identifier to help with UI tests
        alert.addTextField(configurationHandler: nil)
        alert.addAction(UIAlertAction(title: "Cancel", style: .default, handler: nil))
        alert.addAction(UIAlertAction(title: "Add", style: .default, handler: { [weak self] (action) -> Void in

测试函数看起来像这样,但部分是使用 'record' 功能生成的,所以不理想,因为我觉得必须有更好的方法来识别 textField(屏幕上只有一个)。

func addTextToOpenPopUp(textToAdd: String) {
        
        
        let popUpTextField = app.alerts["Add Task Panel"].scrollViews.otherElements.collectionViews.cells
            .children(matching: .other).element
            .children(matching: .other).element
            .children(matching: .other).element
            .children(matching: .other).element(boundBy: 1)
            .children(matching: .textField).element
        
        popUpTextField.tap()
        popUpTextField.typeText(textToAdd)
    }

我花了几个小时试图找到一种方法来将标识符添加到警报中的组件,但找不到任何答案。

您错过了 configurationHandler,它专门用于修改您的文本字段:

alert.addTextField(configurationHandler: { textField in
    textField.accessibilityIdentifier = "Task Text Field"
})