初投稿
#やること
Android・iOSそれぞれの実機で実行するところまで
普通にやるとエラーだらけな上に情報少ないのでまとめる
#インストール
公式
http://appium.io/
node.jsが必要
なければhttps://nodejs.org/
自分の時はnodeのバージョンいくつか試した結果v0.12.7を使ってるので
https://nodejs.org/en/blog/release/v0.12.7/ からMacOS用インストール
> brew install node # get node.js
> npm install -g appium # get appium
> npm install wd # get appium client
> appium & # start appium
appium自体はただのhttpサーバーなので起動までできたらテストコードを準備する
自分の場合起動コマンドは下記にしてる
nohup appium --no-reset >> /path/to/tmp/appium.log 2>>/path/to/tmp/appium.log < /dev/null &
##テストコード
テストコードはappiumのgithubレポジトリに各言語でsampleが置いてあるのでとりあえずそれを流用
https://github.com/appium/sample-code/
2015/11現在では下記言語が使えるらしい
dotnet
java
node
perl
php
python
ruby
※dotnetはC#
#Androidで実行
自分の場合、まずnode.jsで試したので下記実行してみる
cd sample-code/examples/node/
node android-simple.js
###エラー1
で、普通は下記のようなエラーが出る
module.js:338
throw err;
^
Error: Cannot find module 'wd'
at Function.Module._resolveFilename (module.js:336:15)
at Function.Module._load (module.js:278:25)
at Module.require (module.js:365:17)
at require (module.js:384:17)
このandroid-simple.jsのコードは実機かシミュレータにsample-code/apps/ApiDemos/bin/ApiDemos-debug.apkをインストールして.elementByAccessibilityId('Graphics').click()等してくれるテストです。
wdはWebDriverモジュールの略?で指定したアプリをインストール等してくれます。
実は下記のREADME.mdにやり方書いてあって
https://github.com/appium/sample-code/tree/master/sample-code/examples/node
npm install -g -f mocha
npm install
が必要
###エラー2
npm install後nodeコマンドじゃなくてmochaコマンドで実行
mocha android-simple.js
- android simple "before all" hook:
[init({"browserName":"","appium-version":"1.3","platformName":"Android","platformVersion":"4.4.2","deviceName":"Android Emulator","app":"http://appium.github.io/appium/assets/ApiDemos-debug.apk"})] connect ECONNREFUSED
インストール時のコマンドで実行してれば出ないけど、appiumに繋がらないよエラー。
ターミナルでappiumコマンド実行
###エラー3
再び下記実行
mocha android-simple.js
多分こんなエラー出る
- android simple "before all" hook:
Error: [init({"browserName":"","appium-version":"1.3","platformName":"Android","platformVersion":"4.4.2","deviceName":"Android Emulator","app":"http://appium.github.io/appium/assets/ApiDemos-debug.apk"})] The environment you requested was unavailable.
at node_modules/wd/lib/webdriver.js:129:15
これだとリクエスト失敗したよってことしか分からないので、appium.log側見る
info: [debug] Error: Could not find adb. Please set the ANDROID_HOME environment variable with the Android SDK root directory path.
環境変数が足りないよう。
export ANDROID_HOME="/path/to/adt-bundle-mac-x86_64/sdk"
して下記コマンドでチェックする
appium-doctor --android
✖ JAVA_HOME is not set
JAVA_HOMEも足りないと言われるので下記セット
export ANDROID_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home"
※JAVA_HOME確認は下記
/usr/libexec/java_home -V
###エラー4
再び下記実行
mocha android-simple.js
成功すると、一瞬アプリの画面が立ち上がってからquitされる。
Driving the web on session: 976c-fe5-b0f7-4b8c-a808-8703615057c7
RESPONSE init({"browserName":"","appium-version":"1.3","platformName":"Android","platformVersion":"4.4.2","deviceName":"Android Emulator","app":"http://appium.github.io/appium/assets/ApiDemos-debug.apk"}) "9712-fe5-b0f7-4b8c-a808-8703615057c7",null
CALL setImplicitWaitTimeout(3000)
POST /session/:sessionID/timeouts/implicit_wait {"ms":3000}
RESPONSE setImplicitWaitTimeout(3000)
CALL elementByAccessibilityId("Graphics")
POST /session/:sessionID/element {"using":"accessibility id","value":"Graphics"}
✓ should find an element (78ms)
CALL quit()
DELETE /session/:sessionID
Ending your web drivage..
RESPONSE quit()
1 passing (10s)
現状自分が確認できたのはここまで。
###Androidは以上。
#iOSシミュレータで実行
mocha ios-simple.js
まぁ、大体こうなる
###エラー5
- ios simple "before all" hook:
Error: [init({"browserName":"","appium-version":"1.3","platformName":"iOS","platformVersion":"8.1","deviceName":"iPhone Simulator","app":"http://appium.github.io/appium/assets/TestApp7.1.app.zip"})] The environment you requested was unavailable.
at node_modules/wd/lib/webdriver.js:129:15
The environment you requested was unavailableはリクエストができませんよ的な。このエラーほんとわかりにくいですがappium.logを見ます
info: [debug] Final device string is: 'iPhone 6 (8.1)'
error: Could not find a device to launch. You requested 'iPhone 6 (8.1)', but the available devices were: ["iPad 2 (8.4) [106BB5B1-B349-418A-8002-1510F0A5E029]","iPad 2 (9.0) [102D14B1-97A3-4396-ADD5-A835C9EE3CAD]","iPad Air (8.4) [10E00B31-BF1C-43DF-ABCD-D744BC28066E]","iPad Air (9.0) [10F6B26F-AD90-484A-85B7-5EDC01BCC834]","iPad Air 2 (9.0) [10982FDB-9B87-4ABE-BD56-91C90891B18D]","iPad Retina (8.4) [104CF10E-3172-4AE5-A47B-9072292A5A29]","iPad Retina (9.0) [106321B4-1984-40F8-AFEF-2557F225CD23]","iPhone 4s (8.4) [102F7E17-EB7E-461E-B4AB-96A3DD60986E]","iPhone 4s (9.0) [10024631-B9D8-46E2-A086-51CD112E10AE]","iPhone 5 (8.4) [1052C1F3-C896-43D8-92FB-7B13B7807553]","iPhone 5 (9.0) [10253E08-1A22-484F-979D-60EE4727DF74]","iPhone 5s (8.4) [10876010-D90A-4C11-B742-C3DBB821BBC8]","iPhone 5s (9.0) [1050E22B-7762-43E8-B21B-59A98245E968]","iPhone 6 (8.4) [105CF89D-48BC-4A2C-B8FD-0817F4969032]","iPhone 6 (9.0) [10669B9D-1CE5-4B9B-8F68-5A84E6B244E4]","iPhone 6 (9.0) + Apple Watch - 38mm (2.0) [10B2D2DD-F2CC-437E-986E-2BAA08B52DE8]","iPhone 6 Plus (8.4) [104969B4-9BE5-4B2C-84FB-E20474320DC6]","iPhone 6 Plus (9.0) [10B0E1BC-F7FD-4BDF-8D56-A2D22F74F13C]","iPhone 6 Plus (9.0) + Apple Watch - 42mm (2.0) [1057ED9C-FD6B-43C5-B948-7E75900588C3]","iPhone 6s (9.0) [1039E0E5-8E47-4135-96F9-936D9EF0961E]","iPhone 6s Plus (9.0) [10E84F5B-3BF1-47EA-BAB9-1612649CD681]"]
info: [debug] Cleaning up appium session
指定した"iPhone 6 (8.1)"というデバイスが使えませんというエラー
###エラー5修正
使えるやつが一覧で出てきてくれるので適当に選んでコードを修正
iOSの端末指定はhelpers/caps.jsの中で下記のように指定していると思います
browserName: '',
'appium-version': '1.3',
platformName: 'iOS',
platformVersion: '8.1',
deviceName: 'iPhone 6',
app: undefined // will be set later
自分の場合はplatformVersionを8.4に書き換えて再度実行
シミュレータが起動すれば成功です
###iOSシミュレータ以上
#iOS実機で実行
driver.initしてるオプションで実機かシミュレータか指定できます
上記エラー5で修正したものを書き換え
'appium-version': '1.3',
platformName: "iOS",
platformVersion: "9.1",
deviceName: 'summerのiPad',
udid:'7v0zn7kb5ijfgyl89of4wl5flk14ujifhogehoge',
app: undefined // will be set later
上記修正して実行
#エラー6
mocha ios-simple.js
info: [debug] Couldn't find ideviceinstaller, trying built-in at /usr/local/lib/node_modules/appium/build/libimobiledevice-macosx/ideviceinstaller
error: Could not initialize ideviceinstaller; make sure it is installed and works on your system
info: [debug] Cleaning up appium session
error: Failed to start an Appium session, err was: Error: Could not initialize ideviceinstaller; make sure it is installed and works on your system
実機のインストールには「ideviceinstaller」というツールが使われています。
http://macappstore.org/ideviceinstaller/
brew install ideviceinstaller
で入ると思います。
#エラー7
error: Failed to start an Appium session, err was: Error: Command failed: /bin/sh -c ideviceinstaller -u 7v0zn7kb5ijfgyl89of4wl5flk14ujifhogehoge -i /var/folders/68/g7lphy394fb4gf7fl909s4lm0000gn/T/115108-56392-axrap7/TestApp.app
info: [debug] Error: Command failed: /bin/sh -c ideviceinstaller -u 7v0zn7kb5ijfgyl89of4wl5flk14ujifhogehoge -i /var/folders/68/g7lphy394fb4gf7fl909s4lm0000gn/T/115108-56392-axrap7/TestApp.app
at ChildProcess.exithandler (child_process.js:751:12)
at ChildProcess.emit (events.js:110:17)
at maybeClose (child_process.js:1015:16)
at Socket. (child_process.js:1183:11)
at Socket.emit (events.js:107:17)
at Pipe.close (net.js:485:12)
ideviceinstaller起動に失敗してるようです
コマンドで直打ちしてみます
appium ideviceinstaller -u b42a6441d5f5fae583a97938d1e9ffb43a14a20c -i /var/folders/68/g7lphy394fb4gf7fl909s4lm0000gn/T/115108-56392-axrap7/TestApp.app
Uploading TestApp.app package contents... DONE.
Installing '(null)'
- CreatingStagingDirectory (5%)
- ExtractingPackage (15%)
- InspectingPackage (20%)
- TakingInstallLock (20%)
- PreflightingApplication (30%)
- VerifyingApplication (40%)
- Error occurred: ApplicationVerificationFailed
ビルド設定周りがうまくいってないようです。
端末設定のapp:をXcode上でビルドできる自分のアプリのBundle Identifierにすると起動成功。
#Appium Inspectorによるエレメント解析+コード生成
こんな感じでできる
https://www.youtube.com/watch?v=6ARqrN-d8TI
…はずだがそのままだとうまくいかなかったので下記にやり方を追記
##やりかた
http://appium.io/
からdmgダウンロード&インストール
Launch押すと普通はappiumサーバーが起動するらしいが、自分の場合はなにを設定してもLaunching Appium with command: から先に進まなかった
--logのオプション追加してもlog出力されないので直コマンドで起動したらサーバー起動した
/Applications/Appium.app/Contents/Resources/node/bin/node lib/server/main.js --command-timeout "7200" --debug-log-spacing --log "/tmp/appium.log" --log-level "debug" --automation-name "Appium" --platform-name "Android" --platform-version "4.4" --app-pkg "" --app-activity "" --device-name ""
ターミナルで↑起動しつつ、AppiumのGUI上にある虫眼鏡ボタンをクリックするとInspectorが起動できた
#以上