PIYO - Tech & Life -

iOS用UIテストフレームワークKIFで色々な要素をタップさせる方法

KIF Test iOS

この間のポストでKIFでフレームワークの導入方法と簡単な使い方について書いたけど、そこからさらに使ってみてもうちょっと使い方がわかったのでそれを書いてみます。

その前に先日の記事。

XCode5対応!KIFでiPhoneアプリの受け入れ(統合)テスト - ぴよログ

[https://blog.piyo.tech/posts/2013-12-11-070003:image:large]

AccessibilityLabelは必ずしも必要ではない

先日の記事で、テストでタップしたり有無を確認したりするためのUI要素にはAccessibilityLabelを設定する必要があると書きましたが、どうやらそうではないようです。というか、Storyboard上でAccessibilityLabelを設定できない要素もたくさんあります。

AccessibilityLabelが必要なケース

いくつか確認した中では

  • UILabel
  • UIButton
  • UITextField

などの要素はAccessibilityLabelの設定が必要でした。察するに開発者が配置する要素にはAccessibilityLabelが必要なのだと思われます。

AccessibilityLabelが要らないケース

storyboardでAccessibilityLabelを設定できない要素もたくさんあります。たとえばTabBarControllerのTabBarItemや、NavigationControllerにEmbedしたViewControllerのタイトル、UIAlertViewのボタンなどもそれにあたります。

  • タブ
  • Navigationの戻るボタン
  • UIAlertViewのボタン
  • UIActionSheetのボタン

などなど。他にもあると思いますが確認できたのはこのあたりです。要素によってはソースコードからAccessibilityLabelを設定できる風にみえることもありますが、KIFフレームワークから使うことはできませんでした(そんなAccessibilityLabelを持った要素はない、という例外が飛ぶ)。

こういった要素をタップさせるまとまった情報がなく困っていましたが、すごく単純な解決法がありました。それは、要素のテキストがAccessibilityLabelになっているということを利用します。つまり、KIFのに渡すAccessibilityLabelとして表示されているままのテキストを渡してあげればいいらしいです。

お気に入りタブをタップさせたいなら

[tester tapViewWithAccessibilityLabel:@"お気に入り"];

とやれば良いです。日本語もいけます。

同様にUIActionSheetを使ってユーザーに選択肢を与えたい場合も、次のようなやり方でタップさせることが可能です。

[tester tapViewWithAccessibilityLabel:@"選択肢1"];
[tester tapViewWithAccessibilityLabel:@"Do something"];

実例!

ソースはGitHubにおいてあります。

https://github.com/pi-chan/KIFExample

前のサンプルを進化させてこんな遷移を持たせました。

画面遷移

この遷移をテストするために2つのテストメソッドを用意し、いろいろ詰め込んでみました。この内容でどちらもパスします。