モバイルデバイステストのためのWebDriverコマンドと関数
WebDriverのコマンドと関数を使用して、iOSおよびAndroidのモバイルデバイスを自動化することができます。iOSデバイスを自動化するためには無料のiOS Gatewayが必要です。Androidのテストには無料のAndroid Gatewayを使用できます。
iOSデバイスでのWebDriverテストにおいて正確にWebElementsをクリックするためには、高速スクリーン更新を有効にする必要があります。
モバイルWebDriverテストでは、テストするシステムのブラウザではなく、特 定のアプリへの接続が行われます。WebDriverを使用したテストは、テストしているアプリ内のさまざまな要素とのインタラクションを基にしています。
WebElement識別子
WebDriver接続とFindElement()関数やClickコマンドを使用してテストしているアプリ内のWebElementにアクセスするためには、インタラクションしたい要素を特定する必要があります。以下のWebElement識別子を使用して、モバイルデバイス上の要素を特定することができます:
- webID: このプロパティを使用して、ID属性の値により要素を特定します。
- webName: このプロパティを使用して、Name属性の値により要素を特定します。
- webClassName: このプロパティを使用して、Class属性の値により要素を特定します。
- webXPath: このプロパティを使用して、XPath表現を使用して要素を特定します。XPathとXPath表現についての情報は、XPath in Selenium WebDriver: Complete Tutorialを参照してください。
- webAccessibilityID: このプロパティを使用して、Accessibility ID属性の値により要素を特定します。
WebConnect コマンド
- このコード定義は、モバイルWebDriver接続のための
WebConnectコマンドの使用方法を説明します。このコマンドをブラウザベースのWebDriver接続に使用する方法については、WebDriver Actions: WebConnect Commandを参照してください。 - Eggplant機能を介したSauce Labsへの接続が確立されると、ConnectコマンドはVNC接続とWebDriver接続の両方を確立します。Sauce Labsへの接続に対してWebDriverコマンドを直接送信することができます。明示的なWebDriver接続と同様に。
- モバイルデバイス接続を使用している場合、WebConnectコマンドはサポートされていますが、推奨されていません。Eggplant Functional は、モバイルデバイス接続を確立すると、自動的に WebDriver 接続を開きます。 モバイルデバイス接続のコンテキストで WebConnect を使用することは、高度なユースケースと見なされ、このドキュメントの範囲外です。
動作: このコマンドはモバイルデバイス上の特定のアプリへの接続を確立します。
パラメ ータ: WebConnectコマンドは以下のパラメータを取ることができます:
browser:Optional.プラットフォーム名:モバイル専用。必須。モバイルデバイスのオペレーティングシステム。port: Required. モバイルWebDriver接続を作成するためのポート番号。iOS接続のデフォルトポートは8100です。Android接続のデフォルトポートは4723です。名前:オプション。この接続を参照するために使用する名前です。これはEggplant Functional Connectionリストに表示される名前です。これが指定されると、スクリプトはその接続のブラウザ、ホスト、ポート、そしてプラットフォーム名(モバイルの場合)を引き出します。これらのプロパティのいずれかがWebConnectコマンドに提供されると、それはConnectionリストで設定されたものを上書きします。指定した名前の接続がEggplant Functional Connectionリストに存在しない場合、新しい接続が作成され、提供された情報で保存されます。host: Required. モバイルデバイス接続については、これは常にlocalhostです。appActivity:Android専用。必須。アプリを開きたいアプリの画面。このパラメータは大文字と小文字を区別します。自動化名:Android専用。必須。デバイスをテストするために使用する自動化エンジン。appPackage:Android専用。必須。開き、テストしたいモバイルアプリの識別子。このパラメータは大文字と小文字を区別します。bundleId:iOS専用。必須。開き、テストしたいモバイルアプリの識別子。このパラメータは大文字と小文字を区別します。デバイス:Android専用。必須。デバイスのID番号。これはコマンドラインでadb devicesを入力することで見つけることができます。
構文:
WebConnect 接続プロパティ
_connectionProperties_には以下が含まれます: browser:browserName, {host:hostAddress,} {port:portName,} {url:pageURL,} {name:connectionName,} {desiredCapabilities:{capabilitiesPropertyList}} {platformName: NameofPlatform,} {bundleId: bundleIDNumber}
希望する能力の場合、波括弧は必須の構文の一部であり、SauceLabs接続と通信する際に使用されます。
例:
WebConnect ホスト:"localhost", ポート:"8100",プラットフォーム名: "iOS", バンドルID: "com.apple.Maps"
例:
WebConnect ホスト: "localhost", ポート: "4723", プラットフォーム名: "Android", デバイス: "04157df49c1d0533", デバイス名: "Android", アプリパッケージ: "com.google.android.apps.maps", アプリアクティビティ: "com.google.android.maps.MapsActivity", 自動化名: "UIAutomator2"
WebDisconnect コマンド
- このコード定義では、モバイルWebDriver接続の
WebDisconnectコマンドの使用について説明しています。ブラウザベースのWebDriver接続のこのコマンドの使用については、WebDriver Actions: WebDisconnect Commandを参照してください。 - Sauce LabsとのEggplant機能統合を使用している場 合、WebConnectコマンドは必要ありません。代わりにConnectコマンドを使用すべきです。
- 当然,让我们开始:
動作: このコマンドはWebDriver接続を切断します。
動作: デフォルトでは、この関数はアクティブなWebDriver接続(存在する場合)のプロパティを返します。以下で指定されているようにパラメータを含めることで、別のオープンな接続(利用可能な場合)に切り替えるか、新しい接続を開くことができます。
構文:
WebDisconnect {webDriverName | All}
例:
WebDisconnect // アクティブなWebDriver接続を切断
例:
WebDisconnect All // すべてのWebDriver接続を切断
例:
webDisconnect "iphone7"// "iphone7"という名前のWebDriver接続を切断
WebDriver 関数
このコード定義では、モバイルWebDriver接続のWebDriver()関数の使用について説明しています。ブラウザベースのWebDriver接続のこの関数の使用については、WebDriver Actions: WebDriver() Functionを参照してください。
パラメータ: なし、接続名、またはAll。パラメータを指定しない場合、アクティブなWebDriverが切断されます。特定の接続名と共にWebDisconnectを使用してその接続を閉じる、またはAllを使用してすべてのアクティブな接続を閉じます。
新しい接続を開くか、アクティブな接続を切り替えるとき、WebDriver()関数はWebConnectコマンドと同じアクションを実行します。
パラメータ: WebDriver()関数は以下のパラメータを受け取ることができます:
host: (必須) モバイルデバイス接続の場合、これは常にlocalhostです。port: (必須) モバイルWebDriver接続を作成するためのポート番号。iOS接続のデフォルトポートは8100です。Android接続のデフォルトポートは4723です。name:(任意) この接続を参照するための名前。指定された場合、これは接続リストに表示される名前です。platformName:(必須) モバイルデバイスのオペレーティングシステム。bundleId:(iOSのみ。必須) 開くテスト対象のモバイルアプリの識別子。このパラメータは大文字と小文字を区別します。device:(Androidのみ。必須) デバイスのID番号。これはコマンドラインにadb devicesと入力することで見つけることができます。appPackage:(Androidのみ。必須) 開くテスト対象のモバイルアプリの識別子。このパラメータは大文字と小文字を区別します。appActivity:(Androidのみ。必須) アプリが開く画面。このパラメータは大文字と小文字を区別します。automationName:(Androidのみ。必須) デバイスをテストするために使用する自動化エンジン。
構文:
WebDriver( {connectionProperties} )
返り値: パ ラメータなしでWebDriver()関数を呼び出した場合、それはアクティブなWebDriver接続のWebDriverConnectionオブジェクトを返します。
WebDriver()関数でWebDriver接続を開いた場合、それは新しく作成されたWebDriver接続のWebDriverConnectionオブジェクトを返します。
例:
put WebDriver() // アクティブなWebDriver接続に関する情報を返します:<WebDriverConnection with Name:"iphone6plus", PlatformName:"iOS", Host:"localhost", BundleID:"com.testplant.YetAnotherSampleApp">
例:
set driver to WebDriver(host:"localhost", port: "8100", platformName: "iOS", bundleId: "com.testplant.YetAnotherSampleApp")
例:
set driver to WebDriver(host: "localhost", port: "4723", platformName: "Android", appPackage:"com.google.android.apps.maps", appActivity:"com.google.android.maps.MapsActivity", automationName:"UIAutomator2")
FindElement Function
このトピックでは、モバイル WebDriver 接続での FindElement() 関数の使用について説明します。ブラウザベースのWebDriver接続にこの関数を使用する方法については、WebElementsの検索:FindElement()関数を参照してください。
**動作:**このコマンドは、インタラクト可能な特定のWebElementを見つけます。
パラメータ: 探し出したい要素のWebElement Identifier。
文法:
FindElement( webElementIdentifier )
例:
set textField to findElement (webName: "Enter Text Field") // 変数textFieldにWebName "Enter Text Field"の要素を格納
SwipeDown, SwipeLeft, SwipeRight, SwipeUp コマンド
このコード定義では、モバイルWebDriver接続のSwipeコマンドの使用方法を説明します。この機能を他のモバイル接続で使用する方法については、Mobile Control and Touch Events: Swipe Commandsをご覧ください。
動作: これらのコマンドは指定された要素に対して方向指定のスワイプを実行します。
動作: このコマンドは、操作可能な特定のWebElementを特定します。
文法:
SwipeDown webElementIdentifier
SwipeUp webElementIdentifier
SwipeLeft webElementIdentifier
SwipeRight webElementIdentifier
例:
SwipeUp {webClassName: "XCUIElementTypeMap"}
ClearKeys コマンド
このコード定義では、モバイルWebDriver接続のClearKeysコマンドの使用方法を説明します。この機能をブラウザベースのWebDriver接続で使用する方法については、WebDriver Mouse and Keyboard Events: ClearKeys Commandをご覧ください。
パラメータ: 引用符で囲まれたテキスト文字列。テキスト文字列に引用符を含める必要がある場合は、二重角括弧<< >>でテキストを囲むことができます。
パラメータ: テキストをクリアする要素のWebElement Identifier。
文法:
ClearKeys webElementIdentifier
例:
ClearKeys {webName: "Enter Text Field"} // webName "Enter Text Field"の要素からテキストをクリア
例:
set textField to findElement(webName: "Enter Text Field") // WebElementの名前を変数に入れる
ClearKeys textField // WebElementからテキストをクリア
SendKeys コマンド
このコード定義では、モバイルWebDriver接続のSendKeysコマンドの使用方法を説明します。この機能をブラウザベースのWebDriver接続で使用する方法については、WebDriver Mouse and Keyboard Events: SendKeys Commandをご覧ください。
動作: このコマンドはモバイルデバイスの要素にキーストロークを送信します。
動作: このコマンドは指定したWebElementに入力されたテキストをクリアします。
文法:
SendKeys text
例:
SendKeys "Hello World!" // アクティブな要素にテキストを送信
例:
set textField to findElement (webName: "Enter Text Field") // WebElementの名前を変数に入れる
SendKeys textField, "A nod's as good as a wink to a blind bat" // 変数を使用してWebElementをアクティブにし、次にキーストロークを送信してタイプ:"A nod's as good as a wink to a blind bat"
Tap コマンド
このコード定義は、モバイルWebDriver接続用のTapコマンドの使用を説明しています。この機能を他のモバイル接続で使用する情報については、Mobile Control and Touch Events: Tap Commandを参照してください。
動作: Tapコマンドは、DOM内の要素を見つけて、見つかった場所でタップイベントをシミュレートします。
パラメータ: タップする要素のWebElement識別子。
構文:
Tap webElementIdentifier
例:
Tap (webName: "Map") // "Map"要素を探してタップを実行します
DoubleTapコマンド
このコード定義は、モバイルWebDriver接続用のDoubleTapコマンドの使用を説明しています。この機能を他のモバイル接続で使用する情報については、Mobile Control and Touch Events: DoubleTap Commandを参照してください。
動作: DoubleTapコマンドは、DOM内の要素を見つけて、見つかった場所でダブルタップイベントをシミュレートします。
パラメータ: ダブルタップ する要素のWebElement識別子。
構文:
DoubleTap webElementIdentifier
例:
DoubleTap (webClassName: "XCUIElementTypeMap") // クラス名 "XCUIElementTypeMap" の要素を探してダブルタップを実行します
WebScreenshotコマンド
このコード定義は、モバイルWebDriver接続用のWebScreenshotコマンドの使用を説明しています。この機能をブラウザベースのWebDriver接続で使用する情報については、WebDriver Actions: WebScreenshot Commandを参照してください。
動作: このコマンドは、アクティブなWebDriver接続を持つモバイルデバイスのスクリーンショットを取り、指定されたファイル名または完全なファイルパスに保存します。
パラメータ: 保存場所を指定する完全なファイルパスをオプションで含むことができる必要なファイル名。ファイル名パラメータにファイルパスが含まれていない場合、スクリーンショットはユーザーのドキュメントディレクトリに保存されます。
構文:
WebScreenshot {webDriverConnection,} fileName
例:
WebScreenshot "shot1" // アクティブなWebDriverConnectionのスクリーンショットをキャプチャし、'shot1'という名前で保存します
例:
WebScreenshot "/Users/admin/Desktop/shot5" // 'shot5'という名前でデスクトップにスクリーンショットを保存します
GetDeviceOrientation 関数
このコード定義は、モバイルWebDriver接続用のGetDeviceOrientation()関数の使用を説明しています。この機能を他のモバイル接続で使用する情報については、Mobile SUT Information: GetDeviceOrientation Functionを参照してください。
動作: この関数は、アクティブなWebDriver接続を持つデバイスの画面の現在の回転を返します。
パラメータ: なし。
構文:
GetDeviceOrientation()
戻り値: 可能な値はsetDeviceOrientationコマンドのパラメータと同じです:Landscape, LandscapeRight, Portrait, PortraitUpsideDown.
例:
put GetDeviceOrientation() // デバイス画面の向きを返します
例:
put "Device rotated to " & GetDeviceOrientation() // "Device rotated to"とデバイスの画面の向きを返します
関連項目:
SetDeviceOrientation コマンド
このコマンドはSauce Labsではサポートされていません。
このコード定義は、モバイルWebDriver接続用のSetDeviceOrientationコマンドの使用を説明しています。この機能を他のモバイル接続で使用する情報については、Mobile Control and Touch Events: SetDeviceOrientation Commandを参照してください。
動作: アクティブなWebDriver接続を持つデバイスの向きをパラメータで指定したものに変更します。異なる向きは、アクティブなアプリとオペレーティングシステムがそれらをサポートする場合にのみ機能します。
パラメータ: 設定したいデバイスの向き。選択肢はPortrait, PortraitUpsideDown, Landscape, LandscapeRightです。注意していただきたいのは、AndroidデバイスはPortraitとLandscapeのみを受け付けるということです。要求された向きがオペレーティングシステムやアプリによってサポートされていない場合、エラーは返されず、画面は以前の向きのままになります。
構文:
SetDeviceOrientation value
例:
SetDeviceOrientation LandscapeRight
関連項目:
TouchAction コマンド
動作: 他のコマンドと組み合わせて、デバイス上でのタッチアクションをシミュレートします。moveToと一緒に使用すると、地図アプリの使用時のように、モバイルデバイスの画面上でドラッグするのをシミュレートします。
パラメータ: シミュレートするアクションとそのアクションに必要な座標を定義するプロパティリストの配列。touchActionプロパティリストで動作するコマンドは:longPress, moveTo, press, waitです。タッチアクションのdurationも設定できます。
構文:
touchAction arrayOfActionPropertyLists
例:
touchAction [ {longPress: {x: 500, y: 500}}, {moveTo: {x: 500, y: 250}} ]
例:
touchAction [{longPress:{x:250,y:500}}, {moveTo:{x:500,y:250}}, {duration:2}] // 二つの点間のドラッグアクションに2秒の時間を与えます