Help us understand the problem. What is going on with this article?

Appium インストールして起動まで/ iOS・Androidのトラブルシューティング

More than 3 years have passed since last update.

初投稿

やること

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

1) 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
多分こんなエラー出る

1) 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

1) 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ダウンロード&インストール

起動するとこんな感じ
スクリーンショット 2015-11-08 18.45.52.png

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が起動できた

以上

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away