Xcode UI 测试无法编辑多个 UITextFields
Posted
技术标签:
【中文标题】Xcode UI 测试无法编辑多个 UITextFields【英文标题】:Xcode UI test fails to edit multiple UITextFields 【发布时间】:2021-08-10 15:24:20 【问题描述】:我有一个包含多个 UITextField
s 的 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 iOS UI 测试使用 SIGABRT 崩溃