メインコンテンツまでスキップ

モバイルコントロールとタッチイベント

Eggplant Functionalは、システムアンダーテスト(SUT)としてモバイルデバイスを使用する場合に特に適した多数のコマンドと関数を提供します。

ADBCallRemote 関数

ノート

この関数はAndroidデバイス専用で、Android Gatewayが必要です。

この関数はSauce Labsではサポートされていません。

振る舞い: この関数はADBコールを利用可能なAndroidデバイスに実行し、ADBコマンドから受け取った出力を返します。 ADBCallRemote関数はAndroid Gatewayを介した接続を必要とし、Eggplantマシンにリモートで接続されたAndroidデバイスと連携できます。

パラメータ: Android Debug Bridge(ADB)コマンドラインツールへの任意の呼び出し、pushpullshelllogcatなど、関連パラメータを伴うか伴わないかで使用できます。

例:

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 コマンド

ノート

このコマンドはSauce Labsではサポートされていません。

振る舞い: このコマンドを使用すると、ローカルマシンからSUTへのファイル、またはSUTからローカルマシンへのファイルをコピーできます。パスの前に SUT: を付けてSUTを示します。このコマンドを使用してS示すことに注意してください。SUTの一つの場所から別の場所、または別のSUTへのファイルをコピーするためにはこのコマンドを使用できません。Copy Fileは単一のファイルのみに対応しており、フォルダは対応していません。

ノート

iOS Gatewayでは、このコマンドはデバイスではなく、ゲートウェイにファイルをコピーします。

パラメータ: ソースファイルパスと宛先ファイルパス。

例:

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 コマンド

振る舞い: このコマンドは、現在の場所またはパラメータで指定された場所でダブルタップを実行します。このコマンドは、モバイルデバイス向けに提供されたDoubleClick commandと同等です。一般的に、モバイルデバイスでは、ダブルタップ操作によりアプリがズームします。

例:

copy file "/local/path/to/file" to "SUT:/remote/path/to/file" -- Sends a file to the SUT

例:

copy file "SUT:/remote/requested/file" to "/local/path/to/receive/file" -- SUTからファイルを取得します

パラメータ: オプションとして座標、画像、またはテキスト(OCR)。

振る舞い: このコマンドは、現在の場所またはパラメータで指定された場所でダブルタップを実行します。このコマンドは、DoubleClick commandと同等ですが、モバイルデバイス向けに提供されています。一般的に、モバイルデバイスではダブルタップ操作によりアプリがズームします。

ノート

DoubleTapコマンドにおけるタップイベント間のタイミングは、MouseDoubleClickDelayプロパティによって制御されます。MouseDoubleClickDelayを大幅に延長すると、DoubleTapは2つの別々のタップのように振る舞います:

set the mousedoubleclickdelay to 1-- タップイベント間の遅延を1秒に設定
doubletap "MapMarker"-- MapMarkerイメージを1回タップし、1秒待ってから再度MapMarkerイメージをタップします

例:

DoubleTap the remotescreensize/2-- 画面の中央にdoubletapコマンドを送信します

例:

WaitFor5, "FullsizeMap"
DoubleTap"BuildingIcon"-- BuildingIconイメージの位置にdoubletapコマンドを送信します
WaitFor5, "ZoomedMap"

ExecuteRemoteCommand コマンドと関数

パラメータ: モバイルデバイスSUTで実行したいコマンド。

  • Androidでは、ExecuteRemoteCommandは実際の電話でシェルコマンドとして実行されます。
  • iOSでは、ExecuteRemoteCommandはJavaScriptとしてコマンドを実行し、Apple UIAutomation APIに呼び出しを行います。

振る舞い: ExecuteRemoteCommand コマンドと関数は、モバイルデバイスであるSUTでコマンドを実行するためのものです。データの返却を選択することも、選択しないこともできます。コマンドは同期(レスポンスを待つ)または非同期(待たない)のどちらかです。それがコマンドを実行する方法は、モバイルのオペレーティングシステムによって異なります:

例:

ExecuteRemoteCommand("mkdir /data/local/tmp/TestDir") --Androidでシェルコマンドの構文を使用してデバイスにディレクトリを作成します

例:

put ExecuteRemoteCommand ("ls /data/local/tmp/; echo hello", waitfor: 20) -- セミコロンで区切って複数のコマンドを渡し、コマンドの結果を返します

InstallApp コマンド

ノート

このコマンドはSauce Labsではサポートされていません。

:::

certificateNameプロパティの署名証明書は、InstallAppと一緒に使用する前にiOS Gatewayマシンにインストールされている必要があります。

ノート

InstallAppを使用する前に、certificateNameプロパティの署名証明書をiOSゲートウェイマシンにインストールする必要があります。

パラメータ: applicationPathは常に必要です。iOSの場合、開発用にアプリをコード署名する場合(developer signとも呼ばれます)は、provisionPathcertificateNameがオプションフィールドです。

例:

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 コマンド

ノート

このコマンドはSauce Labsではサポートされていません。

:::

振る舞い: KillAppコマンドは、指定したアプリを終了します。

パラメータ: 終了させたいアプリの名前:

  • 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コマンドを使用できます:
    putExecuteRemoteCommand("pm list packages", WaitFor:10)

  • iOS 8では、特定のアプリをこのコマンドで終了できません。
  • このコマンドの使用についての詳細情報は、iOSテストでの共通の問題を解決するページのアプリの終了を参照してください。

LaunchApp コマンド

ノート

これらのコマンドは、Sauce Labsによってサポートされていません。

振る舞い: このコマンドは、モバイルデバイスにアプリを起動します。

パラメータ: 起動したいアプリの名前:

  • 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 コマンド

ノート

このコマンドはSauce Labsではサポートされていません。

振る舞い: PinchInコマンドは、画面上で2点間のピンチのように動作し、ピンチインの効果はズームアウト(つまり、画面のイメージが実質的に小さくなる)です。PinchInコマンドでは、At点は静的または"固定"であり、From点はAt点に向かって移動します。パラメータが含まれていない場合、pinchInは画面の中心で2秒間の持続時間と4.5%のピンチ量で発生します。

ノート

すべての画面ビューやアプリがズームインやアウトの動作をサポートしているわけではありません。たとえば、デバイスがホーム画面にあるときにピンチコマンドを使用しても効果はありません。

先端

距離はピクセルで表されるため、距離プロパティの動作は、解像度が異なるデバイス間で一貫性がありません。さまざまなデバイスで距離プロパティを使用する場合は、距離を実際の画面サイズに相対的に設定します。例えば:

PinchIn {Distance:the width of the RemoteScreenSize*0.25} -- 画面の幅の四分の一に距離を設定します

パラメータ: 任意の At ポイント、座標のセット、画像、またはテキスト(OCR)で表現される; 任意の From ポイント、座標のセット、画像、またはテキスト(OCR)で表現される; 任意の Duration で、ズームが実行する時間を表現する(デフォルトは2秒); 任意の Distance、ピクセルで表現され、From パラメータの代わりに使用される(DistanceFrom のどちらも指定されていない場合、デフォルトの距離は最短の画面寸法の4.5%)。

例:

PinchIn {At:"UNITEDSTATES_LEFT", From:"UNITEDSTATES_RIGHT"} -- Moves the From: finger in the pinch only and both fingers end together

例:

PinchIn {distance:500} -- Executes a pinchIn across the specified distance, in pixels. Distances are relative to the At: point, which is the center of the screen by default.

例:

PinchIn {At:RemoteScreenSize()/3, Duration: 5.0} -- Executes a pinchIn starting 1/3 from the left side of the screen with a duration of 5 seconds.

PinchOut コマンド

ノート

このコマンドはSauce Labsではサポートされていません。

振る舞い: PinchInコマンドは、画面上で2点間のピンチのように動作し、ピンチアウトの効果はズームイン(つまり、画面のイメージが実質的に大きくなる)です。PinchOutコマンドでは、At点は静的または"固定"であり、To点はAt点から離れて移動します。パラメータが含まれていない場合、ピンチアウトは画面の中心で2秒間の持続時間とピンチ量20%で発生します。

ノート

すべての画面ビューやアプリがズームインやアウトの動作をサポートしているわけではありません。たとえば、デバイスがホーム画面にあるときにピンチコマンドを使用しても効果はありません。

パラメータ: 任意の At ポイント、座標のセットまたは画像で表現される(デフォルトは画面の中心); 任意の To ポイント、座標のセットまたは画像で表現される; 任意の Duration で、ズームが実行する時間を表現する(デフォルトは2秒); 任意の Distance、ピクセルで表現され、To パラメータの代わりに使用される。DistanceTo のどちらも指定されていない場合、デフォルトの距離は最短の画面寸法の25%です。

例:

PinchOut "CityLabel"

例:

PinchOut {At:"UNITEDSTATES_LEFT", To:"UNITEDSTATES_RIGHT"} -- Moves the To: finger in the pinch only and both fingers start together.

例:

PinchOut {Distance:300} -- Executes a pinchout across the specified distance, in pixels. Distances are relative to the At: point, which is the center of the screen by default.

Press コマンド

振る舞い: このコマンドは、現在の位置またはパラメータで指定された点でタップと保持を実行します。このコマンドは、モバイルデバイス向けに提供されたMouseButtonDown commandと同等です。

先端

Pressコマンドを使用するときは、常にReleaseコマンドと組み合わせて使用してください。

パラメータ: なし。

例:

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 コマンド {#pressbackbutton}

ノート

この機能はAndroidデバイス専用です。

動作: iOSデバイスのホームボタンを押すとともに、Android 4.0.4以降を実行しているAndroidデバイスのホームボタンを押します。古いAndroidデバイスについては、TypeText Keywords for Mobile Controlを参照してください。

パラメータ: 座標のセットまたは画像の任意。

例:

PressBackButton

PressHomeButton コマンド

振る舞い: このコマンドはアプリをモバイルデバイスにインストールします。applicationPathパラメータでインストールするアプリを指定します。オプションで、provisionPathcertificateNameプロパティを含めることで、iOS Gatewayに開発者署名付きのアプリをインストールするよう指示できます。インストールするアプリケーションは、Eggplant Functionalを実行しているマシン上にある場合はローカルパスで指定できます;また、iOS Gatewayを実行しているマシン上にすでにあるアプリをインストールすることもできます。その場合は、パスのプレフィックスにSUT:を使用します。このコマンドは、サーバからの完了メッセージを受け取るまで待機します。

パラメータ: なし。

例:

PressHomeButton
ノート

iOS 9以降でホームボタンを二度押しするには、TypeTextを使用してください:

TypeText
HomeButton
,
,

このコマンドは一行で入力する必要があります。二行に分けて使用すると、デバイスは二度のホームボタンの押し込みを二回の別々の押し込みとして認識し、ダブルプレスとは認識しません。

Reboot コマンド

ノート

このコマンドはSauce Labsではサポートされていません。

動作: Rebootコマンドはモバイルデバイス用です。このコマンドは、アクティブな接続を持つモバイルデバイスを再起動します。

スクリプトでRebootコマンドを使用する場合、すぐにdisconnectコマンドを送信し、その後再接続することをお勧めします。再接続する際には、デバイスが立ち上がる時間を許してください。たとえば、接続が成功するまで接続を試みるrepeatコマンド内にconnectコマンドを含めることができます。

パラメーター: なし。

例:

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

Release コマンド

動作: このコマンドは、現在の位置または指定された位置でPressコマンドを解放します。これは、モバイルデバイスに適したMouseButtonUpコマンドの同等のものです。

パラメータ: 座標のオプションセット、画像、またはテキスト(OCR)。

例:

Release "AppIcon"

RotateLeft, RotateRight コマンド

ノート

これらのコマンドはSauce Labsではサポートされていません。

動作: RotateLeftコマンドは、現在のデバイスの向きから時計回りに90度(四分の一回転)モバイルデバイスの画面を回転させ、RotateRightコマンドは、現在の向きから反時計回りに90度画面を回転させます。

パラメータ: 回転が発生するまでの時間を許すためのオプショナルなWaitFor

例:

RotateLeft {WaitFor:10.0}

SetDeviceLocation コマンド

ノート

このコマンドはSauce Labsではサポートされていません。

動作: このコマンドは、デバイスのGPSをオーバーライドし、AndroidデバイスまたはiOSデバイスに所望の位置を設定することを可能にします。Androidデバイスでこのコマンドを使用するためには、developer settingsを変更する必要があります。iOSデバイスでは、このコマンドを使用するためにlocation servicesを有効にする必要があります。

パラメータ: デバイスに設定したい場所の緯度と経度。

例:

SetDeviceLocation {latitude:1.1, longitude:2.2}

例:

SetDeviceLocation [40.021824,-105.2473129]

SetDeviceOrientation コマンド

ノート

このコマンドはSauce Labsではサポートされていません。

動作: このコマンドは、パラメータで指定した内容にデバイスの向きを変更します。新しい向きが達成されるまで待ちますが、WaitFor遅延も含めてタイミングの問題を制御することができます。SetDeviceOrientationコマンドがタイムアウトすると、例外がスローされます。

パラメータ: 設定したいデバイスの向き(LandscapeLeft, LandscapeRight, Portrait, PortraitUpsideDown)と、オプションのWaitFor時間。

例:

SetDeviceOrientation LandscapeRight

関連:

  • GetDeviceOrientation: この関数を使用して、デバイスの現在の向きに関する情報を返します。

SwipeDown, SwipeLeft, SwipeRight, SwipeUp Commands

動作: このコマンドはスワイプ動作を実行します。スワイプは指定された位置、画像、またはテキスト(OCR)から始まるか、または画面の端近くの自動的に決定された位置から始まります。SwipeDownSwipeUpは、それぞれ画面の下部と上部近くの中央位置から自動的に始まり、画面の反対側へとスワイプします。SwipeLeftSwipeRightは、それぞれ画面の右側と左側近くの中央位置から自動的に始まり、画面の反対側へとスワイプします。この動作は、弧を描くように動くことで、モバイルデバイス上で手で実行されるスワイプを模倣します。

先端

スワイプアクション中にドラッグされるピクセル数を調整するために、SwipeSpeedグローバルプロパティを使用します。

パラメータ: スワイプの開始点を示す座標、画像、またはテキスト(OCR)のオプションセット。

例:

SwipeLeft

例:

SwipeDown "NotificationBar"

例:

Set the SwipeSpeed to 80 //スワイプ中に80ピクセルをドラッグするようにSwipeSpeedを設定します
SwipeUp the remoteScreenSize times .9 //画面の上から90%、左から90%の位置からスワイプを開始します。

例:

ScrollUntilFound "ChromeIcon", "left" //ハンドラ "ScrollUntilFound"を呼び出し、画像と方向を表す二つのパラメータを渡します。
on ScrollUntilFound myImage, Direction //2つのパラメータを持つコマンドハンドラを宣言します。
repeat until imagefound (imagename:myImage,waitFor:0) //特定の画像が見つかるまで繰り返し、各イテレーションで画像のスキャンを1回だけ許可します。
repeatindex = 5 の場合は、 "Image not found"、"Image not found while scrolling"&&Direction&periodを投げる //リピートループが5回繰り返された場合、例外を投げます
"Swipe" & Directionを行う //Doコマンドを使用して、文字列と変数をコマンドに結合します
wait 2 //スワイプ後に画面が安定するまで2秒待つ
end repeat
end ScrollUntilFound

Tapコマンド

動作: このコマンドは、現在の位置またはパラメータで指定された位置でタップを実行します。このコマンドは、モバイルデバイスに適したクリックコマンドと同等です。

パラメータ: 座標のオプションセットまたは画像。

例:

Tap "Safari_Icon"
ノート

Tapコマンドのタップダウンイベントとタップアップイベントの間のタイミングは、MouseClickDelayグローバルプロパティによって制御されます。MouseClickDelayを大幅に延長すると、TapPressおよびReleaseのように動作します:

set the mouseclickdelay to 2 //タップダウンイベントとタップアップイベントの間の遅延を2秒に設定
tap "SearchField" //SearchField画像を押してリリースします

UninstallApp コマンド

ノート

このコマンドはSauce Labsではサポートされていません。

動作: UninstallAppコマンドは、指定したアプリを削除します。

パラメータ: アンインストールしたいアプリの名前:

  • iOSでは、アプリ名はアプリの名前です。
  • Androidでは、アプリ名はpackage nameです。
ノート

Androidデバイス上でアプリパッケージ名を見つけるには、以下のようにExecuteRemoteCommandコマンドと一緒にパッケージマネージャのpm list packagesコマンドを使用できます:

例:

put
ExecuteRemoteCommand
(
"pm list packages"
,
WaitFor
:
10
)

テックトーク

UninstallApp "com.google.android.apps.maps" //Androidのアプリをアンインストールします

テックトーク

UninstallApp "MyApp" //iOSのアプリをアンインストールします