この記事はselenium_and_appiumアドベントカレンダー2016の20日目の記事です。
はじめに
TEISHISEIです!語弊を恐れず書きます!お手柔らかにー
上のgifは弊社のSTF環境で実行したAndroid端末のSelenium(Appium,Selendroid)並列実行です。
STFとはリモート(ブラウザ)でAndroidの実機操作を行うツールです。STFの方が気になる方はこちらへ。
Androidで動かしたい
Androidでブラウザテストがしたい場合、かなり複雑ですよね。
- Android2.3以上ならSelendroid
- Android4.2以上ならAppium
- Chromeを使いたいならAndroid4.2以上
- Chromeをインストールしている
- Android Chromeのversionは43.0.2357.0以上
- Browserを使いたいならAndroid4.4以上
- Browserがインストールされているか(com.android.browserでないといけない。メーカー独自のBrowserだと動かない)
- Chromeを使いたいならAndroid4.2以上
そしてdriverインスタンス作成時のconfigとかがそれ毎に違ってたりして複雑。調べるのも結構大変。
なので並列実行できるRuby用のSelenium(Appium,Selendroid)のラッパーを作りました。
実行できるブラウザとツールを判定して勝手にいろいろ設定してくれます。
インストール
すいません。まだちゃんとテストできてないので公開はしていません。
gitから落として手動でbuildする必要があります。
$ git clone https://github.com/arakawamoriyuki/android_webdriver.git
$ cd android_webdriver
$ gem build android_webdriver.gemspec
そしてGemfileにbuild後にでてきたgemを指定。
gem '/path/to/android_webdriver-x.x.x.gem'
使い方
古いAndroid2.3も実行できるようにselendroid-standalone.jarをダウンロードしてください。
実行できる環境にあるのか、下記で検証できます。
$ bundle exec android_webdriver doctor
シンプルにudidを指定して1端末実行
require 'android_webdriver'
udid = 'xxxxxxxxxxxxx' # udidを調べて設定してください
driver = AndroidWebDriver.for(udid)
driver.navigate.to 'https://www.google.co.jp'
driver.quit
オプションを指定して1端末実行
require 'android_webdriver'
udid = 'xxxxxxxxxxxxx' # udidを調べて設定してください
driver = AndroidWebDriver.for(udid, {
## 実行したいブラウザ名. (Chrome or Browser or Selendroid)
# 指定がなければ自動で選択。
browserName: 'Chrome'
## selendroid-standalone.jarのパスを指定
# selendroid-standalone.jarをダウンロードしてください。デフォルトではfindコマンドを使って、下層ディレクトリから検索したパスを利用します。
# `find . -name 'selendroid-standalone-*.*.*-with-dependencies.jar' -type f`
selendroidPath: './selendroid-standalone-*.*.*-with-dependencies.jar'
## 各ポートを設定します。
# デフォルトで空きポートを調べて設定してくれます。
port: '4444'
bootstrapPort: '4445'
selendroidPort: '4446'
chromedriverPort: '4447'
## ログの吐き出し
logPath: "./log/#{Time.now.strftime('%Y%m%d%H%M%S')}.#{udid}.log"
})
driver.navigate.to 'https://www.google.co.jp'
driver.quit
複数端末を直列で実行
require 'android_webdriver'
udids = [udid,udid,udid...] # udidを調べて設定してください
AndroidWebDriver::MultiDevices.sequential(udids) do |driver|
driver.navigate.to 'https://www.google.co.jp'
driver.quit
end
複数端末を並列で実行
require 'android_webdriver'
udids = [udid,udid,udid...] # udidを調べて設定してください
AndroidWebDriver::MultiDevices.parallel(udids) do |driver|
driver.navigate.to 'https://www.google.co.jp'
driver.quit
end
さいごに
記事作成までに間に合わず、まだバグがあるはずです。。
unix系osだと動くはず(未検証)。
次の記事はtadashi0713さんです。
appiumについて書いてくれるとの事で期待してます!