2016-04-02 12 views
2

私はXOSを使ってiOSアプリケーションを構築しています。私は現在、ちょうど昨年追加されたframeworkを使ってUIテストを定義しています。私の質問は私のどのような方法があり、あるiOS開発 - すべてのUIオブジェクトにアクセシビリティラベル/識別子があることを確認しますか?

genderSegmentedControl.accessibilityLabel = "genderSegmentedControl"; 

:私は例のテストでは:として

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

文字列「genderSegementedControl」は、対応するビューコントローラで私によって定義されたアクセシビリティラベルですすべての私のUIオブジェクトをチェックしてアクセシビリティラベルを割り当てていることを確認するスクリプトを書いていますか? Xcodeで私が使っているストーリーボードの内部を見ることができる場所を見つけることができないようです。すべてのオブジェクトを配列でき、その配列をループして、.accessibilityLabelまたはをアサートすると、私は大好きです。 accessibilityIdentifierプロパティはnilではありません。

実際にすべてのUIコンポーネントがテストに含まれていることを確認できるようにします。

+0

これは本格的なソリューションではありませんが、私はそれが正しい道にあなたを設定するかもしれないと思う:accessibilityLabelaccessibilityIdentifierの両方が不足しているコントローラのビュー自体) a/32105765/4475605 – Adrian

答えて

0

ストーリーボードに配置できる可視要素はすべてUIViewのサブクラスであるため、UIオブジェクトはおそらくサブビューを意味します。

この場合、ViewControllerのビューのサブビューをにしたいとします。ただし、これを行うと、ネストされたUIViewではなく、最初のレベルのUIViewだけが返されます。したがって、this answerが示唆するように、再帰アルゴリズムを使用する必要があります。

この関数は、再帰的に、このコードが書き込まれていることのViewControllerの子孫であるすべてのUIViewのをループする必要がありますビューを含む任意のUIViewsは(存在する場合

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 
} 

今すぐ次の関数を呼び出すと、falseを返す必要があります - > http://stackoverflow.com/

checkSubviews(self.view) 
関連する問題