ソフトウェアテストブログ

iOSテスト自動化~アプリを起動したままアプリとブラウザの操作を交互に行う方法

iOSテスト自動化~アプリを起動したままアプリとブラウザの操作を交互に行う方法

2025年08月25日 16:57

 アプリのテストを行う際、テスト手順によってはアプリだけでなく、ブラウザや他のアプリの操作を1つのテストの中で行うことがあると思います。


例えば、設定で「機内モード」にしたあとにテスト対象のアプリを操作したり、アプリ内のデータをブラウザから変更してからアプリに戻って値を再度確認するなどの手順です。

そのような場合、GUIの自動化ツールでは制限があるものが多いかと思いますが、自由度の高い
appiumseleniumを使用すれば一連の操作を実現することができます。


ここではテスト手順を作成する上でのポイントと工夫した点についてお話しします。




まず最初に、アプリを停止(またはログアウト)せずに、バックグラウンドに置いておく方法ですが、一般的には「background_app」というメソッドを使用することで再現可能です。


#
# driver.background_app(seconds)
#
# ※secondsの部分にはバックグラウンドにしておく秒数を指定する。
# 「-1」を指定した場合には再度呼び出すまでずっとバックグラウンド状態のままになります。

しかし、これを使用して実際に動作させてみると全く安定しなかったです。

その代わりに行った方法は、ホーム画面に戻すメソッドを使用するという事です。

具体的な記載方法は下記です。


# driver.execute_script('mobile: pressButton', { name: 'home' })

このように一度ホーム画面に戻ることで、実際にはバックグラウンドに置いておく事と同じ状況になります。さらに、上記の記載にすることで安定し、何度実行しても途中で落ちることがなくなりました。

そもそもappiumの実行時に設定で対象アプリを起動するように「appPackage」を指定する方法が多く用いられていると思います。


# deviceName: 'iPhone',
# udid: "×××××××××",
# platformName: 'ios',
# automationName: 'XCUITest',
# platformVersion: '18.6',
# appPackage: 'ここに対象のアプリパッケージ名',

このようにしてしまうと、対象のアプリを中心に動作させることになるため、「appPackage」部分は記載せず、appiumサーバーのみを起動することもポイントです。


その上で、対象のアプリを開きたい場合はアプリ名をタップして開くようにします。

IDが付いている場合はIDで指定したり、IDがない場合は下記のようにアプリ名だけでタップすることができるはずです。


# driver.find_element(:name, "アプリ名").click

次に、ブラウザの動作を行うseleniumの操作とappiumの操作を交互に実行する方法ですが、MacOS上でselenium用の実行フォルダとappium用の実行フォルダを別々に作成し、実行する前にそれぞれのフォルダに切り替えることで可能となります。


PowerShellスクリプトファイルの場合
※それぞれのフォルダを定義し、実行時にそれぞれ「Set-Location」で指定します。


# スクリプトフォルダ例(iOS)
# $test_script_folder_ios="/Users/user_name/sample/ios_apps"
#

# スクリプトフォルダ例(chrome)
# $test_script_folder_chrome="/Users/user_name/sample/chrome_browser"
#

# iOSで実行する部分
# Set-Location $test_script_folder_ios
# ###この後に実行テストコマンドを記載####

# ブラウザで実行する部分
# Set-Location $test_script_folder_chrome
# ###この後に実行テストコマンドを記載####


以上のポイントでアプリからログアウトせずに別アプリやブラウザを操作し、再度対象アプリを操作することができるようになりました。


手順が複雑なテストも、やり方次第で自動化することができます。