XCUITestを触ってみて

Xcode7から利用できるようになったXCUITestを触ってみたのでメモ。

第一印象

  • swiftでテストを書けるのは予想以上にいい

swiftのテストをswiftで書ける。実装とテストの境がより低くなる。やってみて初めて気づいたことだが、これは気分的に非常によい。ずっとswiftモードだから高い集中力を長く維持できる。ゾーンに入りっぱなし。

  • 最初のとっかかりはレコーディングが助けてくれる

すぐ慣れてサクサク書けるようになるが、それでもどのようにテストを書けばいいかわからない操作も時々出てくる。そのようなときはレコーディングすればすぐその操作のコードを生成できる。ただ、ジェスチャーによってはレコーディングされないので、テストするには工夫が必要になる場合もある。レコーディングでXcodeがしばしば落ちるのはどうにかならないものか。

  • すべてのUIオブジェクトを扱えるわけではない

XCUIElementTypeではないUIオブジェクトはどうも扱えない模様。例えばUIControlとか。Storyboard/IB/コードでAccessibilityIdentifierを指定していても取得できない。UIControlでグルーピングしてまとめて操作することもあるのにテストでは同じようにできないというのは少し厄介。

小ネタ

  • secure text field に入力できない

パスワード入れると ****** のようにマスクされるアレ。typeText()で入力できない。どうもバグらしく(or未対応)、現時点ではこんな感じにクリップボードからペーストという方法で解決するしかない。なんとも強引。


  • text fieldに入力できない、ことがある

複数のテキストフィールドがあると発生するとか、Xcode7beta4の頃から発生するようになったとかいう情報もある。どちらにしてもsecure text fieldのときと同じ方法で回避。

Neither element nor any descendant has keyboard... | Apple Developer Forums

  • ピンチインは動作するが、ピンチアウトが動作しない


How to pinch open

は動作するが、


How to pinch close

は動作しない。

  • po app.debugDescription が大活躍

画面に表示される要素の名称や正確な文字列などを調べるときに
po app.debugDescription が大活躍する。

位置づけ

全体的には好意的な印象を持った。Xcodeに含まれているのですぐ使い始めることができるし、使いやすい。
ただ、単純な不具合?がまだまだ多いので、そのあたりの品質が上がってくればいいのだが。

E2Eテスト自動化は完全(カバレッジ)を求めるとどうしても破綻しやすいので、ユニットテストと合わせて、コスパのいい範囲内で積極的に使っていきたい。
手動テストの削減、デグレの早期発見、仕様の明確化、などメリットは多いはず。今後のAppleに期待。