2016-04-02 3 views
2

Ich benutze XCode um eine iOS App zu erstellen. Ich bin gerade dabei, UI-Tests mit der framework, die erst letztes Jahr hinzugefügt wurde, zu definieren. In einem Beispiel Test habe ich:iOS-Entwicklung - überprüfen, dass alle UI-Objekte Barrierefreiheit Label/Bezeichner haben?

XCUIApplication().segmentedControls["genderSegmentedControl"].buttons["Girl"]; 

Die Zeichenfolge „genderSegementedControl“ ist ein von mir definiert Zugänglichkeit Etikett in seinem entsprechenden View-Controller wie:

genderSegmentedControl.accessibilityLabel = "genderSegmentedControl"; 

Meine Frage ist, gibt es eine Möglichkeit, von mir ein Skript schreiben, das alle meine UI-Objekte überprüfen und überprüfen würde, ob sie ein Accessibility-Label zugewiesen haben? Ich kann nicht finden, wo ich in Xcode die Interna des Storyboards, das ich verwende, sehen kann. Ich würde lieben, wenn ich Array aller meiner Objekte bekommen könnte, und Schleife durch das Array und behaupten, dass die .accessibilityLabel oder. accessibilityIdentifier Eigenschaft ist nicht null.

Ich möchte dies, damit ich überprüfen kann, dass ich tatsächlich alle meine UI-Komponenten in einem Test enthalten haben. (Eine Art von Code-Abdeckung, wenn Sie das tun.)

+0

Dies ist nicht eine ausgewachsene Lösung, aber ich denke, es könnte man auf dem richtigen Weg -> http://stackoverflow.com/ a/32105765/4475605 – Adrian

Antwort

0

Mit UI-Objekte, meinen Sie wahrscheinlich Subviews, wie jedes sichtbare Element, das in einem Storyboard platziert werden kann, eine Unterklasse von UIView ist.

In diesem Fall möchten Sie die Subviews des ViewControllers View erhalten. Dadurch wird jedoch nur die erste Ebene von UIViews zurückgegeben, keine verschachtelten. Daher sollten Sie, wie this answer vorschlägt, einen rekursiven Algorithmus verwenden.

Diese Funktion sollte durch jede UIView rekursiv Schleife, die ein Nachkomme des Viewcontroller ist, dass dieser Code geschrieben ist:

func checkSubviews(view: UIView) -> Bool { 
    if view.accessibilityLabel == nil && view.accessibilityIdentifier == nil { 
     return false 
    } 
    for subview in view.subviews { 
     if !checkSubviews(view) { 
      return false 
     } 
    } 
    return true 
} 

nun die folgende Funktion aufrufen false zurückgeben sollte, wenn es irgendwelche UIViews sind (die Ansicht, einschließlich Controller Sicht selbst), die sowohl eine accessibilityLabel fehlt und eine accessibilityIdentifier:

checkSubviews(self.view) 
Verwandte Themen