2017-06-02 37 views
5

如何在XCTestCase中输入UITextViewUITextView是第一个响应者,因此它已经拥有焦点并且键盘已经启动。如何在XCTestCase中键入UITextView

我已经试过:

app.typeText("footer") 
app.textViews.element(boundBy: 0).typeText("foobar") 
app.links.element(boundBy: 0).typeText("foobar") 

出于某种原因app.textViews.count总是返回0

+0

您的文本视图在容器视图内吗?什么是视图层次结构? – Oletha

+0

@Oletha,它在堆栈中。堆栈是最顶层的视图。 – Mystic

回答

3

尝试设置一个唯一的accessibility identifierUITextView,然后:

let textView = app.textViews["uniqueId"] 
XCTAssert(textView.exists, "uniqueId text view NOT FOUND") 
textView.tap() 
textView.typeText("foobar") 
+0

这也不起作用。你有自己的代码工作吗? – Mystic

+0

更重要的是这返回0:'app.children(matching:.textView).count' – Mystic

+0

@Mystic对于'UITextField'非常适用,所以我不明白为什么它也不适用于'UITextView'。我添加了一个额外的*断言*只是为了安全... –

5

的问题不在于.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") 
+0

鉴于'UIStackView'不显示任何信息或支持用户交互*本身*,为什么苹果默认情况下会使其成为可访问的元素?如果确实如此,那么这会不会导致各种可访问性问题,超出UI测试的方式,给出'UIStackView'是多么有用/受欢迎? –

+0

最终用户的可访问性与XCTest的可访问性略有不同。我已经有了相当有趣的例子,其中表格内部的视图无法通过测试,但不能通过Voiceover ... – Oletha

+0

好的,没有意识到这种差异......无论如何,UITableView容器与UIStackView相反,支持用户交互(滚动等),所以这不会让我感到惊讶;) –

相关问题