真机控件获取 app-inspector
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::)
at emitTwo (events.js::)
at ChildProcess.emit (events.js::)
at maybeClose (internal/child_process.js::)
at Process.ChildProcess._handle.onexit (internal/child_process.js::)
killed: false,
code: ,
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.: 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.: 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.: 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.: 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.: 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. from 3.2. but we can't, as it's a symlink
npm WARN update-linked node_modules\uirecorder\node_modules\extsprintf needs updating to 1.3. from 1.4. 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. from 4.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. from 2.4. 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. from 3.3. but we can't, as it's a symlink
npm WARN update-linked node_modules\uirecorder\node_modules\fstream needs updating to 1.0. from 1.0. but we can't, as it's a symlink
npm WARN update-linked node_modules\uirecorder\node_modules\jwebdriver needs updating to 2.3. from 2.2. but we can't, as it's a symlink > chromedriver@2.46. install C:\Users\yl\AppData\Roaming\npm\node_modules\uirecorder\node_modules\chromedriver
> node install.js ChromeDriver binary exists. Validating...
ChromeDriver 2.46. (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. install C:\Users\yl\AppData\Roaming\npm\node_modules\uirecorder\node_modules\websocket
> (node-gyp rebuild > builderror.log) || (exit ) 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. node_modules\uirecorder\node_modules\_are-we-there-yet@1.1.@are-we-there-yet\node_modules\delegates
- array-uniq@1.0. node_modules\uirecorder\node_modules\_array-union@1.0.@array-union\node_modules\array-uniq
- lodash@4.17. node_modules\uirecorder\node_modules\_async@2.1.@async\node_modules\lodash
- tweetnacl@0.14. node_modules\uirecorder\node_modules\_bcrypt-pbkdf@1.0.@bcrypt-pbkdf\node_modules\tweetnacl
- hoek@2.16. node_modules\uirecorder\node_modules\_boom@2.10.@boom\node_modules\hoek
- balanced-match@1.0. node_modules\uirecorder\node_modules\_brace-expansion@1.1.@brace-expansion\node_modules\balanced-match
- concat-map@0.0. node_modules\uirecorder\node_modules\_brace-expansion@1.1.@brace-expansion\node_modules\concat-map
- assertion-error@1.1. node_modules\uirecorder\node_modules\_chai@3.5.@chai\node_modules\assertion-error
- type-detect@1.0. node_modules\uirecorder\node_modules\_chai@3.5.@chai\node_modules\type-detect
- escape-string-regexp@1.0. node_modules\uirecorder\node_modules\_chalk@2.4.@chalk\node_modules\escape-string-regexp
- graceful-fs@4.1. node_modules\uirecorder\node_modules\_cmd-shim@2.0.@cmd-shim\node_modules\graceful-fs
- co-thread@0.0. node_modules\uirecorder\node_modules\_co-parallel@1.0.@co-parallel\node_modules\co-thread
- color-convert@1.9. node_modules\uirecorder\node_modules\_ansi-styles@3.2.@ansi-styles\node_modules\color-convert
- ansi-styles@3.2. node_modules\uirecorder\node_modules\_chalk@2.4.@chalk\node_modules\ansi-styles
- delayed-stream@1.0. node_modules\uirecorder\node_modules\_combined-stream@1.0.@combined-stream\node_modules\delayed-stream
- boom@2.10. node_modules\uirecorder\node_modules\_cryptiles@2.0.@cryptiles\node_modules\boom
- type-detect@0.1. node_modules\uirecorder\node_modules\_deep-eql@0.1.@deep-eql\node_modules\type-detect
- deep-eql@0.1. node_modules\uirecorder\node_modules\_chai@3.5.@chai\node_modules\deep-eql
- ast-types@0.12. node_modules\uirecorder\node_modules\_degenerator@1.0.@degenerator\node_modules\ast-types
- esprima@3.1. node_modules\uirecorder\node_modules\_degenerator@1.0.@degenerator\node_modules\esprima
- jsbn@0.1. node_modules\uirecorder\node_modules\_ecc-jsbn@0.1.@ecc-jsbn\node_modules\jsbn
- safer-buffer@2.1. node_modules\uirecorder\node_modules\_ecc-jsbn@0.1.@ecc-jsbn\node_modules\safer-buffer
- is-arrayish@0.2. node_modules\uirecorder\node_modules\_error-ex@1.3.@error-ex\node_modules\is-arrayish
- es6-promisify@5.0. node_modules\uirecorder\node_modules\_agent-base@4.2.@agent-base\node_modules\es6-promisify
- esprima@3.1. node_modules\uirecorder\node_modules\_escodegen@1.11.@escodegen\node_modules\esprima
- estraverse@4.2. node_modules\uirecorder\node_modules\_escodegen@1.11.@escodegen\node_modules\estraverse
- esutils@2.0. node_modules\uirecorder\node_modules\_escodegen@1.11.@escodegen\node_modules\esutils
- source-map@0.6. node_modules\uirecorder\node_modules\_escodegen@1.11.@escodegen\node_modules\source-map
- chardet@0.4. node_modules\uirecorder\node_modules\_external-editor@2.2.@external-editor\node_modules\chardet
- debug@2.6. node_modules\uirecorder\node_modules\_extract-zip@1.6.@extract-zip\node_modules\debug
- graceful-fs@4.1. node_modules\uirecorder\node_modules\_fs-extra@0.26.@fs-extra\node_modules\graceful-fs
- path-is-absolute@1.0. node_modules\uirecorder\node_modules\_fs-extra@0.26.@fs-extra\node_modules\path-is-absolute
- graceful-fs@4.1. node_modules\uirecorder\node_modules\_fstream@1.0.@fstream\node_modules\graceful-fs
- inherits@2.0. node_modules\uirecorder\node_modules\_fstream@1.0.@fstream\node_modules\inherits
- xregexp@2.0. node_modules\uirecorder\node_modules\_ftp@0.3.@ftp\node_modules\xregexp
- aproba@1.2. node_modules\uirecorder\node_modules\_gauge@2.7.@gauge\node_modules\aproba
- console-control-strings@1.1. node_modules\uirecorder\node_modules\_gauge@2.7.@gauge\node_modules\console-control-strings
- has-unicode@2.0. node_modules\uirecorder\node_modules\_gauge@2.7.@gauge\node_modules\has-unicode
- object-assign@4.1. node_modules\uirecorder\node_modules\_gauge@2.7.@gauge\node_modules\object-assign
- signal-exit@3.0. node_modules\uirecorder\node_modules\_gauge@2.7.@gauge\node_modules\signal-exit
- is-property@1.0. node_modules\uirecorder\node_modules\_generate-function@2.3.@generate-function\node_modules\is-property
- data-uri-to-buffer@2.0. node_modules\uirecorder\node_modules\_get-uri@2.0.@get-uri\node_modules\data-uri-to-buffer
- extend@3.0. node_modules\uirecorder\node_modules\_get-uri@2.0.@get-uri\node_modules\extend
- file-uri-to-path@1.0. node_modules\uirecorder\node_modules\_get-uri@2.0.@get-uri\node_modules\file-uri-to-path
- ftp@0.3. node_modules\uirecorder\node_modules\_get-uri@2.0.@get-uri\node_modules\ftp
- array-union@1.0. node_modules\uirecorder\node_modules\_globby@6.1.@globby\node_modules\array-union
- object-assign@4.1. node_modules\uirecorder\node_modules\_globby@6.1.@globby\node_modules\object-assign
- pify@2.3. node_modules\uirecorder\node_modules\_globby@6.1.@globby\node_modules\pify
- array-parallel@0.1. node_modules\uirecorder\node_modules\_gm@1.23.@gm\node_modules\array-parallel
- array-series@0.1. node_modules\uirecorder\node_modules\_gm@1.23.@gm\node_modules\array-series
- commander@2.20. node_modules\uirecorder\node_modules\_har-validator@2.0.@har-validator\node_modules\commander
- ansi-regex@2.1. node_modules\uirecorder\node_modules\_has-ansi@2.0.@has-ansi\node_modules\ansi-regex
- has-ansi@2.0. node_modules\uirecorder\node_modules\_chalk@1.1.@chalk\node_modules\has-ansi
- ms@2.1. node_modules\uirecorder\node_modules\_humanize-ms@1.2.@humanize-ms\node_modules\ms
- humanize-ms@1.2. node_modules\uirecorder\node_modules\_agentkeepalive@3.5.@agentkeepalive\node_modules\humanize-ms
- iconv-lite@0.4. node_modules\uirecorder\node_modules\_external-editor@2.2.@external-editor\node_modules\iconv-lite
- number-is-nan@1.0. node_modules\uirecorder\node_modules\_is-fullwidth-code-point@1.0.@is-fullwidth-code-point\node_modules\number-is-nan
- is-my-json-valid@2.20. node_modules\uirecorder\node_modules\_har-validator@2.0.@har-validator\node_modules\is-my-json-valid
- graceful-fs@4.1. node_modules\uirecorder\node_modules\_jsonfile@2.4.@jsonfile\node_modules\graceful-fs
- jsonfile@2.4. node_modules\uirecorder\node_modules\_fs-extra@0.26.@fs-extra\node_modules\jsonfile
- assert-plus@1.0. node_modules\uirecorder\node_modules\_jsprim@1.4.@jsprim\node_modules\assert-plus
- extsprintf@1.3. node_modules\uirecorder\node_modules\_jsprim@1.4.@jsprim\node_modules\extsprintf
- json-schema@0.2. node_modules\uirecorder\node_modules\_jsprim@1.4.@jsprim\node_modules\json-schema
- pako@0.2. node_modules\uirecorder\node_modules\_jszip@2.5.@jszip\node_modules\pako
- xtend@4.0. node_modules\uirecorder\node_modules\_jwebdriver@2.2.@jwebdriver\node_modules\xtend
- klaw@1.3. node_modules\uirecorder\node_modules\_fs-extra@0.26.@fs-extra\node_modules\klaw
- invert-kv@1.0. node_modules\uirecorder\node_modules\_lcid@1.0.@lcid\node_modules\invert-kv
- prelude-ls@1.1. node_modules\uirecorder\node_modules\_levn@0.3.@levn\node_modules\prelude-ls
- lru-cache@4.1. node_modules\uirecorder\node_modules\_cross-spawn@4.0.@cross-spawn\node_modules\lru-cache
- minimist@1.2. node_modules\uirecorder\node_modules\_make-plural@3.0.@make-plural\node_modules\minimist
- xregexp@2.0. node_modules\uirecorder\node_modules\_math-interval-parser@1.1.@math-interval-parser\node_modules\xregexp
- mkdirp@0.5. node_modules\uirecorder\node_modules\_cmd-shim@2.0.@cmd-shim\node_modules\mkdirp
- mkdirp@0.5. node_modules\uirecorder\node_modules\_extract-zip@1.6.@extract-zip\node_modules\mkdirp
- mkdirp@0.5. node_modules\uirecorder\node_modules\_fstream@1.0.@fstream\node_modules\mkdirp
- any-promise@1.3. node_modules\uirecorder\node_modules\_mz@2.7.@mz\node_modules\any-promise
- object-assign@4.1. node_modules\uirecorder\node_modules\_mz@2.7.@mz\node_modules\object-assign
- jszip@2.5. node_modules\uirecorder\node_modules\_node-zip@1.1.@node-zip\node_modules\jszip
- node-zip@1.1. node_modules\uirecorder\node_modules\_jwebdriver@2.2.@jwebdriver\node_modules\node-zip
- wrappy@1.0. node_modules\uirecorder\node_modules\_once@1.4.@once\node_modules\wrappy
- once@1.4. node_modules\uirecorder\node_modules\_end-of-stream@1.4.@end-of-stream\node_modules\once
- glob@7.1. node_modules\uirecorder\node_modules\_globby@6.1.@globby\node_modules\glob
- mimic-fn@1.2. node_modules\uirecorder\node_modules\_onetime@2.0.@onetime\node_modules\mimic-fn
- cli-spinners@1.3. node_modules\uirecorder\node_modules\_ora@1.4.@ora\node_modules\cli-spinners
- log-symbols@2.2. node_modules\uirecorder\node_modules\_ora@1.4.@ora\node_modules\log-symbols
- minimist@1.2. node_modules\uirecorder\node_modules\_osx-release@1.1.@osx-release\node_modules\minimist
- pinkie-promise@2.0. node_modules\uirecorder\node_modules\_globby@6.1.@globby\node_modules\pinkie-promise
- pinkie-promise@2.0. node_modules\uirecorder\node_modules\_har-validator@2.0.@har-validator\node_modules\pinkie-promise
- co@4.6. node_modules\uirecorder\node_modules\_promiseclass@1.0.@promiseclass\node_modules\co
- promiseclass@1.0. node_modules\uirecorder\node_modules\_jwebdriver@2.2.@jwebdriver\node_modules\promiseclass
- core-util-is@1.0. node_modules\uirecorder\node_modules\_readable-stream@2.3.@readable-stream\node_modules\core-util-is
- inherits@2.0. node_modules\uirecorder\node_modules\_readable-stream@2.3.@readable-stream\node_modules\inherits
- isarray@1.0. node_modules\uirecorder\node_modules\_readable-stream@2.3.@readable-stream\node_modules\isarray
- process-nextick-args@2.0. node_modules\uirecorder\node_modules\_readable-stream@2.3.@readable-stream\node_modules\process-nextick-args
- safe-buffer@5.1. node_modules\uirecorder\node_modules\_readable-stream@2.3.@readable-stream\node_modules\safe-buffer
- util-deprecate@1.0. node_modules\uirecorder\node_modules\_readable-stream@2.3.@readable-stream\node_modules\util-deprecate
- stringstream@0.0. node_modules\uirecorder\node_modules\_request@2.79.@request\node_modules\stringstream
- jpeg-js@0.2. node_modules\uirecorder\node_modules\_resemblejs-node@1.0.@resemblejs-node\node_modules\jpeg-js
- pngjs@3.2. node_modules\uirecorder\node_modules\_resemblejs-node@1.0.@resemblejs-node\node_modules\pngjs
- cli-cursor@2.1. node_modules\uirecorder\node_modules\_ora@1.4.@ora\node_modules\cli-cursor
- rimraf@2.6. node_modules\uirecorder\node_modules\_fs-extra@0.26.@fs-extra\node_modules\rimraf
- rimraf@2.6. node_modules\uirecorder\node_modules\_fstream@1.0.@fstream\node_modules\rimraf
- is-promise@2.1. node_modules\uirecorder\node_modules\_run-async@2.3.@run-async\node_modules\is-promise
- debug@2.6. node_modules\uirecorder\node_modules\_runscript@1.3.@runscript\node_modules\debug
- is-type-of@1.2. node_modules\uirecorder\node_modules\_runscript@1.3.@runscript\node_modules\is-type-of
- graceful-fs@4.1. node_modules\uirecorder\node_modules\_safefs@3.2.@safefs\node_modules\graceful-fs
- hoek@2.16. node_modules\uirecorder\node_modules\_sntp@1.0.@sntp\node_modules\hoek
- hawk@3.1. node_modules\uirecorder\node_modules\_request@2.79.@request\node_modules\hawk
- asn1@0.2. node_modules\uirecorder\node_modules\_sshpk@1.16.@sshpk\node_modules\asn1
- assert-plus@1.0. node_modules\uirecorder\node_modules\_sshpk@1.16.@sshpk\node_modules\assert-plus
- bcrypt-pbkdf@1.0. node_modules\uirecorder\node_modules\_sshpk@1.16.@sshpk\node_modules\bcrypt-pbkdf
- dashdash@1.14. node_modules\uirecorder\node_modules\_sshpk@1.16.@sshpk\node_modules\dashdash
- ecc-jsbn@0.1. node_modules\uirecorder\node_modules\_sshpk@1.16.@sshpk\node_modules\ecc-jsbn
- getpass@0.1. node_modules\uirecorder\node_modules\_sshpk@1.16.@sshpk\node_modules\getpass
- jsbn@0.1. node_modules\uirecorder\node_modules\_sshpk@1.16.@sshpk\node_modules\jsbn
- safer-buffer@2.1. node_modules\uirecorder\node_modules\_sshpk@1.16.@sshpk\node_modules\safer-buffer
- tweetnacl@0.14. node_modules\uirecorder\node_modules\_sshpk@1.16.@sshpk\node_modules\tweetnacl
- string_decoder@1.1. node_modules\uirecorder\node_modules\_readable-stream@2.3.@readable-stream\node_modules\string_decoder
- readable-stream@2.3. node_modules\uirecorder\node_modules\_are-we-there-yet@1.1.@are-we-there-yet\node_modules\readable-stream
- concat-stream@1.6. node_modules\uirecorder\node_modules\_extract-zip@1.6.@extract-zip\node_modules\concat-stream
- readable-stream@2.3. node_modules\uirecorder\node_modules\_duplexer2@0.1.@duplexer2\node_modules\readable-stream
- code-point-at@1.1. node_modules\uirecorder\node_modules\_string-width@1.0.@string-width\node_modules\code-point-at
- ansi-regex@2.1. node_modules\uirecorder\node_modules\_strip-ansi@3.0.@strip-ansi\node_modules\ansi-regex
- strip-ansi@3.0. node_modules\uirecorder\node_modules\_chalk@1.1.@chalk\node_modules\strip-ansi
- chalk@1.1. node_modules\uirecorder\node_modules\_har-validator@2.0.@har-validator\node_modules\chalk
- strip-ansi@3.0. node_modules\uirecorder\node_modules\_gauge@2.7.@gauge\node_modules\strip-ansi
- supports-color@5.5. node_modules\uirecorder\node_modules\_chalk@2.4.@chalk\node_modules\supports-color
- chalk@2.4. node_modules\uirecorder\node_modules\_ora@1.4.@ora\node_modules\chalk
- any-promise@1.3. node_modules\uirecorder\node_modules\_thenify@3.3.@thenify\node_modules\any-promise
- thenify-all@1.6. node_modules\uirecorder\node_modules\_mz@2.7.@mz\node_modules\thenify-all
- enable@1.3. node_modules\uirecorder\node_modules\_thunkify-wrap@1.0.@thunkify-wrap\node_modules\enable
- os-tmpdir@1.0. node_modules\uirecorder\node_modules\_tmp@0.0.@tmp\node_modules\os-tmpdir
- tmp@0.0. node_modules\uirecorder\node_modules\_external-editor@2.2.@external-editor\node_modules\tmp
- safe-buffer@5.1. node_modules\uirecorder\node_modules\_tunnel-agent@0.6.@tunnel-agent\node_modules\safe-buffer
- prelude-ls@1.1. node_modules\uirecorder\node_modules\_type-check@0.3.@type-check\node_modules\prelude-ls
- type-check@0.3. node_modules\uirecorder\node_modules\_levn@0.3.@levn\node_modules\type-check
- optionator@0.8. node_modules\uirecorder\node_modules\_escodegen@1.11.@escodegen\node_modules\optionator
- escodegen@1.11. node_modules\uirecorder\node_modules\_degenerator@1.0.@degenerator\node_modules\escodegen
- editions@2.1. node_modules\uirecorder\node_modules\_typechecker@4.7.@typechecker\node_modules\editions
- is-typedarray@1.0. node_modules\uirecorder\node_modules\_typedarray-to-buffer@3.0.@typedarray-to-buffer\node_modules\is-typedarray
- punycode@2.1. node_modules\uirecorder\node_modules\_uri-js@4.2.@uri-js\node_modules\punycode
- any-promise@1.3. node_modules\uirecorder\node_modules\_urllib@2.34.@urllib\node_modules\any-promise
- content-type@1.0. node_modules\uirecorder\node_modules\_urllib@2.34.@urllib\node_modules\content-type
- debug@2.6. node_modules\uirecorder\node_modules\_urllib@2.34.@urllib\node_modules\debug
- digest-header@0.0. node_modules\uirecorder\node_modules\_urllib@2.34.@urllib\node_modules\digest-header
- ee-first@1.1. node_modules\uirecorder\node_modules\_urllib@2.34.@urllib\node_modules\ee-first
- formstream@1.1. node_modules\uirecorder\node_modules\_urllib@2.34.@urllib\node_modules\formstream
- humanize-ms@1.2. node_modules\uirecorder\node_modules\_urllib@2.34.@urllib\node_modules\humanize-ms
- iconv-lite@0.4. node_modules\uirecorder\node_modules\_urllib@2.34.@urllib\node_modules\iconv-lite
- ip@1.1. node_modules\uirecorder\node_modules\_urllib@2.34.@urllib\node_modules\ip
- proxy-agent@3.1. node_modules\uirecorder\node_modules\_urllib@2.34.@urllib\node_modules\proxy-agent
- pump@3.0. node_modules\uirecorder\node_modules\_urllib@2.34.@urllib\node_modules\pump
- qs@6.7. node_modules\uirecorder\node_modules\_urllib@2.34.@urllib\node_modules\qs
- statuses@1.5. node_modules\uirecorder\node_modules\_urllib@2.34.@urllib\node_modules\statuses
- address@1.1. node_modules\uirecorder\node_modules\_utility@0.1.@utility\node_modules\address
- utility@1.16. node_modules\uirecorder\node_modules\_urllib@2.34.@urllib\node_modules\utility
- verror@1.10. node_modules\uirecorder\node_modules\_jsprim@1.4.@jsprim\node_modules\verror
- which@1.3. node_modules\uirecorder\node_modules\_cross-spawn@4.0.@cross-spawn\node_modules\which
- cross-spawn@4.0. node_modules\uirecorder\node_modules\_gm@1.23.@gm\node_modules\cross-spawn
- gm@1.23. node_modules\uirecorder\node_modules\_jwebdriver@2.2.@jwebdriver\node_modules\gm
- wide-align@1.1. node_modules\uirecorder\node_modules\_gauge@2.7.@gauge\node_modules\wide-align
- os-name@1.0. node_modules\uirecorder\node_modules\_default-user-agent@1.0.@default-user-agent\node_modules\os-name
- default-user-agent@1.0. node_modules\uirecorder\node_modules\_urllib@2.34.@urllib\node_modules\default-user-agent
- yauzl@2.4. node_modules\uirecorder\node_modules\_extract-zip@1.6.@extract-zip\node_modules\yauzl
- _@types_node@8.10.@@types node_modules\uirecorder\node_modules\_@types_node@8.10.@@types
C:\Users\yl\AppData\Roaming\npm
`-- uirecorder@2.6.
+-- async@2.1.
| `-- lodash@4.17.
+-- chai@3.5.
| `-- type-detect@1.0.
+-- chromedriver@2.46.
| +-- del@3.0.
| | +-- globby@6.1.
| | | +-- array-union@1.0.
| | | | `-- array-uniq@1.0.
| | | +-- glob@7.1. deduped
| | | +-- object-assign@4.1. deduped
| | | `-- pinkie-promise@2.0.
| | +-- is-path-cwd@1.0.
| | +-- is-path-in-cwd@1.0.
| | | `-- is-path-inside@1.0.
| | | `-- path-is-inside@1.0.
| | +-- p-map@1.2.
| | +-- pify@3.0.
| | `-- rimraf@2.6. deduped
| +-- extract-zip@1.6.
| | +-- concat-stream@1.6.
| | | +-- buffer-from@1.1.
| | | +-- inherits@2.0. deduped
| | | +-- readable-stream@2.3.
| | | | +-- core-util-is@1.0. deduped
| | | | +-- inherits@2.0. deduped
| | | | +-- isarray@1.0.
| | | | +-- process-nextick-args@2.0.
| | | | `-- string_decoder@1.1.
| | | `-- typedarray@0.0.
| | +-- debug@2.6. deduped
| | +-- mkdirp@0.5. deduped
| | `-- yauzl@2.4.
| | `-- fd-slicer@1.0.
| | `-- pend@1.2.
| +-- mkdirp@0.5.
| | `-- minimist@0.0.
| +-- request@2.88.
| | +-- aws-sign2@0.7.
| | +-- caseless@0.12.
| | +-- combined-stream@1.0.
| | | `-- delayed-stream@1.0.
| | +-- form-data@2.3.
| | | +-- asynckit@0.4.
| | | `-- mime-types@2.1. deduped
| | +-- har-validator@5.1.
| | | +-- ajv@6.10.
| | | | +-- fast-deep-equal@2.0.
| | | | `-- uri-js@4.2.
| | | | `-- punycode@2.1.
| | | `-- har-schema@2.0.
| | +-- http-signature@1.2.
| | | +-- jsprim@1.4.
| | | | +-- json-schema@0.2.
| | | | `-- verror@1.10.
| | | | `-- core-util-is@1.0. deduped
| | | `-- sshpk@1.16.
| | | +-- asn1@0.2.
| | | +-- dashdash@1.14.
| | | +-- ecc-jsbn@0.1.
| | | | `-- jsbn@0.1. deduped
| | | +-- getpass@0.1.
| | | `-- jsbn@0.1.
| | +-- is-typedarray@1.0.
| | +-- mime-types@2.1.
| | | `-- mime-db@1.40.
| | +-- oauth-sign@0.9.
| | +-- qs@6.5.
| | +-- tough-cookie@2.4.
| | `-- uuid@3.3. deduped
| `-- tcp-port-used@1.0.
| +-- debug@4.1.
| | `-- ms@2.1.
| `-- is2@2.0.
| +-- deep-is@0.1.
| +-- ip-regex@2.1.
| `-- is-url@1.2.
+-- co@4.6.
+-- commander@2.9.
+-- fs-extra@1.0.
| +-- graceful-fs@4.1.
| +-- jsonfile@2.4.
| | `-- graceful-fs@4.1. deduped
| `-- klaw@1.3.
| `-- graceful-fs@4.1. deduped
+-- i18n@0.8.
| +-- debug@2.6.
| | `-- ms@2.0. deduped
| +-- math-interval-parser@1.1.
| | `-- xregexp@2.0.
| +-- messageformat@0.3.
| | +-- glob@6.0.
| | | +-- inflight@1.0.
| | | | `-- wrappy@1.0.
| | | +-- inherits@2.0. deduped
| | | +-- minimatch@3.0.
| | | +-- once@1.4.
| | | | `-- wrappy@1.0. deduped
| | | `-- path-is-absolute@1.0.
| | +-- nopt@3.0.
| | | `-- abbrev@1.1.
| | `-- watchr@2.4.
| | +-- eachr@2.0.
| | | `-- typechecker@2.1. deduped
| | +-- extendr@2.1.
| | +-- ignorefs@1.2.
| | | `-- editions@1.3.
| | +-- safefs@3.2.
| | | `-- graceful-fs@4.1. deduped
| | +-- scandirectory@2.5.
| | | +-- ignorefs@1.2. deduped
| | | `-- taskgroup@4.3. deduped
| | +-- taskgroup@4.3.
| | | `-- ambi@2.5.
| | | +-- editions@1.3. deduped
| | | `-- typechecker@4.7.
| | | `-- editions@2.1.
| | | +-- errlop@1.1.
| | | | `-- editions@2.1.
| | | | +-- errlop@1.1. deduped
| | | | `-- semver@5.7.
| | | `-- semver@5.7.
| | `-- typechecker@2.1.
| `-- mustache@3.0.
+-- inquirer@3.0.
| +-- chalk@1.1.
| | +-- has-ansi@2.0.
| | | `-- ansi-regex@2.1. deduped
| | `-- supports-color@2.0.
| +-- cli-cursor@2.1.
| | `-- restore-cursor@2.0.
| | `-- signal-exit@3.0.
| +-- external-editor@2.2.
| | +-- chardet@0.4.
| | `-- iconv-lite@0.4.
| +-- figures@2.0.
| +-- lodash@4.17. deduped
| +-- mute-stream@0.0.
| +-- run-async@2.3.
| | `-- is-promise@2.1.
| +-- string-width@2.1.
| | `-- strip-ansi@4.0.
| | `-- ansi-regex@3.0.
| `-- strip-ansi@3.0.
| `-- ansi-regex@2.1.
+-- jwebdriver@2.3.
| +-- gm@1.23.
| | +-- array-series@0.1.
| | +-- cross-spawn@4.0.
| | | +-- lru-cache@4.1.
| | | `-- which@1.3. deduped
| | `-- debug@2.2.
| | `-- ms@0.7.
| +-- node-zip@1.1.
| | `-- jszip@2.5.
| | `-- pako@0.2.
| +-- promiseclass@1.0.
| | `-- co@4.6. deduped
| +-- request@2.79.
| | +-- aws-sign2@0.6.
| | +-- caseless@0.11.
| | +-- form-data@2.1.
| | | +-- asynckit@0.4. deduped
| | | `-- mime-types@2.1. deduped
| | +-- har-validator@2.0.
| | | +-- commander@2.9. deduped
| | | +-- is-my-json-valid@2.20.
| | | | +-- generate-function@2.3.
| | | | | `-- is-property@1.0.
| | | | +-- generate-object-property@1.2.
| | | | | `-- is-property@1.0. deduped
| | | | +-- is-my-ip-valid@1.0.
| | | | `-- xtend@4.0. deduped
| | | `-- pinkie-promise@2.0. deduped
| | +-- hawk@3.1.
| | | +-- boom@2.10.
| | | | `-- hoek@2.16. deduped
| | | +-- hoek@2.16.
| | | `-- sntp@1.0.
| | | `-- hoek@2.16. deduped
| | +-- http-signature@1.1.
| | | `-- assert-plus@0.2.
| | +-- is-typedarray@1.0. deduped
| | +-- mime-types@2.1. deduped
| | +-- oauth-sign@0.8.
| | +-- qs@6.3.
| | +-- stringstream@0.0.
| | +-- tough-cookie@2.3.
| | | `-- punycode@1.4.
| | +-- tunnel-agent@0.4.
| | `-- uuid@3.3. deduped
| `-- xtend@4.0.
+-- latest-version@2.0.
| `-- package-json@2.4.
| +-- got@5.7.
| | +-- create-error-class@3.0.
| | | `-- capture-stack-trace@1.0.
| | +-- is-redirect@1.0.
| | +-- is-retry-allowed@1.1.
| | +-- lowercase-keys@1.0.
| | +-- object-assign@4.1. deduped
| | +-- parse-json@2.2.
| | +-- pinkie-promise@2.0. deduped
| | +-- read-all-stream@3.1.
| | | `-- pinkie-promise@2.0. deduped
| | +-- timed-out@3.1.
| | +-- unzip-response@1.0.
| | `-- url-parse-lax@1.0.
| +-- registry-auth-token@3.4.
| | `-- rc@1.2.
| | `-- deep-extend@0.6.
| +-- registry-url@3.1.
| | `-- rc@1.2. deduped
| `-- semver@5.3. deduped
+-- npminstall@3.1.
| +-- agentkeepalive@3.5.
| | `-- humanize-ms@1.2.
| | `-- ms@2.0. deduped
| +-- await-event@2.1.
| +-- binary-mirror-config@1.20.
| +-- bytes@2.5.
| +-- cmd-shim@2.0.
| | +-- graceful-fs@4.1. deduped
| | `-- mkdirp@0.5. deduped
| +-- co@4.6. deduped
| +-- co-fs-extra@1.2.
| | +-- co-from-stream@0.0.
| | +-- fs-extra@0.26.
| | | +-- graceful-fs@4.1. deduped
| | | +-- klaw@1.3. deduped
| | | +-- path-is-absolute@1.0. deduped
| | | `-- rimraf@2.6. deduped
| | `-- thunkify-wrap@1.0.
| | `-- enable@1.3.
| +-- debug@2.6. deduped
| +-- mkdirp@0.5. deduped
| +-- ms@2.0.
| +-- mz@2.7.
| | +-- any-promise@1.3.
| | +-- object-assign@4.1.
| | `-- thenify-all@1.6.
| | `-- thenify@3.3.
| | `-- any-promise@1.3. deduped
| +-- node-gyp@3.8.
| | +-- fstream@1.0.
| | | +-- graceful-fs@4.1. deduped
| | | +-- inherits@2.0. deduped
| | | +-- mkdirp@0.5. deduped
| | | `-- rimraf@2.6. deduped
| | +-- glob@7.1.
| | | +-- fs.realpath@1.0.
| | | +-- inflight@1.0. deduped
| | | +-- inherits@2.0. deduped
| | | +-- minimatch@3.0. deduped
| | | `-- path-is-absolute@1.0. deduped
| | +-- graceful-fs@4.1. deduped
| | +-- mkdirp@0.5. deduped
| | +-- nopt@3.0. deduped
| | +-- npmlog@4.1.
| | | +-- are-we-there-yet@1.1.
| | | | `-- delegates@1.0.
| | | `-- gauge@2.7.
| | | +-- has-unicode@2.0.
| | | +-- object-assign@4.1. deduped
| | | +-- signal-exit@3.0. deduped
| | | +-- string-width@1.0.
| | | | `-- is-fullwidth-code-point@1.0.
| | | `-- wide-align@1.1.
| | | `-- string-width@2.1. deduped
| | +-- osenv@0.1.
| | | `-- os-homedir@1.0.
| | +-- request@2.88. deduped
| | +-- rimraf@2.6. deduped
| | +-- semver@5.3. deduped
| | +-- tar@2.2. deduped
| | `-- which@1.3.
| | `-- isexe@2.0.
| +-- normalize-package-data@2.5.
| | +-- resolve@1.10.
| | +-- semver@5.3. deduped
| | `-- validate-npm-package-license@3.0.
| | +-- spdx-correct@3.1.
| | | +-- spdx-expression-parse@3.0. deduped
| | | `-- spdx-license-ids@3.0.
| | `-- spdx-expression-parse@3.0.
| | `-- spdx-license-ids@3.0. deduped
| +-- npm-package-arg@4.2.
| | `-- semver@5.3. deduped
| +-- ora@1.4.
| | +-- chalk@2.4.
| | | +-- ansi-styles@3.2.
| | | | `-- color-convert@1.9.
| | | | `-- color-name@1.1.
| | | `-- supports-color@5.5.
| | +-- cli-cursor@2.1. deduped
| | +-- cli-spinners@1.3.
| | `-- log-symbols@2.2.
| | `-- chalk@2.4.
| | +-- ansi-styles@3.2.
| | | `-- color-convert@1.9. deduped
| | `-- supports-color@5.5.
| +-- rimraf@2.6.
| | `-- glob@7.1. deduped
| +-- runscript@1.3.
| | +-- debug@2.6. deduped
| | `-- is-type-of@1.2.
| | `-- core-util-is@1.0.
| +-- semver@5.3. deduped
| +-- tar@2.2.
| | +-- block-stream@0.0.
| | | `-- inherits@2.0. deduped
| | `-- inherits@2.0.
| +-- urllib@2.34.
| | +-- any-promise@1.3. deduped
| | +-- debug@2.6. deduped
| | +-- default-user-agent@1.0.
| | | `-- os-name@1.0.
| | | `-- win-release@1.1.
| | | `-- semver@5.3. deduped
| | +-- digest-header@0.0.
| | | `-- utility@0.1.
| | | `-- address@1.1.
| | +-- ee-first@1.1.
| | +-- formstream@1.1.
| | | +-- mime@1.6.
| | | `-- pause-stream@0.0.
| | +-- iconv-lite@0.4. deduped
| | +-- proxy-agent@3.1.
| | | +-- agent-base@4.2.
| | | | `-- es6-promisify@5.0.
| | | +-- debug@3.2.
| | | | `-- ms@2.1.
| | | +-- http-proxy-agent@2.1.
| | | | `-- debug@3.1.
| | | | `-- ms@2.0. deduped
| | | +-- https-proxy-agent@2.2.
| | | | `-- debug@3.2.
| | | | `-- ms@2.1.
| | | +-- lru-cache@4.1. deduped
| | | +-- pac-proxy-agent@3.0.
| | | | +-- debug@3.2.
| | | | | `-- ms@2.1.
| | | | +-- get-uri@2.0.
| | | | | +-- data-uri-to-buffer@2.0.
| | | | | +-- debug@4.1.
| | | | | | `-- ms@2.1.
| | | | | +-- file-uri-to-path@1.0.
| | | | | +-- ftp@0.3.
| | | | | | +-- readable-stream@1.1.
| | | | | | | +-- core-util-is@1.0. deduped
| | | | | | | +-- inherits@2.0. deduped
| | | | | | | +-- isarray@0.0.
| | | | | | | `-- string_decoder@0.10.
| | | | | | `-- xregexp@2.0. deduped
| | | | | `-- readable-stream@3.3.
| | | | | +-- inherits@2.0. deduped
| | | | | `-- string_decoder@1.1. deduped
| | | | +-- http-proxy-agent@2.1. deduped
| | | | +-- https-proxy-agent@2.2. deduped
| | | | +-- pac-resolver@3.0.
| | | | | +-- co@4.6. deduped
| | | | | +-- degenerator@1.0.
| | | | | | `-- escodegen@1.11.
| | | | | | +-- esutils@2.0.
| | | | | | +-- optionator@0.8.
| | | | | | | +-- deep-is@0.1. deduped
| | | | | | | +-- levn@0.3.
| | | | | | | | `-- prelude-ls@1.1. deduped
| | | | | | | +-- prelude-ls@1.1.
| | | | | | | +-- type-check@0.3.
| | | | | | | | `-- prelude-ls@1.1. deduped
| | | | | | | `-- wordwrap@1.0.
| | | | | | `-- source-map@0.6.
| | | | | `-- thunkify@2.1.
| | | | +-- raw-body@2.4.
| | | | | +-- http-errors@1.7.
| | | | | | +-- depd@1.1.
| | | | | | +-- inherits@2.0. deduped
| | | | | | +-- setprototypeof@1.1.
| | | | | | `-- statuses@1.5. deduped
| | | | | `-- iconv-lite@0.4. deduped
| | | | `-- socks-proxy-agent@4.0. deduped
| | | +-- proxy-from-env@1.0.
| | | `-- socks-proxy-agent@4.0.
| | | `-- socks@2.3.
| | +-- pump@3.0.
| | +-- qs@6.5. deduped
| | +-- statuses@1.5.
| | `-- utility@1.16. deduped
| +-- utility@1.16.
| | +-- escape-html@1.0.
| | +-- mkdirp@0.5. deduped
| | `-- unescape@1.0.
| | `-- extend-shallow@2.0.
| `-- uuid@3.3.
+-- os-locale@1.4.
| `-- lcid@1.0.
| `-- invert-kv@1.0.
+-- semver@5.3.
`-- websocket@1.0.
+-- debug@2.2.
| `-- ms@0.7.
+-- typedarray-to-buffer@3.0.
| `-- is-typedarray@1.0. deduped
`-- yaeti@0.0. C:\Users\yl>app-inspector -u WTKDU17111000609 --verbose C:\Users\yl>npm install app-inspector -g
npm WARN deprecated tough-cookie@2.2.: ReDoS vulnerability parsing Set-Cookie https://nodesecurity.io/advisories/130
npm WARN deprecated hawk@3.1.: 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.: Use uuid module instead
npm WARN deprecated boom@2.10.: 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.: 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.: 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.: 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.: 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. npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.0. (node_modules\app-inspector\node_modules\chokidar\node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.: wanted {"os":"darwin","arch":"any"} (current: {"os":"win32","arch":"x64"})
npm WARN react-syntax-highlighter@7.0. requires a peer of react@>= 0.14. but none was installed.
真机控件获取 app-inspector的更多相关文章
- React Native 教程:001 - 如何运行官方控件示例 App
原文发表于我的技术博客 本文主要讲解了如何运行 React Native 官方控件示例 App,包含了一些 React Native 的基础知识以及相关环境的配置. 原文发表于我的技术博客 React ...
- CheckBoxList控件获取多选择,需要遍历
CheckBoxList控件获取多选择,需要遍历,环境:vs2008 在页面上添加CheckBoxList控件,输入项值 a,b,c,d.然后添加按钮 Button2确定,如何获取CheckBoxLi ...
- JavaScript经典代码【一】【javascript HTML控件获取值】
javascript HTML控件获取值 1.下拉列表框选定值 ddlPageSize.options[ddlPageSize.selectedIndex].value ddlPageSize.opt ...
- 通过控件获取cell
#pragma mark - 通过控件获取cell -(UITableViewCell*)GetCellFromTableView:(UITableView*)tableView Sender:(id ...
- Element ui tree树形控件获取当前节点id和父节点id
低版本Element ui tree树形控件获取当前节点id和父节点id的方法:点击查看 最新版本Element ui tree树形控件获取当前节点id和父节点id教程: 1.找到node_modul ...
- WPF设置控件获取键盘焦点时的样式FocusVisualStyle
控件获取焦点除了用鼠标外,可以通过键盘来获取,比如Tab键或者方向键等,需要设置控件获取键盘焦点时的样式,可以通过设置FrameworkElemnt.FocusVisualStyle属性, 因为几乎所 ...
- app控件获取之uiautomatorviewer
初探 在Android的SDk提供了以下的工具来支持我们进行UI自动化测试: uiautomatorviewer:用来扫描和分析Android应用程序的UI控件的工具. uiautomator:一个包 ...
- Appium移动自动化测试(五)--app控件获取之uiautomatorviewer
初探 在Android的SDk提供了以下的工具来支持我们进行UI自动化测试: uiautomatorviewer:用来扫描和分析Android应用程序的UI控件的工具. uiautomator:一个包 ...
- iOS 证书、真机调试、发布 App Store
之前对iOS的证书弄的很不清楚,Xcode里面也有各种证书,作为一只有强迫症的巨蟹座,这是不能忍的 趁着准备发布自己的第一个app,梳理一下这块内容 主要参考了这几篇文章: iOS开发:创建真机调试证 ...
随机推荐
- laravel 守护进程Supervisor的配置
安装Supervisor Supervisor是Linux系统中常用的进程守护程序.如果队列进程queue:work意外关闭,它会自动重启启动队列进程.在Ubuntu安装Supervisor 非常简单 ...
- linux中$1的意思
$1 在shell中成为“位置参数”,表示传入的第一个参数.在shell脚本主体中,表示shell脚本的第一个参数.用在shell脚本函数里时,表示的是函数的第一个入参.
- 关于对ProgressBar定义模板的一些总结
在之前的博客中曾经写到了一篇关于如何定义圆形进度条的文章,今天就ProgressBar再来进行一些总结,首先来介绍一下ProgressBar的结构,ProgressBar控件的模板有两个部分,我们在定 ...
- dbExpress操作中用TDBGrid显示数据
由于一些数据感知组件如TDBGrid等是需要用到数据缓存的,这和dbExpress组件的存取机制是矛盾的.所以当打开数据集时会出现如下内容的警告框:“Operation not allowed on ...
- css繼承
概念:就是上級設置了css屬性,下級默認有同樣的樣式,如果下級需要不一樣的樣式,那麼就需要單獨對下級設置. 範圍: font-family:字體 font-weight:粗細 font-size:尺寸 ...
- C#里XML(JSON)序列化时,自动隐藏值为Null的成员的输出
从StackOverflow里找到的答案.发现对最新的Newtownsoft的JSON序列化也同样适用. https://stackoverflow.com/questions/5818513/xml ...
- react 入坑笔记(三) - Props
React Props props - 参数. 组件类 React.Component 有个 defaultProps 属性,以 class xxx extend React.Component 形式 ...
- SQL 对等发布
发布类型: 快照发布:发布服务器按预定的时间间隔向订阅服务器发送已发布数据的快照.事务发布:在订阅服务器收到已发布数据的初始快照后,发布服务器将事务流式传输到订阅服务器.对等发布:对等发布支持多主复制 ...
- Codeforces997C Sky Full of Stars 【FMT】【组合数】
题目大意: 一个$n*n$的格子,每个格子由你填色,有三种允许填色的方法,问有一行或者一列相同的方案数. 题目分析: 标题的FMT是我吓人用的. 一行或一列的问题不好解决,转成它的反面,没有一行和一列 ...
- BZOJ 4196 软件包管理器
树链剖分 建树之后,安装软件就是让跟节点到安装的节点路径所有点权+1,卸载软件就是让一个节点和他的子数-1 要求变化数量的话直接求和相减就行啦(绝对值) 注意一点,一开始的lazyatag应该是-1, ...