XCode9でのFastlane/Snapshotの実行
頑張ってたけど動かなくなったので一部解決したことと解決していないことのまとめ
snapshotって
https://github.com/fastlane/fastlane/tree/master/snapshot
これですね
fastlaneのツール群の一つでアプリのスクショを自動で取ってくれてhtml化して一覧で見れるようにしてくれます。
XCode7からはXCUITestが追加されたことでそれを使ってスクショを取っています。
こちらの記事が導入の参考になります
https://qiita.com/tamaki/items/f5e9f9985a91fb6a0f06
XCode9
2017年の9月にでました。
UITest周りにいくつか修正が入っています
詳しくはこちら
http://shashikantjagtap.net/hands-xcuitest-features-xcode-9/
その影響?でせっかく作った俺のUITestが動かなくなった!!!!
snapshot実行すると最後のhtml化するとこでこける
XCode9からXCodeが自動で取ったスクショをテスト終了後に破棄するかどうかを選択できるようになります。
デフォルトで破棄になっています。
XCUITestを使ったスクショはXCode9から明示的にスクショを取るメソッドが用意されましたがそれまではXCodeがよしななタイミングでスクショを取っていました。
fastlane/snapshotでは画面の向きに.unknownを突っ込み強制的にスクショを撮らせるなかなかトリッキーなことをしてました
実際に撮らせていたのはこのコード
XCUIDevice.sharedDevice().orientation = .Unknown
画面の向きが変わる時にスクショを取る法則を逆手に取ったコードですね
このコードを呼ぶ直前に
snapshot:\(画像名)
というテキストを出力していましたのでスクリプトでsnapshot:を探してその直後の画像をhtmlにするみたいな仕組みだと思います。
話は戻りますがなので結局のところsnapshotを実行して取った画像もXCodeが自動で取ったスクショの一部なのでテスト実行後に削除されてsanpshotのスクリプトで失敗するという具合です。
プロジェクトのEdit Scheme>Test>Optionsに
こんな感じでチェック項目があるのでDelete when each test succeedsのチェックを外しましょう
またその上のCapture srrenshots automaticallyのチェックを外すとそれはそれでテストが失敗します。
Fastlaneのissueにもこの対応が載ってました
Fastlane/Snapshotが一刻も早く純正のsnapshotメソッドの成果物を使うように修正することを願ってます
Viewの裏にあるボタン(Cell)はタップできない
僕の扱っているアプリでは一部部分だけ透過したViewがTableViewにかかっているレイアウト担っています。
透過部分は下にあるTableViewのセルをタップすることができます。
UITestのレコーディング機能を使ってる時はタップできます。
しかしいざUITestを実施するとタップすることができずクラッシュします。
XCode8ではこの動作が可能だったのでなにかViewの構造解析で手が加わったのかと思います。
回避策としては一度スクロールしてViewと被らない位置までタップしたいCellを移動させてからTap()すると正常に動作しました。
iPhone2017-A~Cというsimulatorが生まれる
sanpshot reset_simulators
sanpshot reset_simulators
コマンドを実行すると
iPhone2017-A,-B,-Cという名前のsimulatorがいつのまにか作られます
fastlaneにissueが過去挙げられてました
https://github.com/fastlane/fastlane/issues/10354
reset_simulatorsコマンドは実行するとシミュレーターのリセットをした後デフォルトのシミュレーターリストにあるものの再生成を行いますがそこにその名前でそれぞれ
iPhone2017-A -> iPhone8
iPhone2017-B -> iPhone8 Plus
iPhone2017-C -> iPhoneX
で載ってるみたいです。なのでそこの名前が変わらないことにはこのままみたい
fastlaneのissueでは「それが一体何が問題なんだい?」的なスタンスで締めくくられてissueがクローズされてましたんでしばらくこのままみたい
TabBar,ToolBarのボタンをtap()しても遷移しないことがある(未解決)
これがクッソむかつくのと頭を悩ませています。
2回に一回くらいでコレ起因でクラッシュしています。
要素がないのかと思ってブレイクポイントをうって確認するとボタンは存在しているタップも実行されているなのに画面遷移しない・・・・
しかもだいたいブレイクポイントを打っている時は正常に動くという
遅延しているだけかと思いsleepを入れても変わらず....泣きそう....
もし同様の動作になったことがある方で対応策を見つけた方がいればコメントくださいorz
あとがき
UITest最近ちょっと力入れてやって見てますが奥が深い
アプリのUITestは探り探りな部分がまだまだ多いですね....
継続的な運用をどうすればいいのか、いい設計はこれだというものを知っている方が入ればぜひコメント等で教えてください
UITestでなく、ユニットテストについても色々教えてくださいmm
Author And Source
この問題について(XCode9でのFastlane/Snapshotの実行), 我々は、より多くの情報をここで見つけました https://qiita.com/HirotoshiKawauchi/items/ffd2cf5a6790f8afee44著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .