TypingのWindowsデスクトップ版以外の更新をやっているのだが、テストが2300件くらいあって、さすがにテストが大変。ことでUIテストの自動化を本格的に調査。1週間くらいかかってようやく見えてきたのでメモ。ちなみにAndroid/UWP/WPFは実験成功して、Mac/iOSはまだ試せていない。UIテストはいろいろな方法があると思うけど、マルチプラットフォーム対応だとAppiumがよさそう。Appiumは、WebのUIテスト自動化Seleniumと同様の方法でモバイルアプリのテストをするフレームワーク。サーバクライアントになっていて、クライアントでテストコードを書くと、サーバにJSON形式のコマンドを投げて、サーバからアプリのUIに向かってキーボードやマウスのイベントを投げてくれる。Driverを使えばWindowsのWPFやUWPもテストができる。クライアントについては、Pythonなどでやるのが普通かもしれないけど、Appium.WebDriverを使えばでC#で開発が可能。Driverを起動すればWPF/UWPのテストが可能ということ。一工夫いるが、Xamarin.Formsのアプリもテスト可能である。Appiumのインストールここは普通にAppiumとAppium-doctorをインストール。Pythonとかnodeとかそのあたり。Appium-doctorを通すためにいろいろインストールする必要がある。found」になるので環境変数「PATHEXT」に「.JAR」を追加する。これ1日はまったけどappium-doctorのソースまで見てようやく分かった。Driverのインストール普通にインストール。StudioでUnitTestプロジェクトを作り、NuGetからインストールした。思うけど・・・別にコンソールアプリでもいいのだが、テストケースの管理とかでUnitTestがいいかな、ってくらいUI部品にIDを振るテストの時にUI部品を特定するため、それぞれIDを振る。IDしか使えないよね。ことでXamarinのXAMLで、ButtonとかにAutomationId=”hoge”を入れる。よければ話は簡単なんだけど、Android、UWPはうまくいったがWPFはダメだった。Xamarinのソースを見る限りWPFではViewRendererでSetAutomationIdをやっていないみたい。IDに対応する属性を設定するようにしてみた。感じだけど、これ以外にうまい方法は思い浮かばない。プラットフォーム共通。}次に各プラットフォーム用のEffect。}}XAMLではEffectを付ける。WidthRequest="100"/>テストケースの作成C#ではこんな感じ。各プラットフォームのセッションを作って、共通のテストを実行するようにしてみた。静止画じゃ分からないけど、勝手に文字が入力されてボタンが押される。ことで、単純なUIのテストはこれで自動化できるかな。UIが崩れるとか、なんか変、っていうバグの方が多いんだけど、画面遷移とかはこれで自動化して、人が見ないと分からないようなテストにリソースを集中できれば成功かな。試してないけど問題文章も自動で打てるのだろうか。すると不正ツールを作れてしまうかも。打ち込み速度が遅いからよさそうだけど、設定ができたりすると厄介。