概要
この記事はWebdriverIO + Appium1.xをAppium2.xへ移行する際に最低限必要な移行作業をまとめた記事です。
前提
業務で1年ほど前からWebdriverIO + Appium + XCUITestを用いていました。
しかし、先日突如テストが実行できなくなってしまいました。
原因を調査したところ、XCodeがarm64前提になったことや、Appiumのnpmパッケージに含まれるWebDriverAgentRunnerのtagetがiOS10であり、最近のXCodeでは対応できないことが判明しました。
どうにか1.x系でテストを実行できないか模索できないか試行錯誤をしましたが、結果的に2.x系への移行を決め、移行作業を行いました。
移行作業
1. node_modulesの削除
appiumのドライバーなど依存関係をいったんリセットするためにnode_modulesを削除します。
rm -rf node_modules
2. package.jsonのappiumのアップデート
まず、package.jsonのappiumパッケージを1.xから2.xにアップデートします。
筆者の環境では
"appium": "^1.2.2"
となっていたところを、
"appium": "^2.0.1"
と変更しました。
3. npmのインストール
バージョンを上げたらnpm install
を実行し、必要なモジュールをインストールします。
4. appium-xcuitest-driverのインストール
以下のコマンドで、iOSのUIテストに必要なドライバーを追加します
appium driver install xcuitest
※driverについて
appium 2.xからdriverという概念が導入されました。
詳細は公式ページ等の解説に譲りますが、簡潔に説明すると、1.xでは全てのdriver(xcuitest, uiautomator2, chromedriver, etc...)がappiumのパッケージに含まれていたところ、2.xではコアなモジュールとdriverを分離し別個にインストールできるようになりました。これにより、ユーザは必要なモジュールのみをインストールすれば良くなり、パッケージが軽量化されるなどの恩恵を受けることができるようになりました。
5. wdio.conf.tsのcapabilitiesの修正
上記リンクの記述にもあるように、WebDriverの仕様で非標準のcapabilitiesにはvendor prefix
と呼ばれる接頭辞が必要になりました。
そのため、wdio.conf.ts
内のcapabilities
のautomationName
やplatformName
を
automationName: "XCUITest",
platformName: "iOS"
から
"appium:automationName": "XCUITest",
"appium:platformName": "iOS"
のようします。
以上で移行作業は完了です。
参考
WebdriverIO
appium
Appium XCUITest Driver