如何在XCTestCase中键入UITextView
如何在XCTestCase
中输入UITextView
? UITextView
是第一个响应者,因此它已经拥有焦点并且键盘已经启动。如何在XCTestCase中键入UITextView
我已经试过:
app.typeText("footer")
app.textViews.element(boundBy: 0).typeText("foobar")
app.links.element(boundBy: 0).typeText("foobar")
出于某种原因app.textViews.count
总是返回0
?
尝试设置一个唯一的accessibility identifier您UITextView
,然后:
let textView = app.textViews["uniqueId"]
XCTAssert(textView.exists, "uniqueId text view NOT FOUND")
textView.tap()
textView.typeText("foobar")
的问题不在于.typeText(_:)
不工作,这是你的查询不能解决的元素。
当您尝试查找的视图位于某种可访问的容器视图内时,它有时可能看起来像查询无法正常工作。您可以通过在容器视图中明确禁用可访问性来缓解这种情况。
将包含文本视图的堆栈视图设置为不成为可访问性元素,然后在文本视图上设置辅助功能标识符。
// app code
let stack: UIStackView!
let textView: UITextView!
stack.isAccessibilityElement = false
textView.isAccessibilityElement = true
textView.accessibilityIdentifier = "myTextView"
// test code
let app = XCUIApplication()
let textView = app.textViews["myTextView"]
textView.typeText("something")
鉴于'UIStackView'不显示任何信息或支持用户交互*本身*,为什么苹果默认情况下会使其成为可访问的元素?如果确实如此,那么这会不会导致各种可访问性问题,超出UI测试的方式,给出'UIStackView'是多么有用/受欢迎? –
最终用户的可访问性与XCTest的可访问性略有不同。我已经有了相当有趣的例子,其中表格内部的视图无法通过测试,但不能通过Voiceover ... – Oletha
好的,没有意识到这种差异......无论如何,UITableView容器与UIStackView相反,支持用户交互(滚动等),所以这不会让我感到惊讶;) –
您的文本视图在容器视图内吗?什么是视图层次结构? – Oletha
@Oletha,它在堆栈中。堆栈是最顶层的视图。 – Mystic