Appiumをやっと起動してアプリを操作するまで実行することが出来ました。
ただ、起動出来ても要素の取得やタップなどの操作をさせないことにはなんのテストにもならないので、そのあたりのことをまとめていこうと思います。
ちなみに起動までの道のりは前の記事で書いています。
サンプル
今回のサンプルをGithubにあげているのでよかったら見てみてください。
要素の取得と操作
要素を検索する
要素を検索するにはfind_element
、find_elements
メソッドを使います。
どちらのメソッドも2つ引数を取り、第一引数はどんなタイプから検索するのか、第二引数は指定したタイプから具体的になにを検索するのかを指定します。
element = @driver.find_element :id, "anyID" # labelでも大丈夫
element = @driver.find_element :name, "anyLabel" # idでも大丈夫
elements = @driver.find_elements :class_name, "UIAButton"
メモ
:id
と:name
はaccesibilityIdentifier
、accessibilityLabel
を検索するためのものです。
ちなみに現在のAppiumではUIView
はXPathでは取れないので、UIViewに対してなにか処理をしたい場合はaccesibilityLabel
を付けて:id
か:name
で直接アクセスしないとダメなようです。
XPathを使う
要素の取得にはXPath
を使うことも出来ます。
個人的にはこれが一番強力なのではないかなと。
ただ、上でも書いた通りUIView
に関してはXPathでは取れないので注意が必要です。
[追記]
どうやらaccesibilityIdentifierなどを追加すると、UIViewも//UIAElement
の取得対象となるようです。
サンプル
# とあるボタンを取得する
button = @driver.find_element :xpath, "//UIAWindow//UIAButton"
以下のようにそれぞれのクラス(UIButtonなど)に対応する形でUIAutomation
のクラスが割り当てられています。
:class_name
と:xpath
ではこのUIAutomation
のクラス名を指定して要素を取得します。
そのため、UIAButton
などA
が増えているわけです。(最初なんでA
が入ってるんだろうって思ってました)
ちなみにUIView
に対応するのはUIAElement
になります。
ただ、やはりXPathで//UIAElement
と指定してもUIView自体は取れないみたいです。(UIAElementはUIView同様、Viewに関するベースクラスなのでUIAButtonなども取得できる)
UIKitとUI Automationとの対応表
UIKit | UI Automation |
---|---|
UIApplication | UIAApplication |
UIWindow | UIAWindow |
UIActionSheet | UIAActionSheet |
UIActivityIndicator | UIAActivityIndicator |
UIAlertView | UIAAlert |
UIApplication | UIAApplication |
UIButton | UIAButton |
UIView | UIAElement |
UITextInputTraits | UIAKeyboard |
UINavigationBar | UIANavigationBar |
UIPageControl | UIAPageIndicator |
UIPickerView | UIAPickerWheel |
UIPopoverController | UIAPopover |
UIProgressView | UIAProgressIndicator |
UIScrollView | UIAScrollView |
UISearchBar | UIASearchBar |
UITextField | UIASecureTextField |
UISegmentedControl | UIASegmentedControl |
UISlider | UIASlider |
UILabel | UIAStaticText |
UISwitch | UIASwitch |
UITabBar | UIATabBar |
UITableViewCell | UIATableCell |
UITableView | UIATableView |
UITextField | UIATextField |
UIToolbar | UIAToolbar |
UIWebView | UIAWebView |
UIWindow | UIAWindow |
Appium Inspectorを使う
実はAppiumには Appium Inspector という非常に強力なツールがあります。
このツールは、Appium.appをインストールすると利用できます。
Appium.appは、nodeで使っているAppiumのGUIアプリ版です。
Appium.app
Appium Inspectorの起動
Appium Inspectorは、上記のアプリから起動します。
まずApp Path
となっているところに、コマンドラインからビルドしたアプリを指定します。
(キャプチャでは「Appium-test.app」となっているところ)
次に、右上の Launch ボタンを押してappiumサーバを起動します。
起動すると下半分の黒いところにコンソールと同様にメッセージが表示されます。
無事起動したら、(i)ボタンを押します。
見てもらうと分かりますが、プレビュー画面と現在の階層構造を表示してくれます。
さらに、赤い Record ボタンを押してから操作するとその処理を記録し、その手順を下のドロワービューに書き出してくれます。
※操作はInspector上で行います。プレビュー画面上をクリックするとクリックした箇所がハイライトされ(サンプルでは赤いボーダーが表示されているところ)、画面下の方にあるTouch
やText
などのタブから実行したい処理を選択することで記録される仕組みです。
メモ
このInspectorの強力なところは、ビルドしたアプリを指定するだけ、という点です。
ビルド前になにがしかのライブラリを追加する必要はありませんし、事前準備もいりません。
ただビルドするだけです。
UIViewが取得できない点を除いては、現在の構造などを把握することもできるのでそれだけでも有用でしょう。
(ちなみに、右下にある「Detail」の箇所にはXPathでどう指定したらいいかというのも表示されるので、うまく取得できないときは参考にしてみるといいでしょう)