Xcode UI 测试无法编辑多个 UITextFields

Posted

技术标签:

【中文标题】Xcode UI 测试无法编辑多个 UITextFields【英文标题】:Xcode UI test fails to edit multiple UITextFields 【发布时间】:2021-08-10 15:24:20 【问题描述】:

我有一个包含多个 UITextFields 的 UI,我想通过清除它们的内容并输入新值来测试它们。但是,在 UI 测试中只能更改 first 字段;后续字段可以清除(如果启用了清除按钮),但不能输入(使用XCUIElement.typeText()),因为测试Failed to synthesize event: Neither element nor any descendant has keyboard focus.如何编辑多个文本字段给定的 UI 测试函数?

我在几个不同的 UI 测试问题中遵循了建议:

Xcode UI Testing How to type text into custom class text fields UI Test deleting text in text field UI Testing Multiple UITextFields - 在其中一个字段中禁用了辅助功能

用户界面:

ViewController:

class ViewController: UIViewController 

    @IBOutlet weak var field1: UITextField!
    @IBOutlet weak var field2: UITextField!

    @IBAction func submit(_ sender: Any) 
        let actionVC = UIAlertController(title: "You did it!",
                                         message: "\(field1.text ?? ""), \(field2.text ?? "")",
                                         preferredStyle: .alert)
        actionVC.addAction(UIAlertAction(title: "Awesome!", style: .default, handler: nil))
        present(actionVC, animated: true, completion: nil)
    


测试:

class TextFieldTesterUITests: XCTestCase 

    func testReplaceTextInMultipleTextFields() throws 
        let app = XCUIApplication()
        app.launch()

        let field1TextField = app.textFields["Field 1"]
        field1TextField.tap()
        app.buttons["Clear text"].tap()
        field1TextField.typeText("Oh")

        let field2TextField = app.textFields["Field 2"]
        field2TextField.tap()
        app.buttons["Clear text"].tap() // <-- 
        field2TextField.typeText("Susanna")

        app.staticTexts["Button"].tap()

        app.alerts["You did it!"].scrollViews.otherElements.buttons["Awesome!"].tap()
    


错误:

I've posted this demonstration on GitHub.

【问题讨论】:

嗨,我在 ios 14.0.1 iPhone 和 iOS 14.3 模拟器上运行了你的 GitHub 演示。在这两种情况下,UI 测试都完美地成功了。会不会是 iOS 14.5 的问题? 您说的很对——它在 iOS 15.0 模拟器上的 Xcode 13 beta 4 中按预期工作。我想知道是否值得提交错误报告,因为发生在当前发布的版本中。 【参考方案1】:

正如@Thisura Dodangoda 指出的那样,此代码在 iOS 14.0.1 和 14.3 上正确运行,并且我确认它在 15.0 beta 模拟器上正确运行。这似乎只在 iOS 14.5 上存在问题,并且可能在 14.3 和 15.0 之间的其他版本上存在。

【讨论】:

以上是关于Xcode UI 测试无法编辑多个 UITextFields的主要内容,如果未能解决你的问题,请参考以下文章

Xcode UI 测试发现多个按钮

如何检查是不是在 Xcode UI 测试中创建了新场景?

当存在多个测试类时,Xcode iOS UI 测试使用 SIGABRT 崩溃

Xcode 7 UI 测试目标语言环境和区域设置

无法在 Xcode UI 测试中点击 UIBarButtonItem

运行 UI 测试时,Fastlane 扫描“无法合成事件”,适用于 Xcode