App Inspector 是運行在瀏覽器端的移動設備 UI 查看器,使用樹狀態結構查看 UI 布局,並且能自動生成 XPath,方便腳本的編寫和生成。
1、安裝app-inspector:npm install app-inspector -g
不需要配置環境變量
若是要卸載原有的:npm uninstall app-inspector -g
npm cache clean (清除緩存)
2、使用app-inspector
打開終端啟動服務:輸入macaca server --verbose
打開另一個終端:輸入app-inspector -u 設備id
設備id通過adb devices 獲取
然后在瀏覽器里面打開輸出的鏈接:如 http://192.168.2.100:5678
若是出現以下錯誤:
C:\Users\abc>app-inspector -u GWY0217406000483 { Error: Command failed: D:\android-sdk-windows/platform-tools/adb -s GWY0217406000483 shell "pm install -r "/data/local/tmp/com.macaca.android.testin g"" Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE: Package com.macaca.android.testing signatures do not match the previously installed version; ignoring!] at ChildProcess.exithandler (child_process.js:275:12) at emitTwo (events.js:126:13) at ChildProcess.emit (events.js:214:7) at maybeClose (internal/child_process.js:925:16) at Process.ChildProcess._handle.onexit (internal/child_process.js:209:5) killed: false, code: 1, signal: null, cmd: 'D:\\android-sdk-windows/platform-tools/adb -s GWY0217406000483 shell "pm install -r "/data/local/tmp/com.macaca.android.testing""' }
解決是將手機上的應用程序給刪除,如下圖:
刪除后在執行一遍:
點擊頁面元素,即可獲取resource-id和xpath
若切換頁面,需現在手機上切換,然后刷新瀏覽器,則獲取手機的最新頁面
安裝信息:
C:\Users\yl>npm install uirecorder -g npm WARN deprecated hawk@3.1.3: This module moved to @hapi/hawk. Please make sure to switch over as this distribution is no longer supported and may contain bugs an d critical security issues. npm WARN deprecated cryptiles@2.0.5: This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest ver sion to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/com mercial). npm WARN deprecated hoek@2.16.3: This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commerc ial). npm WARN deprecated boom@2.10.1: This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commerc ial). npm WARN deprecated sntp@1.0.9: This module moved to @hapi/sntp. Please make sure to switch over as this distribution is no longer supported and may contain bugs an d critical security issues. C:\Users\yl\AppData\Roaming\npm\uirecorder -> C:\Users\yl\AppData\Roaming\npm\node_modules\uirecorder\bin\uirecorder npm WARN update-linked node_modules\uirecorder\node_modules\ansi-styles needs updating to 2.2.1 from 3.2.1 but we can't, as it's a symlink npm WARN update-linked node_modules\uirecorder\node_modules\extsprintf needs updating to 1.3.0 from 1.4.0 but we can't, as it's a symlink npm WARN update-linked node_modules\uirecorder\node_modules\strip-ansi needs updating to 3.0.1 from 4.0.0 but we can't, as it's a symlink npm WARN update-linked node_modules\uirecorder\node_modules\chalk needs updating to 1.1.3 from 2.4.2 but we can't, as it's a symlink npm WARN update-linked node_modules\uirecorder\node_modules\readable-stream needs updating to 2.3.6 from 3.3.0 but we can't, as it's a symlink npm WARN update-linked node_modules\uirecorder\node_modules\fstream needs updating to 1.0.12 from 1.0.11 but we can't, as it's a symlink npm WARN update-linked node_modules\uirecorder\node_modules\jwebdriver needs updating to 2.3.0 from 2.2.6 but we can't, as it's a symlink > chromedriver@2.46.0 install C:\Users\yl\AppData\Roaming\npm\node_modules\uirecorder\node_modules\chromedriver > node install.js ChromeDriver binary exists. Validating... ChromeDriver 2.46.628402 (536cd7adbad73a3783fdc2cab92ab2ba7ec361e1) ChromeDriver is already available at 'C:\Users\yl\AppData\Local\Temp\2.46\chromedriver\chromedriver.exe'. Copying to target path C:\Users\yl\AppData\Roaming\npm\node_modules\uirecorder\node_modules\chromedriver\lib\chromedriver Done. ChromeDriver binary available at C:\Users\yl\AppData\Roaming\npm\node_modules\uirecorder\node_modules\chromedriver\lib\chromedriver\chromedriver.exe > websocket@1.0.22 install C:\Users\yl\AppData\Roaming\npm\node_modules\uirecorder\node_modules\websocket > (node-gyp rebuild 2> builderror.log) || (exit 0) C:\Users\yl\AppData\Roaming\npm\node_modules\uirecorder\node_modules\websocket>if not defined npm_config_node_gyp (node "C:\Users\yl\AppData\Roaming\npm\n ode_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild ) else (node "" rebuild ) - delegates@1.0.0 node_modules\uirecorder\node_modules\_are-we-there-yet@1.1.5@are-we-there-yet\node_modules\delegates - array-uniq@1.0.3 node_modules\uirecorder\node_modules\_array-union@1.0.2@array-union\node_modules\array-uniq - lodash@4.17.11 node_modules\uirecorder\node_modules\_async@2.1.2@async\node_modules\lodash - tweetnacl@0.14.5 node_modules\uirecorder\node_modules\_bcrypt-pbkdf@1.0.2@bcrypt-pbkdf\node_modules\tweetnacl - hoek@2.16.3 node_modules\uirecorder\node_modules\_boom@2.10.1@boom\node_modules\hoek - balanced-match@1.0.0 node_modules\uirecorder\node_modules\_brace-expansion@1.1.11@brace-expansion\node_modules\balanced-match - concat-map@0.0.1 node_modules\uirecorder\node_modules\_brace-expansion@1.1.11@brace-expansion\node_modules\concat-map - assertion-error@1.1.0 node_modules\uirecorder\node_modules\_chai@3.5.0@chai\node_modules\assertion-error - type-detect@1.0.0 node_modules\uirecorder\node_modules\_chai@3.5.0@chai\node_modules\type-detect - escape-string-regexp@1.0.5 node_modules\uirecorder\node_modules\_chalk@2.4.2@chalk\node_modules\escape-string-regexp - graceful-fs@4.1.15 node_modules\uirecorder\node_modules\_cmd-shim@2.0.2@cmd-shim\node_modules\graceful-fs - co-thread@0.0.1 node_modules\uirecorder\node_modules\_co-parallel@1.0.0@co-parallel\node_modules\co-thread - color-convert@1.9.3 node_modules\uirecorder\node_modules\_ansi-styles@3.2.1@ansi-styles\node_modules\color-convert - ansi-styles@3.2.1 node_modules\uirecorder\node_modules\_chalk@2.4.2@chalk\node_modules\ansi-styles - delayed-stream@1.0.0 node_modules\uirecorder\node_modules\_combined-stream@1.0.8@combined-stream\node_modules\delayed-stream - boom@2.10.1 node_modules\uirecorder\node_modules\_cryptiles@2.0.5@cryptiles\node_modules\boom - type-detect@0.1.1 node_modules\uirecorder\node_modules\_deep-eql@0.1.3@deep-eql\node_modules\type-detect - deep-eql@0.1.3 node_modules\uirecorder\node_modules\_chai@3.5.0@chai\node_modules\deep-eql - ast-types@0.12.4 node_modules\uirecorder\node_modules\_degenerator@1.0.4@degenerator\node_modules\ast-types - esprima@3.1.3 node_modules\uirecorder\node_modules\_degenerator@1.0.4@degenerator\node_modules\esprima - jsbn@0.1.1 node_modules\uirecorder\node_modules\_ecc-jsbn@0.1.2@ecc-jsbn\node_modules\jsbn - safer-buffer@2.1.2 node_modules\uirecorder\node_modules\_ecc-jsbn@0.1.2@ecc-jsbn\node_modules\safer-buffer - is-arrayish@0.2.1 node_modules\uirecorder\node_modules\_error-ex@1.3.2@error-ex\node_modules\is-arrayish - es6-promisify@5.0.0 node_modules\uirecorder\node_modules\_agent-base@4.2.1@agent-base\node_modules\es6-promisify - esprima@3.1.3 node_modules\uirecorder\node_modules\_escodegen@1.11.1@escodegen\node_modules\esprima - estraverse@4.2.0 node_modules\uirecorder\node_modules\_escodegen@1.11.1@escodegen\node_modules\estraverse - esutils@2.0.2 node_modules\uirecorder\node_modules\_escodegen@1.11.1@escodegen\node_modules\esutils - source-map@0.6.1 node_modules\uirecorder\node_modules\_escodegen@1.11.1@escodegen\node_modules\source-map - chardet@0.4.2 node_modules\uirecorder\node_modules\_external-editor@2.2.0@external-editor\node_modules\chardet - debug@2.6.9 node_modules\uirecorder\node_modules\_extract-zip@1.6.7@extract-zip\node_modules\debug - graceful-fs@4.1.15 node_modules\uirecorder\node_modules\_fs-extra@0.26.7@fs-extra\node_modules\graceful-fs - path-is-absolute@1.0.1 node_modules\uirecorder\node_modules\_fs-extra@0.26.7@fs-extra\node_modules\path-is-absolute - graceful-fs@4.1.15 node_modules\uirecorder\node_modules\_fstream@1.0.11@fstream\node_modules\graceful-fs - inherits@2.0.3 node_modules\uirecorder\node_modules\_fstream@1.0.11@fstream\node_modules\inherits - xregexp@2.0.0 node_modules\uirecorder\node_modules\_ftp@0.3.10@ftp\node_modules\xregexp - aproba@1.2.0 node_modules\uirecorder\node_modules\_gauge@2.7.4@gauge\node_modules\aproba - console-control-strings@1.1.0 node_modules\uirecorder\node_modules\_gauge@2.7.4@gauge\node_modules\console-control-strings - has-unicode@2.0.1 node_modules\uirecorder\node_modules\_gauge@2.7.4@gauge\node_modules\has-unicode - object-assign@4.1.1 node_modules\uirecorder\node_modules\_gauge@2.7.4@gauge\node_modules\object-assign - signal-exit@3.0.2 node_modules\uirecorder\node_modules\_gauge@2.7.4@gauge\node_modules\signal-exit - is-property@1.0.2 node_modules\uirecorder\node_modules\_generate-function@2.3.1@generate-function\node_modules\is-property - data-uri-to-buffer@2.0.1 node_modules\uirecorder\node_modules\_get-uri@2.0.3@get-uri\node_modules\data-uri-to-buffer - extend@3.0.2 node_modules\uirecorder\node_modules\_get-uri@2.0.3@get-uri\node_modules\extend - file-uri-to-path@1.0.0 node_modules\uirecorder\node_modules\_get-uri@2.0.3@get-uri\node_modules\file-uri-to-path - ftp@0.3.10 node_modules\uirecorder\node_modules\_get-uri@2.0.3@get-uri\node_modules\ftp - array-union@1.0.2 node_modules\uirecorder\node_modules\_globby@6.1.0@globby\node_modules\array-union - object-assign@4.1.1 node_modules\uirecorder\node_modules\_globby@6.1.0@globby\node_modules\object-assign - pify@2.3.0 node_modules\uirecorder\node_modules\_globby@6.1.0@globby\node_modules\pify - array-parallel@0.1.3 node_modules\uirecorder\node_modules\_gm@1.23.0@gm\node_modules\array-parallel - array-series@0.1.5 node_modules\uirecorder\node_modules\_gm@1.23.0@gm\node_modules\array-series - commander@2.20.0 node_modules\uirecorder\node_modules\_har-validator@2.0.6@har-validator\node_modules\commander - ansi-regex@2.1.1 node_modules\uirecorder\node_modules\_has-ansi@2.0.0@has-ansi\node_modules\ansi-regex - has-ansi@2.0.0 node_modules\uirecorder\node_modules\_chalk@1.1.3@chalk\node_modules\has-ansi - ms@2.1.1 node_modules\uirecorder\node_modules\_humanize-ms@1.2.1@humanize-ms\node_modules\ms - humanize-ms@1.2.1 node_modules\uirecorder\node_modules\_agentkeepalive@3.5.2@agentkeepalive\node_modules\humanize-ms - iconv-lite@0.4.24 node_modules\uirecorder\node_modules\_external-editor@2.2.0@external-editor\node_modules\iconv-lite - number-is-nan@1.0.1 node_modules\uirecorder\node_modules\_is-fullwidth-code-point@1.0.0@is-fullwidth-code-point\node_modules\number-is-nan - is-my-json-valid@2.20.0 node_modules\uirecorder\node_modules\_har-validator@2.0.6@har-validator\node_modules\is-my-json-valid - graceful-fs@4.1.15 node_modules\uirecorder\node_modules\_jsonfile@2.4.0@jsonfile\node_modules\graceful-fs - jsonfile@2.4.0 node_modules\uirecorder\node_modules\_fs-extra@0.26.7@fs-extra\node_modules\jsonfile - assert-plus@1.0.0 node_modules\uirecorder\node_modules\_jsprim@1.4.1@jsprim\node_modules\assert-plus - extsprintf@1.3.0 node_modules\uirecorder\node_modules\_jsprim@1.4.1@jsprim\node_modules\extsprintf - json-schema@0.2.3 node_modules\uirecorder\node_modules\_jsprim@1.4.1@jsprim\node_modules\json-schema - pako@0.2.9 node_modules\uirecorder\node_modules\_jszip@2.5.0@jszip\node_modules\pako - xtend@4.0.1 node_modules\uirecorder\node_modules\_jwebdriver@2.2.6@jwebdriver\node_modules\xtend - klaw@1.3.1 node_modules\uirecorder\node_modules\_fs-extra@0.26.7@fs-extra\node_modules\klaw - invert-kv@1.0.0 node_modules\uirecorder\node_modules\_lcid@1.0.0@lcid\node_modules\invert-kv - prelude-ls@1.1.2 node_modules\uirecorder\node_modules\_levn@0.3.0@levn\node_modules\prelude-ls - lru-cache@4.1.5 node_modules\uirecorder\node_modules\_cross-spawn@4.0.2@cross-spawn\node_modules\lru-cache - minimist@1.2.0 node_modules\uirecorder\node_modules\_make-plural@3.0.6@make-plural\node_modules\minimist - xregexp@2.0.0 node_modules\uirecorder\node_modules\_math-interval-parser@1.1.0@math-interval-parser\node_modules\xregexp - mkdirp@0.5.1 node_modules\uirecorder\node_modules\_cmd-shim@2.0.2@cmd-shim\node_modules\mkdirp - mkdirp@0.5.1 node_modules\uirecorder\node_modules\_extract-zip@1.6.7@extract-zip\node_modules\mkdirp - mkdirp@0.5.1 node_modules\uirecorder\node_modules\_fstream@1.0.11@fstream\node_modules\mkdirp - any-promise@1.3.0 node_modules\uirecorder\node_modules\_mz@2.7.0@mz\node_modules\any-promise - object-assign@4.1.1 node_modules\uirecorder\node_modules\_mz@2.7.0@mz\node_modules\object-assign - jszip@2.5.0 node_modules\uirecorder\node_modules\_node-zip@1.1.1@node-zip\node_modules\jszip - node-zip@1.1.1 node_modules\uirecorder\node_modules\_jwebdriver@2.2.6@jwebdriver\node_modules\node-zip - wrappy@1.0.2 node_modules\uirecorder\node_modules\_once@1.4.0@once\node_modules\wrappy - once@1.4.0 node_modules\uirecorder\node_modules\_end-of-stream@1.4.1@end-of-stream\node_modules\once - glob@7.1.4 node_modules\uirecorder\node_modules\_globby@6.1.0@globby\node_modules\glob - mimic-fn@1.2.0 node_modules\uirecorder\node_modules\_onetime@2.0.1@onetime\node_modules\mimic-fn - cli-spinners@1.3.1 node_modules\uirecorder\node_modules\_ora@1.4.0@ora\node_modules\cli-spinners - log-symbols@2.2.0 node_modules\uirecorder\node_modules\_ora@1.4.0@ora\node_modules\log-symbols - minimist@1.2.0 node_modules\uirecorder\node_modules\_osx-release@1.1.0@osx-release\node_modules\minimist - pinkie-promise@2.0.1 node_modules\uirecorder\node_modules\_globby@6.1.0@globby\node_modules\pinkie-promise - pinkie-promise@2.0.1 node_modules\uirecorder\node_modules\_har-validator@2.0.6@har-validator\node_modules\pinkie-promise - co@4.6.0 node_modules\uirecorder\node_modules\_promiseclass@1.0.3@promiseclass\node_modules\co - promiseclass@1.0.3 node_modules\uirecorder\node_modules\_jwebdriver@2.2.6@jwebdriver\node_modules\promiseclass - core-util-is@1.0.2 node_modules\uirecorder\node_modules\_readable-stream@2.3.6@readable-stream\node_modules\core-util-is - inherits@2.0.3 node_modules\uirecorder\node_modules\_readable-stream@2.3.6@readable-stream\node_modules\inherits - isarray@1.0.0 node_modules\uirecorder\node_modules\_readable-stream@2.3.6@readable-stream\node_modules\isarray - process-nextick-args@2.0.0 node_modules\uirecorder\node_modules\_readable-stream@2.3.6@readable-stream\node_modules\process-nextick-args - safe-buffer@5.1.2 node_modules\uirecorder\node_modules\_readable-stream@2.3.6@readable-stream\node_modules\safe-buffer - util-deprecate@1.0.2 node_modules\uirecorder\node_modules\_readable-stream@2.3.6@readable-stream\node_modules\util-deprecate - stringstream@0.0.6 node_modules\uirecorder\node_modules\_request@2.79.0@request\node_modules\stringstream - jpeg-js@0.2.0 node_modules\uirecorder\node_modules\_resemblejs-node@1.0.0@resemblejs-node\node_modules\jpeg-js - pngjs@3.2.0 node_modules\uirecorder\node_modules\_resemblejs-node@1.0.0@resemblejs-node\node_modules\pngjs - cli-cursor@2.1.0 node_modules\uirecorder\node_modules\_ora@1.4.0@ora\node_modules\cli-cursor - rimraf@2.6.3 node_modules\uirecorder\node_modules\_fs-extra@0.26.7@fs-extra\node_modules\rimraf - rimraf@2.6.3 node_modules\uirecorder\node_modules\_fstream@1.0.11@fstream\node_modules\rimraf - is-promise@2.1.0 node_modules\uirecorder\node_modules\_run-async@2.3.0@run-async\node_modules\is-promise - debug@2.6.9 node_modules\uirecorder\node_modules\_runscript@1.3.0@runscript\node_modules\debug - is-type-of@1.2.1 node_modules\uirecorder\node_modules\_runscript@1.3.0@runscript\node_modules\is-type-of - graceful-fs@4.1.15 node_modules\uirecorder\node_modules\_safefs@3.2.2@safefs\node_modules\graceful-fs - hoek@2.16.3 node_modules\uirecorder\node_modules\_sntp@1.0.9@sntp\node_modules\hoek - hawk@3.1.3 node_modules\uirecorder\node_modules\_request@2.79.0@request\node_modules\hawk - asn1@0.2.4 node_modules\uirecorder\node_modules\_sshpk@1.16.1@sshpk\node_modules\asn1 - assert-plus@1.0.0 node_modules\uirecorder\node_modules\_sshpk@1.16.1@sshpk\node_modules\assert-plus - bcrypt-pbkdf@1.0.2 node_modules\uirecorder\node_modules\_sshpk@1.16.1@sshpk\node_modules\bcrypt-pbkdf - dashdash@1.14.1 node_modules\uirecorder\node_modules\_sshpk@1.16.1@sshpk\node_modules\dashdash - ecc-jsbn@0.1.2 node_modules\uirecorder\node_modules\_sshpk@1.16.1@sshpk\node_modules\ecc-jsbn - getpass@0.1.7 node_modules\uirecorder\node_modules\_sshpk@1.16.1@sshpk\node_modules\getpass - jsbn@0.1.1 node_modules\uirecorder\node_modules\_sshpk@1.16.1@sshpk\node_modules\jsbn - safer-buffer@2.1.2 node_modules\uirecorder\node_modules\_sshpk@1.16.1@sshpk\node_modules\safer-buffer - tweetnacl@0.14.5 node_modules\uirecorder\node_modules\_sshpk@1.16.1@sshpk\node_modules\tweetnacl - string_decoder@1.1.1 node_modules\uirecorder\node_modules\_readable-stream@2.3.6@readable-stream\node_modules\string_decoder - readable-stream@2.3.6 node_modules\uirecorder\node_modules\_are-we-there-yet@1.1.5@are-we-there-yet\node_modules\readable-stream - concat-stream@1.6.2 node_modules\uirecorder\node_modules\_extract-zip@1.6.7@extract-zip\node_modules\concat-stream - readable-stream@2.3.6 node_modules\uirecorder\node_modules\_duplexer2@0.1.4@duplexer2\node_modules\readable-stream - code-point-at@1.1.0 node_modules\uirecorder\node_modules\_string-width@1.0.2@string-width\node_modules\code-point-at - ansi-regex@2.1.1 node_modules\uirecorder\node_modules\_strip-ansi@3.0.1@strip-ansi\node_modules\ansi-regex - strip-ansi@3.0.1 node_modules\uirecorder\node_modules\_chalk@1.1.3@chalk\node_modules\strip-ansi - chalk@1.1.3 node_modules\uirecorder\node_modules\_har-validator@2.0.6@har-validator\node_modules\chalk - strip-ansi@3.0.1 node_modules\uirecorder\node_modules\_gauge@2.7.4@gauge\node_modules\strip-ansi - supports-color@5.5.0 node_modules\uirecorder\node_modules\_chalk@2.4.2@chalk\node_modules\supports-color - chalk@2.4.2 node_modules\uirecorder\node_modules\_ora@1.4.0@ora\node_modules\chalk - any-promise@1.3.0 node_modules\uirecorder\node_modules\_thenify@3.3.0@thenify\node_modules\any-promise - thenify-all@1.6.0 node_modules\uirecorder\node_modules\_mz@2.7.0@mz\node_modules\thenify-all - enable@1.3.2 node_modules\uirecorder\node_modules\_thunkify-wrap@1.0.4@thunkify-wrap\node_modules\enable - os-tmpdir@1.0.2 node_modules\uirecorder\node_modules\_tmp@0.0.33@tmp\node_modules\os-tmpdir - tmp@0.0.33 node_modules\uirecorder\node_modules\_external-editor@2.2.0@external-editor\node_modules\tmp - safe-buffer@5.1.2 node_modules\uirecorder\node_modules\_tunnel-agent@0.6.0@tunnel-agent\node_modules\safe-buffer - prelude-ls@1.1.2 node_modules\uirecorder\node_modules\_type-check@0.3.2@type-check\node_modules\prelude-ls - type-check@0.3.2 node_modules\uirecorder\node_modules\_levn@0.3.0@levn\node_modules\type-check - optionator@0.8.2 node_modules\uirecorder\node_modules\_escodegen@1.11.1@escodegen\node_modules\optionator - escodegen@1.11.1 node_modules\uirecorder\node_modules\_degenerator@1.0.4@degenerator\node_modules\escodegen - editions@2.1.3 node_modules\uirecorder\node_modules\_typechecker@4.7.0@typechecker\node_modules\editions - is-typedarray@1.0.0 node_modules\uirecorder\node_modules\_typedarray-to-buffer@3.0.5@typedarray-to-buffer\node_modules\is-typedarray - punycode@2.1.1 node_modules\uirecorder\node_modules\_uri-js@4.2.2@uri-js\node_modules\punycode - any-promise@1.3.0 node_modules\uirecorder\node_modules\_urllib@2.34.0@urllib\node_modules\any-promise - content-type@1.0.4 node_modules\uirecorder\node_modules\_urllib@2.34.0@urllib\node_modules\content-type - debug@2.6.9 node_modules\uirecorder\node_modules\_urllib@2.34.0@urllib\node_modules\debug - digest-header@0.0.1 node_modules\uirecorder\node_modules\_urllib@2.34.0@urllib\node_modules\digest-header - ee-first@1.1.1 node_modules\uirecorder\node_modules\_urllib@2.34.0@urllib\node_modules\ee-first - formstream@1.1.0 node_modules\uirecorder\node_modules\_urllib@2.34.0@urllib\node_modules\formstream - humanize-ms@1.2.1 node_modules\uirecorder\node_modules\_urllib@2.34.0@urllib\node_modules\humanize-ms - iconv-lite@0.4.24 node_modules\uirecorder\node_modules\_urllib@2.34.0@urllib\node_modules\iconv-lite - ip@1.1.5 node_modules\uirecorder\node_modules\_urllib@2.34.0@urllib\node_modules\ip - proxy-agent@3.1.0 node_modules\uirecorder\node_modules\_urllib@2.34.0@urllib\node_modules\proxy-agent - pump@3.0.0 node_modules\uirecorder\node_modules\_urllib@2.34.0@urllib\node_modules\pump - qs@6.7.0 node_modules\uirecorder\node_modules\_urllib@2.34.0@urllib\node_modules\qs - statuses@1.5.0 node_modules\uirecorder\node_modules\_urllib@2.34.0@urllib\node_modules\statuses - address@1.1.0 node_modules\uirecorder\node_modules\_utility@0.1.11@utility\node_modules\address - utility@1.16.1 node_modules\uirecorder\node_modules\_urllib@2.34.0@urllib\node_modules\utility - verror@1.10.0 node_modules\uirecorder\node_modules\_jsprim@1.4.1@jsprim\node_modules\verror - which@1.3.1 node_modules\uirecorder\node_modules\_cross-spawn@4.0.2@cross-spawn\node_modules\which - cross-spawn@4.0.2 node_modules\uirecorder\node_modules\_gm@1.23.0@gm\node_modules\cross-spawn - gm@1.23.0 node_modules\uirecorder\node_modules\_jwebdriver@2.2.6@jwebdriver\node_modules\gm - wide-align@1.1.3 node_modules\uirecorder\node_modules\_gauge@2.7.4@gauge\node_modules\wide-align - os-name@1.0.3 node_modules\uirecorder\node_modules\_default-user-agent@1.0.0@default-user-agent\node_modules\os-name - default-user-agent@1.0.0 node_modules\uirecorder\node_modules\_urllib@2.34.0@urllib\node_modules\default-user-agent - yauzl@2.4.1 node_modules\uirecorder\node_modules\_extract-zip@1.6.7@extract-zip\node_modules\yauzl - _@types_node@8.10.48@@types node_modules\uirecorder\node_modules\_@types_node@8.10.48@@types C:\Users\yl\AppData\Roaming\npm `-- uirecorder@2.6.0 +-- async@2.1.2 | `-- lodash@4.17.11 +-- chai@3.5.0 | `-- type-detect@1.0.0 +-- chromedriver@2.46.0 | +-- del@3.0.0 | | +-- globby@6.1.0 | | | +-- array-union@1.0.2 | | | | `-- array-uniq@1.0.3 | | | +-- glob@7.1.4 deduped | | | +-- object-assign@4.1.1 deduped | | | `-- pinkie-promise@2.0.1 | | +-- is-path-cwd@1.0.0 | | +-- is-path-in-cwd@1.0.1 | | | `-- is-path-inside@1.0.1 | | | `-- path-is-inside@1.0.2 | | +-- p-map@1.2.0 | | +-- pify@3.0.0 | | `-- rimraf@2.6.3 deduped | +-- extract-zip@1.6.7 | | +-- concat-stream@1.6.2 | | | +-- buffer-from@1.1.1 | | | +-- inherits@2.0.3 deduped | | | +-- readable-stream@2.3.6 | | | | +-- core-util-is@1.0.2 deduped | | | | +-- inherits@2.0.3 deduped | | | | +-- isarray@1.0.0 | | | | +-- process-nextick-args@2.0.0 | | | | `-- string_decoder@1.1.1 | | | `-- typedarray@0.0.6 | | +-- debug@2.6.9 deduped | | +-- mkdirp@0.5.1 deduped | | `-- yauzl@2.4.1 | | `-- fd-slicer@1.0.1 | | `-- pend@1.2.0 | +-- mkdirp@0.5.1 | | `-- minimist@0.0.8 | +-- request@2.88.0 | | +-- aws-sign2@0.7.0 | | +-- caseless@0.12.0 | | +-- combined-stream@1.0.8 | | | `-- delayed-stream@1.0.0 | | +-- form-data@2.3.3 | | | +-- asynckit@0.4.0 | | | `-- mime-types@2.1.24 deduped | | +-- har-validator@5.1.3 | | | +-- ajv@6.10.0 | | | | +-- fast-deep-equal@2.0.1 | | | | `-- uri-js@4.2.2 | | | | `-- punycode@2.1.1 | | | `-- har-schema@2.0.0 | | +-- http-signature@1.2.0 | | | +-- jsprim@1.4.1 | | | | +-- json-schema@0.2.3 | | | | `-- verror@1.10.0 | | | | `-- core-util-is@1.0.2 deduped | | | `-- sshpk@1.16.1 | | | +-- asn1@0.2.4 | | | +-- dashdash@1.14.1 | | | +-- ecc-jsbn@0.1.2 | | | | `-- jsbn@0.1.1 deduped | | | +-- getpass@0.1.7 | | | `-- jsbn@0.1.1 | | +-- is-typedarray@1.0.0 | | +-- mime-types@2.1.24 | | | `-- mime-db@1.40.0 | | +-- oauth-sign@0.9.0 | | +-- qs@6.5.2 | | +-- tough-cookie@2.4.3 | | `-- uuid@3.3.2 deduped | `-- tcp-port-used@1.0.1 | +-- debug@4.1.0 | | `-- ms@2.1.1 | `-- is2@2.0.1 | +-- deep-is@0.1.3 | +-- ip-regex@2.1.0 | `-- is-url@1.2.4 +-- co@4.6.0 +-- commander@2.9.0 +-- fs-extra@1.0.0 | +-- graceful-fs@4.1.15 | +-- jsonfile@2.4.0 | | `-- graceful-fs@4.1.15 deduped | `-- klaw@1.3.1 | `-- graceful-fs@4.1.15 deduped +-- i18n@0.8.3 | +-- debug@2.6.9 | | `-- ms@2.0.0 deduped | +-- math-interval-parser@1.1.0 | | `-- xregexp@2.0.0 | +-- messageformat@0.3.1 | | +-- glob@6.0.4 | | | +-- inflight@1.0.6 | | | | `-- wrappy@1.0.2 | | | +-- inherits@2.0.3 deduped | | | +-- minimatch@3.0.4 | | | +-- once@1.4.0 | | | | `-- wrappy@1.0.2 deduped | | | `-- path-is-absolute@1.0.1 | | +-- nopt@3.0.6 | | | `-- abbrev@1.1.1 | | `-- watchr@2.4.13 | | +-- eachr@2.0.4 | | | `-- typechecker@2.1.0 deduped | | +-- extendr@2.1.0 | | +-- ignorefs@1.2.0 | | | `-- editions@1.3.4 | | +-- safefs@3.2.2 | | | `-- graceful-fs@4.1.15 deduped | | +-- scandirectory@2.5.0 | | | +-- ignorefs@1.2.0 deduped | | | `-- taskgroup@4.3.1 deduped | | +-- taskgroup@4.3.1 | | | `-- ambi@2.5.0 | | | +-- editions@1.3.4 deduped | | | `-- typechecker@4.7.0 | | | `-- editions@2.1.3 | | | +-- errlop@1.1.1 | | | | `-- editions@2.1.3 | | | | +-- errlop@1.1.1 deduped | | | | `-- semver@5.7.0 | | | `-- semver@5.7.0 | | `-- typechecker@2.1.0 | `-- mustache@3.0.1 +-- inquirer@3.0.1 | +-- chalk@1.1.3 | | +-- has-ansi@2.0.0 | | | `-- ansi-regex@2.1.1 deduped | | `-- supports-color@2.0.0 | +-- cli-cursor@2.1.0 | | `-- restore-cursor@2.0.0 | | `-- signal-exit@3.0.2 | +-- external-editor@2.2.0 | | +-- chardet@0.4.2 | | `-- iconv-lite@0.4.24 | +-- figures@2.0.0 | +-- lodash@4.17.11 deduped | +-- mute-stream@0.0.7 | +-- run-async@2.3.0 | | `-- is-promise@2.1.0 | +-- string-width@2.1.1 | | `-- strip-ansi@4.0.0 | | `-- ansi-regex@3.0.0 | `-- strip-ansi@3.0.1 | `-- ansi-regex@2.1.1 +-- jwebdriver@2.3.0 | +-- gm@1.23.0 | | +-- array-series@0.1.5 | | +-- cross-spawn@4.0.2 | | | +-- lru-cache@4.1.5 | | | `-- which@1.3.1 deduped | | `-- debug@2.2.0 | | `-- ms@0.7.1 | +-- node-zip@1.1.1 | | `-- jszip@2.5.0 | | `-- pako@0.2.9 | +-- promiseclass@1.0.3 | | `-- co@4.6.0 deduped | +-- request@2.79.0 | | +-- aws-sign2@0.6.0 | | +-- caseless@0.11.0 | | +-- form-data@2.1.4 | | | +-- asynckit@0.4.0 deduped | | | `-- mime-types@2.1.24 deduped | | +-- har-validator@2.0.6 | | | +-- commander@2.9.0 deduped | | | +-- is-my-json-valid@2.20.0 | | | | +-- generate-function@2.3.1 | | | | | `-- is-property@1.0.2 | | | | +-- generate-object-property@1.2.0 | | | | | `-- is-property@1.0.2 deduped | | | | +-- is-my-ip-valid@1.0.0 | | | | `-- xtend@4.0.1 deduped | | | `-- pinkie-promise@2.0.1 deduped | | +-- hawk@3.1.3 | | | +-- boom@2.10.1 | | | | `-- hoek@2.16.3 deduped | | | +-- hoek@2.16.3 | | | `-- sntp@1.0.9 | | | `-- hoek@2.16.3 deduped | | +-- http-signature@1.1.1 | | | `-- assert-plus@0.2.0 | | +-- is-typedarray@1.0.0 deduped | | +-- mime-types@2.1.24 deduped | | +-- oauth-sign@0.8.2 | | +-- qs@6.3.2 | | +-- stringstream@0.0.6 | | +-- tough-cookie@2.3.4 | | | `-- punycode@1.4.1 | | +-- tunnel-agent@0.4.3 | | `-- uuid@3.3.2 deduped | `-- xtend@4.0.1 +-- latest-version@2.0.0 | `-- package-json@2.4.0 | +-- got@5.7.1 | | +-- create-error-class@3.0.2 | | | `-- capture-stack-trace@1.0.1 | | +-- is-redirect@1.0.0 | | +-- is-retry-allowed@1.1.0 | | +-- lowercase-keys@1.0.1 | | +-- object-assign@4.1.1 deduped | | +-- parse-json@2.2.0 | | +-- pinkie-promise@2.0.1 deduped | | +-- read-all-stream@3.1.0 | | | `-- pinkie-promise@2.0.1 deduped | | +-- timed-out@3.1.3 | | +-- unzip-response@1.0.2 | | `-- url-parse-lax@1.0.0 | +-- registry-auth-token@3.4.0 | | `-- rc@1.2.8 | | `-- deep-extend@0.6.0 | +-- registry-url@3.1.0 | | `-- rc@1.2.8 deduped | `-- semver@5.3.0 deduped +-- npminstall@3.1.1 | +-- agentkeepalive@3.5.2 | | `-- humanize-ms@1.2.1 | | `-- ms@2.0.0 deduped | +-- await-event@2.1.0 | +-- binary-mirror-config@1.20.0 | +-- bytes@2.5.0 | +-- cmd-shim@2.0.2 | | +-- graceful-fs@4.1.15 deduped | | `-- mkdirp@0.5.1 deduped | +-- co@4.6.0 deduped | +-- co-fs-extra@1.2.1 | | +-- co-from-stream@0.0.0 | | +-- fs-extra@0.26.7 | | | +-- graceful-fs@4.1.15 deduped | | | +-- klaw@1.3.1 deduped | | | +-- path-is-absolute@1.0.1 deduped | | | `-- rimraf@2.6.3 deduped | | `-- thunkify-wrap@1.0.4 | | `-- enable@1.3.2 | +-- debug@2.6.9 deduped | +-- mkdirp@0.5.1 deduped | +-- ms@2.0.0 | +-- mz@2.7.0 | | +-- any-promise@1.3.0 | | +-- object-assign@4.1.1 | | `-- thenify-all@1.6.0 | | `-- thenify@3.3.0 | | `-- any-promise@1.3.0 deduped | +-- node-gyp@3.8.0 | | +-- fstream@1.0.12 | | | +-- graceful-fs@4.1.15 deduped | | | +-- inherits@2.0.3 deduped | | | +-- mkdirp@0.5.1 deduped | | | `-- rimraf@2.6.3 deduped | | +-- glob@7.1.4 | | | +-- fs.realpath@1.0.0 | | | +-- inflight@1.0.6 deduped | | | +-- inherits@2.0.3 deduped | | | +-- minimatch@3.0.4 deduped | | | `-- path-is-absolute@1.0.1 deduped | | +-- graceful-fs@4.1.15 deduped | | +-- mkdirp@0.5.1 deduped | | +-- nopt@3.0.6 deduped | | +-- npmlog@4.1.2 | | | +-- are-we-there-yet@1.1.5 | | | | `-- delegates@1.0.0 | | | `-- gauge@2.7.4 | | | +-- has-unicode@2.0.1 | | | +-- object-assign@4.1.1 deduped | | | +-- signal-exit@3.0.2 deduped | | | +-- string-width@1.0.2 | | | | `-- is-fullwidth-code-point@1.0.0 | | | `-- wide-align@1.1.3 | | | `-- string-width@2.1.1 deduped | | +-- osenv@0.1.5 | | | `-- os-homedir@1.0.2 | | +-- request@2.88.0 deduped | | +-- rimraf@2.6.3 deduped | | +-- semver@5.3.0 deduped | | +-- tar@2.2.2 deduped | | `-- which@1.3.1 | | `-- isexe@2.0.0 | +-- normalize-package-data@2.5.0 | | +-- resolve@1.10.1 | | +-- semver@5.3.0 deduped | | `-- validate-npm-package-license@3.0.4 | | +-- spdx-correct@3.1.0 | | | +-- spdx-expression-parse@3.0.0 deduped | | | `-- spdx-license-ids@3.0.4 | | `-- spdx-expression-parse@3.0.0 | | `-- spdx-license-ids@3.0.4 deduped | +-- npm-package-arg@4.2.1 | | `-- semver@5.3.0 deduped | +-- ora@1.4.0 | | +-- chalk@2.4.2 | | | +-- ansi-styles@3.2.1 | | | | `-- color-convert@1.9.3 | | | | `-- color-name@1.1.3 | | | `-- supports-color@5.5.0 | | +-- cli-cursor@2.1.0 deduped | | +-- cli-spinners@1.3.1 | | `-- log-symbols@2.2.0 | | `-- chalk@2.4.2 | | +-- ansi-styles@3.2.1 | | | `-- color-convert@1.9.3 deduped | | `-- supports-color@5.5.0 | +-- rimraf@2.6.3 | | `-- glob@7.1.4 deduped | +-- runscript@1.3.0 | | +-- debug@2.6.9 deduped | | `-- is-type-of@1.2.1 | | `-- core-util-is@1.0.2 | +-- semver@5.3.0 deduped | +-- tar@2.2.2 | | +-- block-stream@0.0.9 | | | `-- inherits@2.0.3 deduped | | `-- inherits@2.0.3 | +-- urllib@2.34.0 | | +-- any-promise@1.3.0 deduped | | +-- debug@2.6.9 deduped | | +-- default-user-agent@1.0.0 | | | `-- os-name@1.0.3 | | | `-- win-release@1.1.1 | | | `-- semver@5.3.0 deduped | | +-- digest-header@0.0.1 | | | `-- utility@0.1.11 | | | `-- address@1.1.0 | | +-- ee-first@1.1.1 | | +-- formstream@1.1.0 | | | +-- mime@1.6.0 | | | `-- pause-stream@0.0.11 | | +-- iconv-lite@0.4.24 deduped | | +-- proxy-agent@3.1.0 | | | +-- agent-base@4.2.1 | | | | `-- es6-promisify@5.0.0 | | | +-- debug@3.2.6 | | | | `-- ms@2.1.1 | | | +-- http-proxy-agent@2.1.0 | | | | `-- debug@3.1.0 | | | | `-- ms@2.0.0 deduped | | | +-- https-proxy-agent@2.2.1 | | | | `-- debug@3.2.6 | | | | `-- ms@2.1.1 | | | +-- lru-cache@4.1.5 deduped | | | +-- pac-proxy-agent@3.0.0 | | | | +-- debug@3.2.6 | | | | | `-- ms@2.1.1 | | | | +-- get-uri@2.0.3 | | | | | +-- data-uri-to-buffer@2.0.1 | | | | | +-- debug@4.1.1 | | | | | | `-- ms@2.1.1 | | | | | +-- file-uri-to-path@1.0.0 | | | | | +-- ftp@0.3.10 | | | | | | +-- readable-stream@1.1.14 | | | | | | | +-- core-util-is@1.0.2 deduped | | | | | | | +-- inherits@2.0.3 deduped | | | | | | | +-- isarray@0.0.1 | | | | | | | `-- string_decoder@0.10.31 | | | | | | `-- xregexp@2.0.0 deduped | | | | | `-- readable-stream@3.3.0 | | | | | +-- inherits@2.0.3 deduped | | | | | `-- string_decoder@1.1.1 deduped | | | | +-- http-proxy-agent@2.1.0 deduped | | | | +-- https-proxy-agent@2.2.1 deduped | | | | +-- pac-resolver@3.0.0 | | | | | +-- co@4.6.0 deduped | | | | | +-- degenerator@1.0.4 | | | | | | `-- escodegen@1.11.1 | | | | | | +-- esutils@2.0.2 | | | | | | +-- optionator@0.8.2 | | | | | | | +-- deep-is@0.1.3 deduped | | | | | | | +-- levn@0.3.0 | | | | | | | | `-- prelude-ls@1.1.2 deduped | | | | | | | +-- prelude-ls@1.1.2 | | | | | | | +-- type-check@0.3.2 | | | | | | | | `-- prelude-ls@1.1.2 deduped | | | | | | | `-- wordwrap@1.0.0 | | | | | | `-- source-map@0.6.1 | | | | | `-- thunkify@2.1.2 | | | | +-- raw-body@2.4.0 | | | | | +-- http-errors@1.7.2 | | | | | | +-- depd@1.1.2 | | | | | | +-- inherits@2.0.3 deduped | | | | | | +-- setprototypeof@1.1.1 | | | | | | `-- statuses@1.5.0 deduped | | | | | `-- iconv-lite@0.4.24 deduped | | | | `-- socks-proxy-agent@4.0.2 deduped | | | +-- proxy-from-env@1.0.0 | | | `-- socks-proxy-agent@4.0.2 | | | `-- socks@2.3.2 | | +-- pump@3.0.0 | | +-- qs@6.5.2 deduped | | +-- statuses@1.5.0 | | `-- utility@1.16.1 deduped | +-- utility@1.16.1 | | +-- escape-html@1.0.3 | | +-- mkdirp@0.5.1 deduped | | `-- unescape@1.0.1 | | `-- extend-shallow@2.0.1 | `-- uuid@3.3.2 +-- os-locale@1.4.0 | `-- lcid@1.0.0 | `-- invert-kv@1.0.0 +-- semver@5.3.0 `-- websocket@1.0.22 +-- debug@2.2.0 | `-- ms@0.7.1 +-- typedarray-to-buffer@3.0.5 | `-- is-typedarray@1.0.0 deduped `-- yaeti@0.0.6 C:\Users\yl>app-inspector -u WTKDU17111000609 --verbose C:\Users\yl>npm install app-inspector -g npm WARN deprecated tough-cookie@2.2.2: ReDoS vulnerability parsing Set-Cookie https://nodesecurity.io/advisories/130 npm WARN deprecated hawk@3.1.3: This module moved to @hapi/hawk. Please make sure to switch over as this distribution is no longer supported and may contain bugs an d critical security issues. npm WARN deprecated node-uuid@1.4.8: Use uuid module instead npm WARN deprecated boom@2.10.1: This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commerc ial). npm WARN deprecated cryptiles@2.0.5: This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest ver sion to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/com mercial). npm WARN deprecated sntp@1.0.9: This module moved to @hapi/sntp. Please make sure to switch over as this distribution is no longer supported and may contain bugs an d critical security issues. npm WARN deprecated hoek@2.16.3: This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commerc ial). npm WARN deprecated node-uuid@1.4.7: Use uuid module instead C:\Users\yl\AppData\Roaming\npm\app-inspector -> C:\Users\yl\AppData\Roaming\npm\node_modules\app-inspector\bin\app-inspector.js C:\Users\yl\AppData\Roaming\npm\inspector -> C:\Users\yl\AppData\Roaming\npm\node_modules\app-inspector\bin\app-inspector.js C:\Users\yl\AppData\Roaming\npm `-- app-inspector@2.0.24 npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.0.0 (node_modules\app-inspector\node_modules\chokidar\node_modules\fsevents): npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.9: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"}) npm WARN react-syntax-highlighter@7.0.4 requires a peer of react@>= 0.14.0 but none was installed.