モバイルコントロールとタッチイベン ト
Eggplant Functionalは、以下で説明するように、モバイルデバイスをテスト対象システム(SUT) として使用する場合に特化した多くのコマンドと機能を提供します。さまざまなモバイルデバイスでサポートされているSenseTalkコマンド、関数、およびtypetextキーワードの概要については、Mobileコマンドおよびモバイルデバイスタイプ別を参照してください。
さまざまなモバイル デバイスでサポートされている SenseTalk コマンド、関数、および typetext キーワードの概要については、モバイル デバイス タイプ別のモバイル コマンドと関数 を参照してください。
ADBCallRemote
関数
この関数はSauce Labsではサポートされていません。
Behavior: この関数はADBコールを利用可能なAndroidデバイスに実行し、ADBコマンドから受け取った出力を返します。 ADBCallRemote
関数はAndroid Gatewayを介した接続を必要とし、Eggplantマシンにリモートで接続されたAndroidデバイスと連携できます。
Parameters: Android Debug Bridge(ADB)コマンドラインツールへの任意の呼び出し、push
、pull
、shell
、logcat
など、関連パラメータを伴うか伴わないかで使用できます。
例:
put ADBCallRemote("devices") into ListOfDevices -- adb devicesコマンドの出力を変数に格納します。
例:
put ADBCallRemote("shell input keyevent 82") -- デバイスにkeyevent 82を送信します。
例:
put the second word of the connectionInfo's serverID into Device -- adbのシリアル番号を変数に格納します
delete "(" from Device -- adbcall()関数で使用できるようにシリアル番号から括弧を削除します
delete ")" from Device
put ADBCallRemote (merge ("-s [[Device]] logcat -b events")) -- merge関数を使用してシリアル番号をadbコマンド文字列に置き換えます
ADBCall
関数は、Eggplant Functional 20.2からADBCallRemote
関数の代替として非推奨となりました。
Copy File
コマンド
Behavior: このコマンドを使用すると、ローカル マシンからSUTへのファイル、またはSUTからローカルマシンへのファイルをコピーできます。パスの前に SUT:
を付けてSUTを示します。このコマンドを使用してS示すことに注意してください。SUTの一つの場所から別の場所、または別のSUTへのファイルをコピーするためにはこのコマンドを使用できません。Copy File
は単一のファイルのみに対応しており、フォルダは対応していません。
Parameters: ソースファイルパスと宛先ファイルパス。
例
copy file "/local/path/to/file" to "SUT:/remote/path/to/file" // ファイルをSUTに送信します
例:
copy file "SUT:/remote/requested/file" to "/local/path/to/receive/file" // SUTからファイルを取得します
DoubleTap
コマンド
Behavior: このコマンドは、現在の場所またはパラメータで指定された場所でダブルタップを実行します。このコマンドは、DoubleClick commandと同等ですが、モバイルデバイス向けに提供されています。一般的に、モバイルデバイスではダブルタップ操作によりアプリがズームします。
例:
DoubleTap the remotescreensize/2-- 画面の中央にdoubletapコマンドを送信します
例
WaitFor5, "FullsizeMap"
DoubleTap"BuildingIcon"-- BuildingIconイメージの位置にdoubletapコマンドを送信します
WaitFor5, "ZoomedMap"
Parameters: オプションとして座標、画像、またはテキスト(OCR)。
Behavior: このコマンドは、現在の場所またはパラメータで指定された場所でダブルタップを実行します。このコマンドは、モバイルデバイス向けに提供されたDoubleClick commandと同等です。一般的に、モバイルデバイスでは、ダブルタップ操作によりアプリがズームします。
DoubleTap
コマンドにおけるタップイベント間のタイミングは、MouseDoubleClickDelay
プロパティによって制御されます。MouseDoubleClickDelay
を大幅に延長すると、DoubleTap
は2つの別々のタップのように振る舞います:
set the mousedoubleclickdelay to 1-- タップイベント間の遅延を1秒に設定
doubletap "MapMarker"-- MapMarkerイメージを1回タップし、1秒待ってから再度MapMarkerイメージをタップします
ExecuteRemoteCommand
コマンドと関数
Behavior: ExecuteRemoteCommand
コマンドと関数は、モバイルデバイスであるSUTでコマンドを実行するためのものです。データの返却を選択することも、選択しないこともできます。コマンドは同期(レスポンスを待つ)または非同期(待たない)のどちらか です。それがコマンドを実行する方法は、モバイルのオペレーティングシステムによって異なります:
- Androidでは、
ExecuteRemoteCommand
は実際の電話でシェルコマンドとして実行されます。 - iOSでは、
ExecuteRemoteCommand
はJavaScriptとしてコマンドを実行し、Apple UIAutomation APIに呼び出しを行います。
Parameters: モバイルデバイスSUTで実行したいコマンド。
例:
ExecuteRemoteCommand("mkdir /data/local/tmp/TestDir") --Androidでシェルコマンドの構文を使用してデバイスにディレクトリを作成します
例:
put ExecuteRemoteCommand ("ls /data/local/tmp/; echo hello", waitfor: 20) -- セミコロンで区切って複数のコマンドを渡し、コマンドの結果を返します
InstallApp
コマンド
**Behavior:**このコマンドは、モバイルデバイスにアプリをインストールします。インストールするアプリは、applicationPath
パラメーターで指定します。必要に応じて、このコマンドは、provisionPath
プロパティと certificateName
プロパティを含める場合に、アプリをインストールする前に開発者に署名するように iOS Gateway に指示します。インストールするアプリケーションは、Eggplant Functionalを実行しているマシン上にある場合は、ローカルパスで指定できます。また、パスの SUT:
プレフィックスを使用して、iOS Gateway を実行している マシンに既に存在するアプリをインストールすることもできます。このコマンドは、完了したメッセージをサーバーから受信するまで待機してから続行します。
certificateName
プロパティの署名証明書は、InstallApp
で使用する前に iOS Gateway マシンにインストールする必要があります。
Parameters: applicationPath
は常に必要です。iOSの場合、開発用にアプリをコード署名する場合(developer sign
とも呼ばれます)は、provisionPath
とcertificateName
がオプションフィールドです。
例:
installApp "/Path/to/App/AppName.ipa"
例:
installApp {applicationPath:"/Path/to/App/AppName.apk"}
例:
installApp {applicationPath:"/Path/to/App/AppName.ipa", provisionPath:"sut:/Path/to/Provisioning/Profile/YourProvisioningProfile.mobileprovision", certificateName:"あなたのiPhone Developer証明書の名前"}
KillApp
コマンド
Behavior: KillApp
コマンドは、指定したアプリを終了します。
Parameters: 終了させたいアプリの名前:
-
iOSでは、アプリ名はアプリの名前またはバンドルIDです。
-
Androidでは、アプリ名は
パッケージ名
です。
例:
KillApp "Podcasts" -- iOS 9および10のPodcastsアプリを終了します
例:
KillApp "com.apple.camera" -- iOS 9および10のCameraアプリを終了します
例:
KillApp "com.google.android.apps.maps" -- AndroidのMapsアプリを終了します
-
Androidデバイス上でアプリパッケージ名を見 つけるには、次のように
ExecuteRemoteCommand
コマンドと一緒にパッケージマネージャのpm list packages
コマンドを使用できます:put ExecuteRemoteCommand("pm list packages", WaitFor:10)
-
iOS 8では、特定のアプリをこのコマンドで終了できません。
-
このコマンドの使用についての詳細情報は、iOSテストでの共通の問題を解決するページのアプリの終了を参照してください。
LaunchApp
コマンド
Behavior: このコマンドは、モバイルデバイスにアプリを起動します。
Parameters: 起動したいアプリの名前:
- iOSでは、アプリ名はアプリの名前またはバンドルIDです。
- Androidでは、アプリ名は
パッケージ名
です。
例:
LaunchApp "Springboard"
例:
LaunchApp "com.apple.camera"
例:
LaunchApp "com.google.android.apps.maps"
Androidデバイス上でアプリパッケージ名を見つけるには、次のようにExecuteRemoteCommand
コマンドと一緒にパッケージマネージャのpm list packages
コマンドを使用できます:
put ExecuteRemoteCommand("pm list packages", WaitFor:10)
PinchIn
コマンド
このコマンドは、Eggplant Functional Mobile Connection タイプを通じて Android および iOS で部分的にサポートされています。SauceLabs ではサポートされていません。
Behavior: PinchIn
コマンドは、画面上で2点間のピンチのように動作し、ピンチインの効果はズームアウト(つまり、画面のイメージが実質的に小さくなる)です。PinchIn
コマンドでは、At
点は静的または"固定"であり、From
点はAt
点に向かって移動します。パラメータが含まれていない場合、pinchIn
は画面の中心で2秒間の持続時間と4.5%のピンチ量で発生します。
すべての画面ビューやアプリがズームインやアウトの動作をサポートしているわけではありません。たとえば、デバイスがホーム画面にあるときにピンチコマンドを使用しても効果はありません。
距離はピクセルで表されるため、距離プロパティの動作は、解像度が異なるデバイス間で一貫性がありません。さまざまなデバイスで距離プロパティを使用する場合は、距離を実際の画面サイズに相対的に設定します。例えば:
PinchIn {Distance:the width of the RemoteScreenSize*0.25} -- 画面の幅の四分の一に距離を設定します
Parameters: 任意の At
ポイント、座標のセットまたは画像で表現される(デフォルトは画面の中心); 任意の To
ポイント、座標のセットまたは画像で表現される; 任意の Duration
で、ズームが実行する時間を表現する(デフォルトは2秒); 任意の Distance
、ピクセルで表現され、To
パラメータの代わりに使用される。Distance
と To
のどちらも指定されていない場合、デフォルトの距離は最短の画面寸法の25%です。
例:
PinchIn {At:"UNITEDSTATES_LEFT", From:"UNITEDSTATES_RIGHT"} -- ピンチ時に指だけを動かし、両方の指を一緒に動かします
例:
PinchIn {distance:500} --指定された距離(ピクセル単位)にわたってピンチインを実行します。距離は、デフォルトでは画面の中央である At: ポイントを基準とします。
例:
PinchIn {At:RemoteScreenSize()/3, Duration: 5.0} --画面左端から1/3の位置から5秒間ピンチインを実行します。
Press
コマンド
このコマンドは、Eggplant Functional Mobile Connection タイプを通じて Android および iOS で部分的にサポートされています。SauceLabs ではサポートされていません。
Behavior: PinchIn
コマンドは、画面上で2点間のピンチのように動作し、ピンチアウトの効果はズームイン(つまり、画面のイメージが実質的に大きくなる)です。PinchOut
コマンドでは、At点は静的または"固定"であり、To点はAt点から離れて移動します。パラメータが含まれていない場合、ピンチアウトは画面の中心で2秒間の持続時間とピンチ量20%で発生します。
すべての画面ビューやアプリがズームインやアウトの動作をサポートしているわけではありません。たとえば、デバイスがホーム画面にあるときにピンチコマンドを使用 しても効果はありません。
Parameters: 任意の At
ポイント、座標のセット、画像、またはテキスト(OCR)で表現される; 任意の From
ポイント、座標のセット、画像、またはテキスト(OCR)で表現される; 任意の Duration
で、ズームが実行する時間を表現する(デフォルトは2秒); 任意の Distance
、ピクセルで表現され、From
パラメータの代わりに使用される(Distance
と From
のどちらも指定されていない場合、デフォルトの距離は最短の画面寸法の4.5%)。
例:
PinchOut "CityLabel"
例:
PinchOut {At:"UNITEDSTATES_LEFT", To:"UNITEDSTATES_RIGHT"} -- ピンチ時に To: 指のみを動かし、両方の指が同時に動き始めます。
例
PinchOut {Distance:300} -- 指定された距離(ピクセル単位)にわたってピンチアウトを実行します。距離は、デフォルトでは画面の中央である At: ポイントを基準とします。
PinchOut
コマンド
Behavior: このコマンドは、現在の位置またはパラメータで指定された点でタップと保持を実行します。このコマンドは、モバイルデバイス向けに提供されたMouseButtonDown commandと同等です。
Press
コマンドを使用するときは、必ずReleaseコマンドとペアにしてください。
Parameters: オプションの座標または画像のセット。
例:
Press "AppIcon"
例:
setremoteclipboard "12283" -- Sends the string "12283" to the clipboard of the SUT
Press "AddressField" -- Presses on the image AddressField
wait 2 -- Holds down the press for 2 seconds
Release -- プレスアクションを解放します
Tap "PasteDialog"
PressBackButton
コマンド
この機能はAndroidデバイス専用です。
この関数はAndroidデバイス専用で、Android Gatewayが必要です。
Parameters: 座標のセットまたは画像の任意。
例:
PressBackButton
PressHomeButton
コマンド
Behavior: iOSデバイスのホームボタンを押すとともに、Android 4.0.4以降を実行しているAndroidデバイスのホームボタンを押します。古いAndroidデバイスについては、TypeText Keywords for Mobile Controlを参照してください。
Parameters: なし。
例:
PressHomeButton
iOS 9以降でホームボタンを二度押しするには、TypeText
を使用してください:
TypeText HomeButton, HomeButton
このコマンドは1行で入力する必要があります。 2つの行に分割した場合、デバイスはホームボタンを2回押したと認識し、ダブルプレスとは認識しません。
Reboot
コマンド
このコマンドはSauce Labsではサポートされていません。
Behavior: Reboot
コマンドはモバイルデバイス用です。このコマンドは、アクティブな接続を持つモバイルデバイスを再起動します。
スクリプトでReboot
コマンドを使用する場合、すぐにdisconnect
コマンドを送信し、その後再接続することをお勧めします。再接続する際には、デバイスが立ち上がる時間を許してください。たとえば、接続が成功するまで接続を試みるrepeatコマンド内にconnect
コマンドを含めることができます。
Parameters: なし。
例:
Reboot
例:
この例は、接続が成功するまで接続を試みるrepeatループ内でconnectコマンドを使用する方法を示しています。
Connect "AndroidSUT", port:5900
Reboot
Disconnect
Repeat until the connectioninfo.connected is true
try to connect "AndroidSUT", port:5900
Log the counter
End repeat