SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

「日本Seleniumユーザーコミュニティ」のエキスパートが教えるSelenium最新事情

モバイルアプリのUIテストフレームワーク「Appium」の最新事情と、Appium Desktopを使ったテストの実行

  • X ポスト
  • このエントリーをはてなブックマークに追加

Appiumに触れる(2)

操作を記録してみる

 インスペクタの起動に成功したので試しにシナリオを記録してみます。本来は好きな言語で試してみてほしいのですが、ここではRubyを使いクライアントコードを記述します。Rubyを使うのは比較的短いコード量でテストスクリプトを記述可能なためです。

 インスペクタ上部の、赤枠で囲ったような目のマークをクリックします。

 記録の準備が整ったら以下の画面になります。

 操作の基本は以下の繰り返しです。

  1. インスペクタ上で操作したい要素を選択
  2. インスペクタ右側の[Selected Element]から、行いたいアクションを指定する。
  3. 1、2を繰り返す
  4. 終えたら、目のマークの箇所が一時停止のマークに変化しているので、そこをクリック

 試しに、[Accessibility]をタップし、さらに[Accessibility Service]をタップする、という簡単な操作を模倣してみます。

 出力形式はデフォルトではおそらくJavaなので、適宜変更してください。

 以下は[Ruby]を選択した時の出力です。

el1 = driver.find_elements(:accessibility_id, "Accessibility")
el1.click
el2 = driver.find_elements(:accessibility_id, "Accessibility Service")
el2.click

 この記録された操作の前後でAppiumサーバの起動やアプリの起動を行うコードを用意すると、[Accessibility Service]の要素の画面を表示することができるようになります。

 では、これを元に簡単なテストスクリプトを記述します。最終的には、以下のように、タイトルに「Accessibility/Accessibility Service」と書かれている画面が表示されることを目指します。

$ gem install appium_lib

 appium_example.rbというファイルを作成し、以下のコードを記述します。この時、インスペクタは停止させておいてください。一度Appiumサーバを停止し、再度起動すると楽です。また、忘れずにAndroid OS 7.1.1のエミュレータを起動させておいてください。

appium_example.rb
require 'appium_lib'

class AppiumTest
  CAP = {
    caps: {
      platformName: 'android',
      automationName: 'uiautomator2',
      platformVersion: '7.1.1',
      deviceName: 'Android Emulator',
      app: '/path/to/test/app/api.apk',
      appPackage: 'io.appium.android.apis',
      appActivity: 'io.appium.android.apis.ApiDemos'
    },
    appium_lib: {
      wait: 60
    }
  }.freeze

  attr_reader :driver

  def setup
    @driver = Appium::Driver.new(CAP, true).start_driver
  end

  def run_scenario
    el1 = driver.find_element(:accessibility_id, "Accessibility")
    el1.click
    el2 = driver.find_element(:accessibility_id, "Accessibility Service")
    el2.click

    # 要素が存在しない場合、 ::Selenium::WebDriver::Error::NoSuchElementError の例外が発生し、実行が停止する
    result = driver.find_element(:class_name, "android.widget.TextView")
    raise "Accessibility/Accessibility Serviceの画面ではありません" unless result.text == "Accessibility/Accessibility Service"

    driver.quit
    puts 'Tests Succeeded!'
  end
end

test = AppiumTest.new
test.setup
test.run_scenario

 以下のように実行します。

$ ruby appium_example.rb

 Androidエミュレータを見ていると、実行が進みアプリがインストールされ、所定の要素を2回ほどタップしたあと、Rubyの標準出力にTests Succeeded!が表示されるはずです。

 これで、簡単な実行はできました。

まとめ

 ここまで、

  • Appiumの最近の事情
  • Appium Desktopを使った、要素の探索から操作の記録と簡単な実行

を説明してきました。また、それを実際に手を動かしながら体験してみました。

 最近のモバイルアプリのGUIテスト実行環境をいうと、Appiumはユーザ操作に近い位置からのテスト自動化を推し進めます。一方で、それとは異なる類のUIテストむけのフレームワークも存在します。もちろん、できること/できないことにも差が出てきます。そのため、それぞれのフレームワークの特性を経験し、目的に応じてより良い方法を利用できるようになると良いですね。

 この記事が、Appiumを経験するきっかけになればと思います。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
「日本Seleniumユーザーコミュニティ」のエキスパートが教えるSelenium最新事情連載記事一覧

もっと読む

この記事の著者

松尾 和昭(マツオ カズアキ)

 2014年からクックパッドに、2017年9月からは同社の海外事業部にてSoftware Enginner in Qualityとして日本国外を対象としたサービスの品質・テスト関連の活動に主に関わる。Appiumプロジェクトのテクニカルコミッターとしても活動している。複雑系が技術的な興味の対象。 Twitter: @Kazu_cocoa GitHub: https://github.com/KazuCocoa

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/10545 2017/12/05 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング