2017-06-02 2 views
5

Wie tippst du ein UITextView in ein XCTestCase ein? Der UITextView ist der Ersthelfer, also hatte er bereits den Fokus und die Tastatur ist hochgefahren.Wie tippe ich in ein UITextView in einem XCTestCase ein?

Ich habe versucht:

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

aus irgendeinem Grund app.textViews.count immer 0 zurückkehrt?

+0

Ist Ihre Textansicht in einer Containeransicht? Wie sieht die View-Hierarchie aus? – Oletha

+0

@Oletha, es ist in einem Stapel. Der Stapel ist die oberste Ansicht. – Mystic

Antwort

3

versuchen, ein einzigartiges accessibility identifier für Ihre UITextView und dann setzen:

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

Dies funktioniert auch nicht. Haben Sie dies in Ihrem eigenen Code funktioniert? – Mystic

+0

Was gibt es zurück 0: 'app.children (passend: .textView) .count' – Mystic

+0

@Mystic Works groß für' UITextField', so kann ich nicht sehen, warum es nicht funktioniert auch für 'UITextView'. Ich fügte ein extra * assert * hinzu, um sicher zu sein ... –

5

Das Problem ist nicht, dass .typeText(_:) nicht funktioniert, dann ist es, dass Ihre Abfrage nicht auf ein Element nicht lösen.

Es kann manchmal so aussehen, als ob die Abfrage nicht ordnungsgemäß funktioniert, wenn sich die Ansicht, die Sie suchen, in einer zugänglichen Containeransicht befindet. Sie können dies mindern, indem Sie die Barrierefreiheit in der Containeransicht explizit deaktivieren.

Legen Sie fest, dass die Stapelansicht, die die Textansicht enthält, kein Barrierefreiheitselement ist, und legen Sie dann in der Textansicht eine Eingabehilfe-ID fest.

// 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

Vorausgesetzt, dass 'UIStackView' keine Informationen anzeigt oder Benutzerinteraktion * per se * unterstützt, warum würde Apple es standardmäßig als zugreifbares Element einrichten? Wenn dies tatsächlich der Fall ist, würde dies nicht in allen Arten von Zugänglichkeitsproblemen resultieren, weit über UI-Tests hinaus, wenn man bedenkt, wie nützlich/beliebt "UIStackView" ist? –

+0

Die Zugänglichkeit für Endbenutzer funktioniert etwas anders als die Zugänglichkeit für XCTest. Ich hatte ziemlich Nischen-Beispiele, wo Ansichten in Tabellen für Tests nicht zugänglich sind, aber nicht auf Voice-Over ... – Oletha

+0

Ok, war dieser Diskrepanz nicht bewusst ... sowieso, der 'UITableView' Container, im Gegensatz zu' UIStackView', unterstützt Benutzerinteraktionen (Scrollen usw.), so würde mich das nicht so sehr überraschen;) –

Verwandte Themen