LoginSignup
35
33

More than 5 years have passed since last update.

[iOS] Appiumを使っての要素取得と操作についてまとめ(Ruby編)

Last updated at Posted at 2014-04-27

Appiumをやっと起動してアプリを操作するまで実行することが出来ました。
ただ、起動出来ても要素の取得やタップなどの操作をさせないことにはなんのテストにもならないので、そのあたりのことをまとめていこうと思います。

ちなみに起動までの道のりは前の記事で書いています。

サンプル

今回のサンプルをGithubにあげているのでよかったら見てみてください。

要素の取得と操作

要素を検索する

要素を検索するにはfind_elementfind_elementsメソッドを使います。
どちらのメソッドも2つ引数を取り、第一引数はどんなタイプから検索するのか、第二引数は指定したタイプから具体的になにを検索するのかを指定します。

sample.rb
element = @driver.find_element :id, "anyID" # labelでも大丈夫

element = @driver.find_element :name, "anyLabel" # idでも大丈夫

elements = @driver.find_elements :class_name, "UIAButton"

メモ

:id:nameaccesibilityIdentifieraccessibilityLabelを検索するためのものです。

ちなみに現在のAppiumではUIViewはXPathでは取れないので、UIViewに対してなにか処理をしたい場合はaccesibilityLabelを付けて:id:nameで直接アクセスしないとダメなようです。

XPathを使う

要素の取得にはXPathを使うことも出来ます。
個人的にはこれが一番強力なのではないかなと。
ただ、上でも書いた通りUIViewに関してはXPathでは取れないので注意が必要です。

[追記]
どうやらaccesibilityIdentifierなどを追加すると、UIViewも//UIAElementの取得対象となるようです。

サンプル
xpath-sample.rb
# とあるボタンを取得する
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

スクリーンショット 2014-04-27 19.58.20.png

Appium Inspectorの起動

Appium Inspectorは、上記のアプリから起動します。
まずApp Pathとなっているところに、コマンドラインからビルドしたアプリを指定します。
(キャプチャでは「Appium-test.app」となっているところ)

次に、右上の Launch ボタンを押してappiumサーバを起動します。
起動すると下半分の黒いところにコンソールと同様にメッセージが表示されます。
無事起動したら、(i)ボタンを押します。

すると、以下のウィンドウが起動します。
スクリーンショット 2014-04-27 20.03.07.png

見てもらうと分かりますが、プレビュー画面と現在の階層構造を表示してくれます。
さらに、赤い Record ボタンを押してから操作するとその処理を記録し、その手順を下のドロワービューに書き出してくれます。

※操作はInspector上で行います。プレビュー画面上をクリックするとクリックした箇所がハイライトされ(サンプルでは赤いボーダーが表示されているところ)、画面下の方にあるTouchTextなどのタブから実行したい処理を選択することで記録される仕組みです。

メモ

このInspectorの強力なところは、ビルドしたアプリを指定するだけ、という点です。
ビルド前になにがしかのライブラリを追加する必要はありませんし、事前準備もいりません。
ただビルドするだけです。

UIViewが取得できない点を除いては、現在の構造などを把握することもできるのでそれだけでも有用でしょう。
(ちなみに、右下にある「Detail」の箇所にはXPathでどう指定したらいいかというのも表示されるので、うまく取得できないときは参考にしてみるといいでしょう)

参考リンク

35
33
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
33