2015-09-26 12 views
16

サブビュー内の要素にアクセスしようとしていますが、不可能であることがわかりました。UIテストXCode 7-サブビュー内の要素にアクセスできない

階層ビーイング:

ビューコントローラ:

  • ビュー
    • tempView
    • userEnterView
      • zipCodeEntered

私はzipCodeEnteredテキストフィールドにアクセスしたいです。私は "zipCodeEntered"というアクセシビリティラベルを持っています。

私がしようとすると、オートメーションを記録すると、それが唯一のスーパー「userEnterView」とない私はにタップすることができ、実際のテキストフィールドを登録します。

は、私はその階層にあるかの要素を参照するために「app.otherElements [SUPER_VIEW_NAME] .debugDescription」を印刷し、それが何を印刷しません。

なぜこれらの要素にアクセスできないのか、どのようにアクセスできますか? enter image description here

+0

代わりに 'accessibilityIdentifer'を設定できますか? –

+0

Joe:あなたのUIテストのブログを広範囲に読んだことがありますが、それは私にトンを助けてくれました。私は 'accessibilityIdentifier'をzipCodeEntered textFieldに追加しましたが、まだそれを見つけることはできません。 'app.otherElements [" zipCodeEntered "]'または 'app.textFields [" zipCodeEntered "]'のいずれかを使用します。ストーリーボードレイアウトの画像を追加 – sebradloff

+0

おかげさまで、喜んで助けてくれました!あなたは、その場所のテキスト、 "郵便番号"によって要素にアクセスしようとしましたか? –

答えて

21

親ビューがコンテナビューではないため、サブビューにアクセスできません。アクセシビリティプログラミングガイドからセクションMaking Your iOS App Accessibleから:

、アクセシビリティの観点から、カスタムビューは、個々のビューまたはコンテナビューのいずれかです。個々のビューには、アクセス可能でなければならない他のビューは含まれません。

コンテナビューは、一方で、ユーザが相互作用可能な他の要素を含みます。

親ビューのサブビューにアクセスできるようにするには、それは-isAccessibilityElementからNOを返すとUIAccessibilityContainerプロトコルのメソッドを実装することにより、アクセシビリティのコンテナであることをUIAccessibilityを教えてください。

+4

ありがとう!それがまさに問題でした。これを達成するには2つの方法があります。 1)私が持っていたすべてのビュー要素に対するアクセシビリティのチェックを外します。 2)プログラムでは、ビューコントローラで、特定のビューコンセントを使用して 'viewOutletVariable.isAccessibilityElement = false'を書き込みます。 – sebradloff

+0

この回答は、基本的に私の吸入器の役割を果たしました。 – rambossa

+0

UIAccessibilityContainerは、UIKit以外の要素を含むビューのみに適用されます。たとえば、UILabelやUIImageViewではなく、drawAtPointを使って手動でテキストや画像を描画します。 @Jonathan。 –

-2

私のUITableViewでもこの問題が発生しました。私のセルには、サブビュー(TextView、UIButton ...)を持つcontainerView(UIView)とそのセルを持つcollectionViewがあります。

私は受け入れ答えを試してみましたが、それはうまくいきませんでした。(UIレコーダやマニュアルコードは私のサブ要素を認識しませんでした)。しかし時には私はテーブルをリフレッシュするために何かをトリガしたときにUITestが私のサブ要素を突然認識したことが分かりました。

今私は、UITestが私のサブビューを見つけることができない場合、私はtableView.reloadDataを呼び出してビューを更新し、その後すべての問題が解消されたことを知っています。

とにかく、これは単なる回避策です。アップルができるだけ早くそれを修正できることを願っています。

+0

XCUIでtableView.reloadDataをどのように呼び出すのですか? –

+0

この答えは質問には全く関係がありません。コードとスクリーンショットには、 'UITableView'が全く含まれていないことが示されています。 –