Giter Club home page Giter Club logo

fastbot_android's Introduction

Fastbot-Android Open Source Handbook

Introduction

Fastbot is a model-based testing tool for modeling GUI transitions to discover app stability problems. It combines machine learning and reinforcement learning techniques to assist discovery in a more intelligent way.

Related: Fastbot-iOS

***More detail see at Fastbot architecture

Features

  • Fastbot is compatible with multiple Android OS systems, including original Android, Android 5-14 and a variation of modified Andriod-based system by domestic manufacturers.
  • Inherited from original Monkey, Fastbot allows for fast action insertion as high as 12 actions per second.
  • Expert system is equipped with the ability to customize deeply based on needs from different business lines.
  • Fastbot is a model-based-testing tool. Model is build via graph transition with the consideration of high reward choice selection.

update 2023.9

  • Add Fastbot code analysis file for quick understanding of the source code. You can find it here.

update 2023.8

  • Java & Cpp code are fully open-sourced, feel free to build/extend Fastbot on your own (supported by and collaborated with Prof. Ting Su's research group from East China Normal University). Welcome any code or idea contribution!

update 2023.3

  • support android 13

update 2022.1

  • update Fastbot Revised License

update 2021.11

  • support android 12
  • add some new GUI fuzzing & mutation features (inspired/supported by Themis)

update 2021.09

  • Fastbot supports model reuse: see at /sdcard/fastbot_[packagename].fbm. This file is loaded by default if it exists when Fastbot starts. During execution, it is overwritten every 10 minutes. The user can delete or copy this file based on their needs.

Build

The specific method of compiling Fastbot's apk file monkey.apk.

The compilation of this project depends on gradle, so please install gradle first. Since there are many versions of gradle, the compatibility between different versions is different, so it is recommended to use sdkman to download and manage different versions of gradle. For specific installation and use of sdkman, please refer to: https://sdkman.io/

In short, to install sdkman, execute the following command in the shell:

curl -s "https://get.sdkman.io" | bash

After installing sdkman, please cd to the Fastbot project folder to open the shell, and execute the following command in the shell:

sdk install gradle 7.6.2 
gradle wrapper

This project relies on ndk and cmake. After installing gradle, please install the SDK required for Android development and execute the following command to install the specific version of ndk and cmake required by this project. Of course, you can also modify the build.gradle file in the monkey directory to modify the versions of ndk and cmake to the versions in your development environment.

sdkmanager "cmake;3.18.1"
sdkmanager "ndk;25.2.9519653"

After that, enter the following command:

./gradlew clean makeJar
~/Library/Android/sdk/build-tools/28.0.3/dx --dex --output=monkeyq.jar monkey/build/libs/monkey.jar

After the compilation process is over, you can see the monkeyq.jar file in the root directory. This file is the final compiled Fastbot java package.

After compiling the so file, run:

sh ./build_native.sh

After the compilation process, you can see the .so file in the libs directory. This file directory is the final compiled Fastbot so package.

Usage

Environment preparation

  • Clone this repo, cd this repo and build monkeyq.jar, and please make sure the ndk and cmake are all well configured in your environment.
    ./gradlew clean makeJar
    sh ./build_native.sh
    ~/Library/Android/sdk/build-tools/28.0.3/dx --dex --output=monkeyq.jar monkey/build/libs/monkey.jar
  • Push artifacts into your device.
    adb push monkey/build/libs/monkeyq.jar /sdcard/monkeyq.jar
    adb push fastbot-thirdpart.jar /sdcard/fastbot-thirdpart.jar
    adb push libs/* /data/local/tmp/
    adb push framework.jar /sdcard/framework.jar

Run Fastbot with shell command

adb -s device_vendor_id shell CLASSPATH=/sdcard/monkeyq.jar:/sdcard/framework.jar:/sdcard/fastbot-thirdpart.jar exec app_process /system/bin com.android.commands.monkey.Monkey -p package_name --agent reuseq --running-minutes duration(min) --throttle delay(ms) -v -v

  • before run the command,user can push the strings in apk to /sdcard/ to improve the model

    • aapt2 or aapt depends your android sdk, a sample aapt path is ${ANDROID_HOME}/build-tools/28.0.2/aapt2
    aapt2 dump  --values strings  [testApp_path.apk] > max.valid.strings
    adb push max.valid.strings /sdcard 

For more Details, please refer to the handbook in 中文手册

required parameters

-s device_vendor_id # if multiple devices allowed, this parameter is needed; otherwise just optional
-p package_name # app package name under test, the package name for the app under test can be acquired by "adb shell pm list package", once the device is ensured for connection by "adb devices"
--agent robot # strategy selected for testing, no need to modify
--running-minutes duration # total amount time for testing
--throttle delay # time lag between actions

optional parameters

--bugreport # log printed when crash occurs
--output-directory /sdcard/xxx # folder for output directory

optional fuzzing data

adb push data/fuzzing/ /sdcard/
adb shell am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d file:///sdcard/fuzzing

Results Explanation

Observed crash and ANR

  • Observed Java crash, ANR and native crash will be written into /sdcard/crash-dump.log
  • Observed ANR will be written into /sdcard/oom-traces.log

Activity coverage data

  • Total activity list will be printed in shell after Fastbot job done, together with explored activity list and rate of coverage in this job run.
  • Equation for total activity coverage: coverage = exploredActivity / totalActivity * 100%
  • Be aware for totalActivity: The list totalActivity is acquired through framework interface PackageManager.getPackageInfo. Contained activities in the list includes many abandoned, invisible or not-reachable activities.

Code Analysis and Extension

Basic framework

Fastbot-Android comprises Java and C++ code. The Java codebase is located in the "monkey" directory, while the C++ codebase resides in the "native" directory. The Java code is implemented on the basis of Monkey. Its primary role is to interact with Android devices and the local server, and pass GUI information to the Native layer. The Native layer then computes the Action with the highest expected reward for the next step and returns it to the client as an Operate object which is formatted as JSON.

Extension

To extend Fastbot, you can make enhancements to both the Java layer and the C++ layer.

For more details, please refer to the fastbot code analysis file.

Acknowledgement

  • We appreciate the insights and code contribution by Prof. Ting Su (East China Normal University)、Dr. Tianxiao Gu and Prof. Zhendong Su (ETH Zurich) etc.
  • We thank the useful discussions with Prof. Yao Guo (PKU) on Fastbot.
  • We want to express our gratitude to Prof. Zhenhua Li (THU) and Dr. Liangyi Gong (THU) for their helpful opinions on Fastbot.
  • We are also grateful for valuable advices from Prof. Jian Zhang (Chinese Academy of Sciences).

Publications

If you use our work in your research, please kindly cite us as:

  1. Lv, Zhengwei, Chao Peng, Zhao Zhang, Ting Su, Kai Liu, Ping Yang (2022). “Fastbot2: Reusable Automated Model-based GUI Testing for Android Enhanced by Reinforcement Learning”. In proceedings of the 37th IEEE/ACM International Conference on Automated Software Engineering (ASE 2022). ACM, To appear. [pdf]
@inproceedings{fastbot2,
  title={Fastbot2: Reusable Automated Model-based GUI Testing for Android Enhanced by Reinforcement Learning},
  author={Lv, Zhengwei and Peng, Chao and Zhang, Zhao and Su, Ting and Liu, Kai and Yang, Ping},
  booktitle={Proceedings of the 37th IEEE/ACM International Conference on Automated Software Engineering (ASE 2022)},
  year={2022}
}
  1. Peng, Chao, Zhao Zhang, Zhengwei Lv, Ping Yang (2022). “MUBot: Learning to Test Large-Scale Commercial Android Apps like a Human”. In proceedings of the 38th International Conference on Software Maintenance and Evolution (ICSME 2022). IEEE, To appear. [pdf]
@inproceedings{mubot,
  title={MUBot: Learning to Test Large-Scale Commercial Android Apps like a Human},
  author={Peng, Chao and Zhang, Zhao and Lv, Zhengwei and Yang, Ping},
  booktitle={Proceedings of the 38th International Conference on Software Maintenance and Evolution (ICSME 2022)},
  year={2022}
}
  1. Cai, Tianqin, Zhao Zhang, and Ping Yang. “Fastbot: A Multi-Agent Model-Based Test Generation System”. In Proceedings of the IEEE/ACM 1st International Conference on Automation of Software Test. 2020. [pdf]
@inproceedings{fastbot,
  title={Fastbot: A Multi-Agent Model-Based Test Generation System},
  author={Cai, Tianqin and Zhang, Zhao and Yang, Ping},
  booktitle={Proceedings of the IEEE/ACM 1st International Conference on Automation of Software Test},
  pages={93--96},
  year={2020}
}

Contributors

Zhao Zhang, Jianqiang Guo, Yuhui Su, Tianxiao Gu, Zhengwei Lv, Tianqin Cai, Chao Peng, Bao Cao, Shanshan Shao, Dingchun Wang, Jiarong Fu, Ping Yang, Ting Su, Mengqian Xu

Welcome more one to become contributors

fastbot_android's People

Contributors

bytedance-se-research avatar geron-cn avatar mengqianx avatar mrx1203 avatar zhangzhao4444 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fastbot_android's Issues

UiAutomationService 已注册 怎么解决求帮助

自带的uiautomatorviewer启动失败后,我下载了weditor去查看页面元素,然后运行就报UiAutomationService 已注册
UiAutomationService android.accessibilityservice.IAccessibilityServiceClient$Stub$Proxy@948f1c0already registered!

企业微信截图_032c2460-77b7-45da-9f59-b203944a6070

点击cocos2D控件报错

[1615972176924] New state: g0s2@com.hxhdxd.kaxda.module.courseplayer.HDCourseVideoPlayerActivity@1695406497
[1615972176925] New action: g0a46@CLICKWidget{hashCode=820498306, index=0, clazz='android.widget.TextView', resourceId='com.hxhdxd.kaxda:id/zhangzhaopatch@897060', operationTypeMask=6, scrollType=none, text='流畅', contentDesc=''}[priority=24][throttle=200][][saturation=(0.0,1)][bounds=(1538,725,2176,874)]
[1615972176925] *** Inject event ***
[1615972176927] :Sending Touch (ACTION_DOWN): 0:(1857.0,799.5)
[1615972176932] :Sending Touch (ACTION_UP): 0:(1857.0,799.5)
[1615972176936] Sleep for 0 ms
[1615972176938] Sleep for 800 ms
[1615972177742] Sleep for 0 ms
[1615972177765] // Monkey is over!
[1615972177766] :Sending rotation degree : 0, persist : false
[1615972177785] Running failed
java.lang.IllegalStateException: Already in the pool!
at android.util.Pools$SimplePool.release(Pools.java:112)
at android.util.Pools$SynchronizedPool.release(Pools.java:168)
at android.view.accessibility.AccessibilityNodeInfo.recycle(AccessibilityNodeInfo.java:3156)
at android.view.accessibility.AccessibilityCache.add(AccessibilityCache.java:330)
at android.view.accessibility.AccessibilityInteractionClient.finalizeAndCacheAccessibilityNodeInfo(AccessibilityInteractionClient.java:811)
at android.view.accessibility.AccessibilityInteractionClient.finalizeAndCacheAccessibilityNodeInfos(AccessibilityInteractionClient.java:831)
at android.view.accessibility.AccessibilityInteractionClient.findAccessibilityNodeInfoByAccessibilityId(AccessibilityInteractionClient.java:352)[1615972177788] Please report this bug issue to github

at android.view.accessibility.AccessibilityInteractionClient.getRootInActiveWindow(AccessibilityInteractionClient.java:207)
at android.app.UiAutomation.getRootInActiveWindow(UiAutomation.java:495)
at com.android.commands.monkey.y.y(SourceFile:11448)
at com.android.commands.monkey.y.l(SourceFile:1259)
at com.android.commands.monkey.Monkey.f(SourceFile:1861)
at com.android.commands.monkey.Monkey.a(SourceFile:1105)
at com.android.commands.monkey.Monkey.main(SourceFile:827)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:352)

看下呢 Failed to allocate a 51264 byte

java.lang.OutOfMemoryError: Failed to allocate a 51264 byte allocation with 4896 free bytes and 4KB until OOM, max allowed footprint 268435456, growth limit 268435456
at java.lang.StringFactory.newStringFromChars(StringFactory.java:220)
at java.lang.StringBuffer.toString(StringBuffer.java:671)
at java.io.StringWriter.toString(StringWriter.java:210)
at com.android.a.d.a.bZ(SourceFile:170)
at com.android.a.a.e.c(SourceFile:2261)
at com.android.a.a.b.b(SourceFile:236)
at com.android.a.a.b.a(SourceFile:226)
at com.android.commands.monkey.y.y(SourceFile:680)
at com.android.commands.monkey.y.l(SourceFile:1239)
at com.android.commands.monkey.Monkey.f(SourceFile:1861)
at com.android.commands.monkey.Monkey.a(SourceFile:1105)
at com.android.commands.monkey.Monkey.main(SourceFile:827)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:285)

无法生存日志

adb shell CLASSPATH=/sdcard/monkeyq.jar:/sdcard/framework.jar exec app_process /system/bin com.android.commands.monkey.Monkey -p com.stardust.kissreader --agent robot --running-minutes 5 --throttle 600 --bugreport --output-directory /sdcard/Kisslog\crash -v -v

请问下作者大大,我保存文件的命令错了么,我只有文件件,没看到过log日志

Running failed java.lang.RuntimeException: android.os.DeadSystemException

Running failed
[1628044934086] Please report this bug issue to github
java.lang.RuntimeException: android.os.DeadSystemException
at android.hardware.input.InputManager.injectInputEvent(InputManager.java:909)
at com.android.commands.monkey.q.a(SourceFile:227)
at com.android.commands.monkey.Monkey.f(SourceFile:1863)
at com.android.commands.monkey.Monkey.a(SourceFile:1105)
at com.android.commands.monkey.Monkey.main(SourceFile:827)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:399)
Caused by: android.os.DeadSystemException
... 7 more

测试机型:redmi 9T 使用过程中monkey不能正常执行

java.lang.OutOfMemoryError: Failed to allocate a 21296 byte allocation with 11584 free bytes and 11KB until OOM, target footprint 134217728, growth limit 134217728
at java.lang.StringFactory.newStringFromChars(StringFactory.java:260)
at java.lang.StringBuffer.toString(StringBuffer.java:671)
at java.io.StringWriter.toString(StringWriter.java:210)
at com.android.a.d.a.cc(SourceFile:170)
at com.android.a.a.e.c(SourceFile:2263)
at com.android.a.a.b.b(SourceFile:236)
at com.android.a.a.b.a(SourceFile:226)
at com.android.commands.monkey.y.y(SourceFile:681)
at com.android.commands.monkey.y.l(SourceFile:1259)
at com.android.commands.monkey.Monkey.f(SourceFile:1861)
at com.android.commands.monkey.Monkey.a(SourceFile:1105)
at com.android.commands.monkey.Monkey.main(SourceFile:827)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:419)
[1619455282544] Please report this bug issue to github

Fastbot设置事件类型比例无效

adb -s 172.28.51.74 shell CLASSPATH=/sdcard/monkeyq.jar:/sdcard/framework.jar exec app_process /system/bin com.android.commands.monkey.Monkey -p --pct-touch 50 --pct-motion 50 --agent robot --act-blacklist-file /sdcard/abl.strings --running-minutes 120 --throttle 1200 -v -v

在命令行中Touch事件和Motion事件,并且比例达到100%,可是在运行的时候仍会发送syskey事件。
请问各位大佬该如何解决。

java.lang.IllegalStateException: UiAutomationService android.accessibilityservice.IAccessibilityServiceClient$Stub$Proxy@939892already registered!

Running failed
java.lang.IllegalStateException: UiAutomationService android.accessibilityservice.IAccessibilityServiceClient$Stub$Proxy@939892already registered!
at android.os.Parcel.createExceptionOrNull(Parcel.java:2384)
at android.os.Parcel.createException(Parcel.java:2360)
at android.os.Parcel.readException(Parcel.java:2343)
at android.os.Parcel.readException(Parcel.java:2285)
at android.view.accessibility.IAccessibilityManager$Stub$Proxy.registerUiTestAutomationService(IAccessibilityManager.java:739)
at android.app.UiAutomationConnection.registerUiTestAutomationServiceLocked(UiAutomationConnection.java:456)
at android.app.UiAutomationConnection.connect(UiAutomationConnection.java:106)
at android.app.UiAutomation.connect(UiAutomation.java:243)
at android.app.UiAutomation.connect(UiAutomation.java:219)
at com.android.commands.monkey.y.connect(SourceFile:219)
at com.android.commands.monkey.y.(SourceFile:276)
at com.android.commands.monkey.Monkey.a(SourceFile:1024)
at com.android.commands.monkey.Monkey.main(SourceFile:827)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:463)
Caused by: android.os.RemoteException: Remote stack trace:
at com.android.server.accessibility.UiAutomationManager.registerUiTestAutomationServiceLocked(UiAutomationManager.java:97)
at com.android.server.accessibility.AccessibilityManagerService.registerUiTestAutomationService(AccessibilityManagerService.java:870)
at android.view.accessibility.IAccessibilityManager$Stub.onTransact(IAccessibilityManager.java:371)
at android.os.Binder.execTransactInternal(Binder.java:1157)
at android.os.Binder.execTransact(Binder.java:1126)

[1627979221474] Please report this bug issue to github

能否指定遍历深度

是否支持遍历深度,不想遍历的太深,只想遍历深度为3层,可以进行配置吗

java.lang.OutOfMemoryError: Failed to allocate a 106112 byte allocation with 99128 free bytes and 96KB until OOM, target footprint 134217728, growth limit 134217728

[1631182553764] *** Get guitree ***
[1631182559126] // Monkey is over!
[1631182559127] :Sending rotation degree : 0, persist : false
[1631182559167] Running failed
java.lang.OutOfMemoryError: Failed to allocate a 106112 byte allocation with 99128 free bytes and 96KB until OOM, target footprint 134217728, growth limit 134217728
at java.lang.StringFactory.newStringFromChars(StringFactory.java:260)
at java.lang.StringBuffer.toString(StringBuffer.java:671)
at java.io.StringWriter.toString(StringWriter.java:210)
at com.android.a.d.a.cc(SourceFile:170)
at com.android.a.a.e.c(SourceFile:2263)
at com.android.a.a.b.b(SourceFile:236)
at com.android.a.a.b.a(SourceFile:226)
at com.android.commands.monkey.y.y(SourceFile:681)
at com.android.commands.monkey.y.l(SourceFile:1259)
at com.android.commands.monkey.Monkey.f(SourceFile:1861)
at com.android.commands.monkey.Monkey.a(SourceFile:1105)
at com.android.commands.monkey.Monkey.main(SourceFile:827)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:463)
[1631182559170] Please report this bug issue to github

Andorid6 requires INJECT_EVENTS permission

android6 的设备权限有关,貌似和Fastbot无关。
但是细细想一下,被测app的进程如果是fastbot的子进程的话应该就不存在这个问题吧。这个比较让人疑惑。
求指教。

[1608024374386] *** Inject event ***
[1608024374396] :Sending Touch (ACTION_DOWN): 0:(540.0,984.5)
[1608024374397] // Injection Failed com.android.commands.monkey.E@f72519e
[1608024374398] :Sending Touch (ACTION_MOVE): 0:(540.0,984.5)
[1608024374399] // Injection Failed com.android.commands.monkey.E@6bf147f
[1608024374400] Waiting Event for 20 milliseconds
[1608024374421] Sleep for 0 ms
[1608024374423] :Sending Touch (ACTION_MOVE): 0:(593.9,984.5)
[1608024374424] // Injection Failed com.android.commands.monkey.E@d49c4c
[1608024374424] Waiting Event for 20 milliseconds
[1608024374445] Sleep for 0 ms
[1608024374446] :Sending Touch (ACTION_MOVE): 0:(647.8,984.5)
[1608024374447] // Injection Failed com.android.commands.monkey.E@ede495
[1608024374448] Waiting Event for 20 milliseconds
[1608024374469] Sleep for 0 ms
[1608024374470] :Sending Touch (ACTION_MOVE): 0:(701.7,984.5)
[1608024374471] // Injection Failed com.android.commands.monkey.E@12de9aa
[1608024374472] Waiting Event for 20 milliseconds
[1608024374492] Sleep for 0 ms
[1608024374493] :Sending Touch (ACTION_MOVE): 0:(755.6,984.5)
[1608024374494] // Injection Failed com.android.commands.monkey.E@13a799b
[1608024374495] Waiting Event for 20 milliseconds
[1608024374515] Sleep for 0 ms
[1608024374516] :Sending Touch (ACTION_MOVE): 0:(809.5,984.5)
[1608024374517] // Injection Failed com.android.commands.monkey.E@fd53138
[1608024374518] Waiting Event for 20 milliseconds
[1608024374539] Sleep for 0 ms
[1608024374539] :Sending Touch (ACTION_MOVE): 0:(863.4,984.5)
[1608024374540] // Injection Failed com.android.commands.monkey.E@c153511
[1608024374541] Waiting Event for 20 milliseconds
[1608024374562] Sleep for 0 ms
[1608024374563] :Sending Touch (ACTION_MOVE): 0:(917.3,984.5)
[1608024374564] // Injection Failed com.android.commands.monkey.E@758f676
[1608024374565] Waiting Event for 20 milliseconds
[1608024374586] Sleep for 0 ms
[1608024374587] :Sending Touch (ACTION_MOVE): 0:(971.2,984.5)
[1608024374589] // Injection Failed com.android.commands.monkey.E@13d1477
[1608024374589] Waiting Event for 20 milliseconds
[1608024374610] Sleep for 0 ms
[1608024374611] :Sending Touch (ACTION_MOVE): 0:(1025.1,984.5)
[1608024374612] // Injection Failed com.android.commands.monkey.E@e4828e4
[1608024374613] Waiting Event for 20 milliseconds
[1608024374634] Sleep for 0 ms
[1608024374634] :Sending Touch (ACTION_UP): 0:(1079.0,984.5)
[1608024374636] // Injection Failed com.android.commands.monkey.E@587114d
[1608024374637] Sleep for 0 ms
[1608024374638] Sleep for 1000 ms
[1608024375640] Sleep for 0 ms
[1608024375649] :Send Key (ACTION_DOWN): 187 // KEYCODE_APP_SWITCH
[1608024375652] // Monkey is over!
[1608024375652] :Sending rotation degree : 0, persist : false
[1608024375667] Running failed
java.lang.SecurityException: Injecting to another application requires INJECT_EVENTS permission
at android.os.Parcel.readException(Parcel.java:1620)
at android.os.Parcel.readException(Parcel.java:1573)
at android.hardware.input.IInputManager$Stub$Proxy.injectInputEvent(IInputManager.java:434)
at android.hardware.input.InputManager.injectInputEvent(InputManager.java:798)
at com.android.commands.monkey.p.a(SourceFile:132)
at com.android.commands.monkey.Monkey.f(SourceFile:1863)
at com.android.commands.monkey.Monkey.a(SourceFile:1105)
at com.android.commands.monkey.Monkey.main(SourceFile:827)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:332)

运行后提示org.json.JSONException: Value at 3 is null.

输入参数:adb -s XPL0220910005847 shell CLASSPATH=/sdcard/monkeyq.jar:/sdcard/framework.jar exec app_process /system/bin com.android.commands.monkey.Monkey -p com.xx.xxx --agent robot --running-minutes 5 --throttle 600 -v -v

报以下错误:
org.json.JSONException: Value at 3 is null.
at org.json.JSONArray.get(JSONArray.java:291)
at org.json.JSONArray.getJSONObject(JSONArray.java:523)
at com.android.a.c.a.g.b(SourceFile:82)
at com.android.a.c.a.g.b(SourceFile:56)
at com.android.a.c.a.f.(SourceFile:70)
at com.android.a.c.a.f.dump(Unknown Source:0)
at com.android.commands.monkey.Monkey.a(SourceFile:1022)
at com.android.commands.monkey.Monkey.main(SourceFile:827)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:359)

黑名单中配置bounds报错

max.widget.black配置如下:
[
{
"activity":"com.xier.bckid.main.MainActivity",
"xpath": "//[@text='设置']"
},
{
"xpath": "//
[@resource-id='com.xier.bckid:id/ivDebug']"
},
{
"activity":"com.xier.bckid.main.MainActivity",
"xpath": "//[@text='在线客服']"
},
{
"activity":"com.xier.mine.message.group.MsgGroupActivity",
"xpath": "//
[@text='在线客服']"
},
{
"activity":"com.xier.shop.goodsdetail.GoodsDetailActivity",
"xpath": "//*[@resource-id='com.xier.bckid:id/llCustomerService']",
"bounds":"[156,2190][276,2340]"
}
]

运行命令如下:
adb -s RPG0219720008849 shell CLASSPATH=/sdcard/monkeyq.jar:/sdcard/framework.jar exec app_process /system/bin com.android.commands.monkey.Monkey -p com.xier.bckid --agent robot --running-minutes 60 --throttle 500 -v -v --bugreport --output-directory /sdcard/fastbotlog

运行启动报错:
image

请大佬帮忙看看是啥问题?

fastbot 黑名单无效

黑名单:

[
{
"activity":"a1.b1.c1.bussiness.usercenter.activity.SettingFunctionActivity",
"xpath": "//android.widget.TextView[@text='退出登录']"
}
]

日志:
[1607323166075] *** Get guitree ***
[1607323166076]
<?xml version="1.0" encoding="UTF-8"?><node index="0" text="" resource-id="" class="android.widget.FrameLayout" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[0,0][1080,2340]"> <node index="0" text="" resource-id="a1.b1.c1.client.stg:id/back_actionbar_container" class="android.widget.RelativeLayout" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[0,75][1080,196]"> <node index="0" text="" resource-id="a1.b1.c1.client.stg:id/back_left_container" class="android.widget.TextView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[0,75][122,196]"/> <node index="1" text="设置" resource-id="a1.b1.c1.client.stg:id/back_title" class="android.widget.TextView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[292,102][787,169]"/> </node> <node index="1" text="" resource-id="" class="android.widget.ScrollView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="false" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[0,196][1080,2210]"> <node index="0" text="" resource-id="a1.b1.c1.client.stg:id/setting_function_news_notification_container" class="android.widget.LinearLayout" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[0,197][1080,329]"> <node index="0" text="新消息通知" resource-id="a1.b1.c1.client.stg:id/zhangzhaopatch@-868466974" class="android.widget.TextView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[41,233][1039,292]"/> </node> <node index="1" text="" resource-id="a1.b1.c1.client.stg:id/setting_function_dont_disturb_container" class="android.widget.LinearLayout" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[0,330][1080,462]"> <node index="0" text="免打扰" resource-id="a1.b1.c1.client.stg:id/zhangzhaopatch@20806794" class="android.widget.TextView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[41,366][173,425]"/> <node index="1" text="" resource-id="a1.b1.c1.client.stg:id/setting_function_disturb_tv" class="android.widget.TextView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[173,330][1039,462]"/> </node> <node index="2" text="" resource-id="a1.b1.c1.client.stg:id/setting_function_unlock_container" class="android.widget.LinearLayout" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[0,463][1080,595]"> <node index="0" text="解锁方式" resource-id="a1.b1.c1.client.stg:id/zhangzhaopatch@1089081460" class="android.widget.TextView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[41,499][970,558]"/> <node index="1" text="" resource-id="a1.b1.c1.client.stg:id/setting_function_unlock_tv" class="android.widget.TextView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[970,502][1039,555]"/> </node> <node index="3" text="" resource-id="a1.b1.c1.client.stg:id/setting_function_general_container" class="android.widget.LinearLayout" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[0,624][1080,756]"> <node index="3" text="通用设置" resource-id="a1.b1.c1.client.stg:id/zhangzhaopatch@1128953918" class="android.widget.TextView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[41,660][1039,719]"/> </node> <node index="4" text="" resource-id="a1.b1.c1.client.stg:id/setting_function_setting_container" class="android.widget.LinearLayout" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[0,757][1080,889]"> <node index="4" text="功能设置" resource-id="a1.b1.c1.client.stg:id/zhangzhaopatch@662984238" class="android.widget.TextView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[41,793][1039,852]"/> </node> <node index="5" text="退出登录" resource-id="a1.b1.c1.client.stg:id/setting_function_log_out_tv" class="android.widget.TextView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[41,981][1039,1132]"/> </node> </node>

[1607323166077] using nstep-q agent
[1607323166078] // Display Bounds: (0,0),(1080,2340)
[1607323166078] // Black Element : //android.widget.TextView[@text='退出登录'], Index : 0
[1607323166079] // No matching nodes
[1607323166080] select new action from ucb q value: null
[1607323166081] Try to select the max value action.
[1607323166081] select new action from e-greedy
[1607323166082] new state visited : 10
[1607323166082] new action visited : 2
[1607323166082] get new reward
[1607323166082] alpha is : 0.6 default is : 0.2 moving alpha is 0.6
[1607323166082] state is saturated, get reward -0.09380863039399624
[1607323166083] update Q value
[1607323166083] // previous State and action polled
[1607323166083] // update change value
[1607323166083] get n step new reward
[1607323166083] 0step reward is 1.1
[1607323166084] 1step reward is 0.6183443085606775
[1607323166084] 2step reward is 1.2042089702148129
[1607323166084] 3step reward is 1.8186089702148132
[1607323166084] 4step reward is 1.7801849552054323
[1607323166085] // got reward : 1.7801849552054323
[1607323166085] // got qvalue : 9.842592000000002
[1607323166085] Qt=6.28896, Reward=1.7801849552054323, Qt+1=9.842592000000002, Qt'=8.30813913312326
[1607323166085] *** Making decisions ***
[1607323166085] New state: g0s1@a1.b1.c1.bussiness.usercenter.activity.SettingFunctionActivity@-1474695563
[1607323166086] New action: g0a26@CLICKWidget{hashCode=804737430, index=5, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/setting_function_log_out_tv', operationTypeMask=6, scrollType=none, text='退出登录', contentDesc=''}[priority=4][throttle=0][][saturation=(1.0,1)][bounds=(41,981,1039,1132)]
[1607323166086] *** Inject event ***
[1607323166087] :Sending Touch (ACTION_DOWN): 0:(540.0,1056.5)
[1607323166093] :Sending Touch (ACTION_UP): 0:(540.0,1056.5)
[1607323166097] Sleep for 0 ms
[1607323166098] Sleep for 100 ms
[1607323166201] Sleep for 0 ms
[1607323166222] Exception for get action resouece: g0a33@CLICKWidget{hashCode=-2136732855, index=2, clazz='android.widget.Button', resourceId='a1.b1.c1.client.stg:id/btn_right', operationTypeMask=6, scrollType=none, text='确定', contentDesc=''}[priority=4][throttle=500][][saturation=(1.0,1)][bounds=(540,1178,911,1332)]
[1607323166223] Exception for get action class: g0a33@CLICKWidget{hashCode=-2136732855, index=2, clazz='android.widget.Button', resourceId='a1.b1.c1.client.stg:id/btn_right', operationTypeMask=6, scrollType=none, text='确定', contentDesc=''}[priority=4][throttle=500][][saturation=(1.0,1)][bounds=(540,1178,911,1332)]
[1607323166224] Exception for get action resouece: g0a34@CLICKWidget{hashCode=730653600, index=1, clazz='android.widget.Button', resourceId='a1.b1.c1.client.stg:id/btn_left', operationTypeMask=6, scrollType=none, text='取消', contentDesc=''}[priority=24][throttle=0][][saturation=(1.0,1)][bounds=(168,1178,539,1332)]
[1607323166224] Exception for get action class: g0a34@CLICKWidget{hashCode=730653600, index=1, clazz='android.widget.Button', resourceId='a1.b1.c1.client.stg:id/btn_left', operationTypeMask=6, scrollType=none, text='取消', contentDesc=''}[priority=24][throttle=0][][saturation=(1.0,1)][bounds=(168,1178,539,1332)]
[1607323166225] Exception for get action resouece: g0a35@BACKg0s3@a1.b1.c1.bussiness.usercenter.activity.SettingFunctionActivity@1526358486[priority=6][throttle=200][, UNVISITED]
[1607323166225] Exception for get action class: g0a35@BACKg0s3@a1.b1.c1.bussiness.usercenter.activity.SettingFunctionActivity@1526358486[priority=6][throttle=200][, UNVISITED]
[1607323166226] *** Get guitree ***
[1607323166227]



max.widget.black中设置的控件偶尔仍然被点击

image

max.widget.black中的内容:
[
{
"activity":"com.yxcorp.gifshow.aggregate.AggregateActivity",
"xpath":"//[@resource-id='com.kuaishou.nebula:id/left_btn']"
},
{
"activity":"com.yxcorp.gifshow.aggregate.AggregateActivity",
"xpath":"//
[@resource-id='com.kuaishou.nebula:id/avatar']"
},
{
"activity":"com.yxcorp.gifshow.aggregate.AggregateActivity",
"xpath":"//[@resource-id='com.kuaishou.nebula:id/name']"
},
{
"activity":"com.yxcorp.gifshow.aggregate.AggregateActivity",
"xpath":"//
[@resource-id='com.kuaishou.nebula:id/text']"
}
]

Crash 堆栈未能写入 crash-dump.log

现象描述

FastBot 捕获到被测 app crash 但未能写入到 /sdcard/crash-dump.log 中,尝试 pull 文件报错。

日志片段

WeCom20210115-175239

执行环境
  • Pixel 2XL, Android 11

步步高s5学习机问题

[1616032712346] Sleep for 0 ms
[1616032712367] // Monkey is over!
[1616032712371] :Sending rotation degree : 0, persist : false
[1616032712403] Running failed
java.lang.IllegalStateException: Already in the pool!
at android.util.Pools$SimplePool.release(Pools.java:112)
at android.util.Pools$SynchronizedPool.release(Pools.java:168)
at android.view.accessibility.AccessibilityNodeInfo.recycle(AccessibilityNodeInfo.java:3156)
at android.view.accessibility.AccessibilityCache.add(AccessibilityCache.java:330)
at android.view.accessibility.AccessibilityInteractionClient.finalizeAndCacheAccessibilityNodeInfo(AccessibilityInteractionClient.java:811)
at android.view.accessibility.AccessibilityInteractionClient.finalizeAndCacheAccessibilityNodeInfos(AccessibilityInteractionClient.java:831)
at android.view.accessibility.AccessibilityInteractionClient.findAccessibilityNodeInfoByAccessibilityId(AccessibilityInteractionClient.java:352)
at android.view.accessibility.AccessibilityInteractionClient.getRootInActiveWindow(AccessibilityInteractionClient.java:207)
at android.app.UiAutomation.getRootInActiveWindow(UiAutomation.java:495)
at com.android.commands.monkey.y.y(SourceFile:11448)
at com.android.commands.monkey.y.l(SourceFile:1259)
at com.android.commands.monkey.Monkey.f(SourceFile:1861)
at com.android.commands.monkey.Monkey.a(SourceFile:1105)[1616032712406] Please report this bug issue to github

at com.android.commands.monkey.Monkey.main(SourceFile:827)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:352)

run with warning

[WARNING] Got IOException performing flip : java.io.FileNotFoundException: /dev/input/event0: open failed: EACCES (Permission denied)
[1610372373372] // Injection Failed com.android.commands.monkey.k@b8397b5

[ app 启动报错 ] resolve method failed: getEnabledInputMethodList

  • 机型:pixel 3
  • 操作系统:12.3 beta
  • 问题描述:
    [1628081083112] // Valid Package: xxx
    [1628081083113] // IncludeCategory : android.intent.category.LAUNCHER
    [1628081083113] // IncludeCategory : android.intent.category.MONKEY
    [1628081083136] // Selecting main activities from category android.intent.category.LAUNCHER
    [1628081083137] // - NOT USING main activity com.google.android.apps.chrome.Main (from package com.android.chrome)
    [1628081083137] // - NOT USING main activity com.android.settings.Settings (from package com.android.settings)
    [1628081083137] // - NOT USING main activity com.android.vending.AssetBrowserActivity (from package com.android.vending)
    [1628081083137] // - NOT USING main activity com.android.camera.CameraLauncher (from package com.google.android.GoogleCamera)
    [1628081083137] // - NOT USING main activity com.google.android.apps.docs.app.NewMainProxyActivity (from package com.google.android.apps.docs)
    [1628081083138] // - NOT USING main activity com.google.android.maps.MapsActivity (from package com.google.android.apps.maps)
    [1628081083138] // - NOT USING main activity com.google.android.apps.messaging.ui.ConversationListActivity (from package com.google.android.apps.messaging)
    [1628081083138] // - NOT USING main activity com.google.android.apps.photos.home.HomeActivity (from package com.google.android.apps.photos)
    [1628081083138] // - NOT USING main activity com.android.calculator2.Calculator (from package com.google.android.calculator)
    [1628081083138] // - NOT USING main activity com.android.calendar.AllInOneActivity (from package com.google.android.calendar)
    [1628081083139] // - NOT USING main activity com.android.contacts.activities.PeopleActivity (from package com.google.android.contacts)
    [1628081083139] // - NOT USING main activity com.android.deskclock.DeskClock (from package com.google.android.deskclock)
    [1628081083139] // - NOT USING main activity com.google.android.dialer.extensions.GoogleDialtactsActivity (from package com.google.android.dialer)
    [1628081083139] // - NOT USING main activity com.google.android.gm.ConversationListActivityGmail (from package com.google.android.gm)
    [1628081083139] // - NOT USING main activity com.google.android.music.tombstone.LauncherActivity (from package com.google.android.music)
    [1628081083140] // - NOT USING main activity com.google.android.youtube.app.honeycomb.Shell$HomeActivity (from package com.google.android.youtube)
    [1628081083140] // - NOT USING main activity com.ss.android.lark.main.app.MainActivity (from package com.ss.android.lark)
    [1628081083140] // - NOT USING main activity com.google.android.apps.betterbug.bugslist.BugsListActivity (from package com.google.android.apps.betterbug)
    [1628081083140] // - NOT USING main activity com.google.android.apps.nbu.files.home.HomeActivity (from package com.google.android.apps.nbu.files)
    [1628081083140] // - NOT USING main activity com.google.android.apps.safetyhub.LauncherActivity (from package com.google.android.apps.safetyhub)
    [1628081083141] // - NOT USING main activity com.google.android.googlequicksearchbox.SearchActivity (from package com.google.android.googlequicksearchbox)
    [1628081083141] // - NOT USING main activity com.google.android.gearhead.vanagon.VnLaunchPadActivity (from package com.google.android.projection.gearhead)
    [1628081083141] // - NOT USING main activity com.tencent.mobileqq.activity.SplashActivity (from package com.tencent.mobileqq)
    [1628081083141] // + Using main activity global.longbridge.android.LaunchActivity (from package xxxxxx)
    [1628081083143] // Selecting main activities from category android.intent.category.MONKEY
    [1628081083143] // - NOT USING main activity com.android.settings.Settings$RunningServicesActivity (from package com.android.settings)
    [1628081083144] // - NOT USING main activity com.android.settings.Settings$StorageUseActivity (from package com.android.settings)
    [1628081083144] // - NOT USING main activity com.google.android.apps.nexuslauncher.NexusLauncherActivity (from package com.google.android.apps.nexuslauncher)
    [1628081083144] // - NOT USING main activity com.google.android.apps.wellbeing.settings.TopLevelSettingsActivity (from package com.google.android.apps.wellbeing)
    [1628081083144] // - NOT USING main activity com.google.android.googlequicksearchbox.SearchActivity (from package com.google.android.googlequicksearchbox)
    [1628081086154] resolve method failed: getEnabledInputMethodList

配置黑控件后,匹配到了黑控件,但是仍然点击了这个黑控件

执行命令:adb shell CLASSPATH=/sdcard/monkeyq.jar:/sdcard/framework.jar exec app_process /system/bin com.android.commands.monkey.Monkey -p dji.go.v5 --agent robot --act-blacklist-file /sdcard/abl.strings --running-minutes 30 --throttle 500 -v -v -v -v > fastbot4.log

问题:设置黑控件: //*[contains(@text,'对频')] , line12-14 也匹配到了这个黑控件,然而在line39 仍触发了点击这个控件

手机:三星s10 android 9

错误日志:
1.
2. [1609834717867] *** Get guitree ***
3. [1609834717873]
4.
5.
6. [1609834717874] using nstep-q agent
7. [1609834717874] // Display Bounds: (112,0),(2280,1080)
8. [1609834717874] // Black Element : //[contains(@resource-id,'fpv_map_shell_find_drone_btn')], Index : 0
9. [1609834717876] // matching 1 nodes, //
[contains(@resource-id,'fpv_map_shell_find_drone_btn')]
10. [1609834717876] // Black Element : //[contains(@text,'更新')], Index : 0
11. [1609834717877] // No matching nodes
**12. [1609834717877] // Black Element : //
[contains(@text,'对频')], Index : 0
13. [1609834717879] // matching 1 nodes, //[contains(@text,'对频')]
14. [1609834717879] // Black Element : //
[contains(@resource-id,'fmd_btn_flash_and_beep')], Index : 0**
15. [1609834717881] // No matching nodes
16. [1609834717882] // com.dji.component.fpv.FpvComponentActivity find 2 black widgets:
17. [1609834717882] // black rect0: (1239,988),(1535,1041)
18. [1609834717882] // black rect1: (1922,933),(2225,1059)
19. [1609834717883] select new action from unvisited
20. [1609834717883] new state visited : 11
21. [1609834717884] new action visited : 0
22. [1609834717884] get new reward
23. [1609834717884] alpha is : 0.6 default is : 0.2 moving alpha is 0.6
24. [1609834717885] action first visited, get reward 1.0
25. [1609834717885] update Q value
26. [1609834717885] // previous State and action polled
27. [1609834717885] // update change value
28. [1609834717886] get n step new reward
29. [1609834717886] 0step reward is 4.2
30. [1609834717886] 1step reward is 5.0
31. [1609834717887] 2step reward is 5.768
32. [1609834717887] 3step reward is 6.28
33. [1609834717887] 4step reward is 6.6896
34. [1609834717887] // got reward : 6.6896
35. [1609834717888] // got qvalue : 0.0
36. [1609834717888] Qt=0.0, Reward=6.6896, Qt+1=0.0, Qt'=4.01376
37. [1609834717888] *** Making decisions ***
38. [1609834717889] New state: [email protected]@-2101021068
39. [1609834717889] New action: g0a72@CLICKWidget{hashCode=897765371, index=4, clazz='android.widget.TextView', resourceId='dji.go.v5:id/setting_ui_2_item_button_tv', operationTypeMask=6, scrollType=none, text='重新配对(对频)', contentDesc=''}[priority=24][throttle=200][][saturation=(0.0,1)][bounds=(1239,988,1535,1041)]
40. [1609834717889] *** Inject event ***
41. [1609834717891] // fix point: (1387.0,974.875)
42. [1609834717891] :Sending Touch (ACTION_DOWN): 0:(1387.0,974.875)
43. [1609834717894] :Sending Touch (ACTION_UP): 0:(1387.0,974.875)
44. [1609834717899] Sleep for 0 ms
45. [1609834717900] Sleep for 700 ms
46. [1609834718605] Sleep for 0 ms
47. [1609834722042] Exception for get action resouece: g0a164@CLICKWidget{hashCode=-1685199248, index=0, clazz='android.widget.TextView', resourceId='dji.go.v5:id/tv_second', operationTypeMask=22, scrollType=none, text='点击飞机上的对频', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(828,464,1563,510)]
48. [1609834722045] Exception for get action resouece: g0a165@LONG_CLICKWidget{hashCode=-1685199248, index=0, clazz='android.widget.TextView', resourceId='dji.go.v5:id/tv_second', operationTypeMask=22, scrollType=none, text='点击飞机上的对频', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(828,464,1563,510)]
49. [1609834722046] Exception for get action resouece: g0a166@CLICKWidget{hashCode=-178375035, index=1, clazz='android.widget.TextView', resourceId='dji.go.v5:id/tv_positive', operationTypeMask=6, scrollType=none, text='取消(59)', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(828,574,1563,711)]
50. [1609834722047] Exception for get action resouece: g0a167@[email protected]@60073284[priority=0][throttle=200][, UNVISITED]
51. [1609834722048] Exception for get action class: g0a167@[email protected]@60073284[priority=0][throttle=200][, UNVISITED]

完整日志:
fastbot4.log

执行命令后提示java.lang.NumberFormatException

image

[1611219982112] using nstep-q agent
[1611219982112] // Display Bounds: (0,0),(1080,2316)
[1611219982112] // Monkey is over!
[1611219982113] :Sending rotation degree : 0, persist : false
[1611219982126] Running failed
java.lang.NumberFormatException: For input string: "[216"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseFloat(FloatingDecimal.java:122)
at java.lang.Float.parseFloat(Float.java:451)
at java.lang.Float.valueOf(Float.java:416)
at com.android.a.c.a.b.b(SourceFile:134)
at com.android.a.c.a.b.a(SourceFile:1108)
at com.android.a.a.e.ay(SourceFile:129)
at com.android.a.a.c.ar(SourceFile:271)
at com.android.a.a.e.c(SourceFile:10546)
at com.android.a.a.b.b(SourceFile:236)
at com.android.a.a.b.a(SourceFile:226)
at com.android.commands.monkey.y.y(SourceFile:680)
at com.android.commands.monkey.y.l(SourceFile:1239)
[1611219982128] Please report this bug issue to github
at com.android.commands.monkey.Monkey.f(SourceFile:1861)
at com.android.commands.monkey.Monkey.a(SourceFile:1105)
at com.android.commands.monkey.Monkey.main(SourceFile:827)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:383)

【需求】遍历时的guitree增加dump本地化存储

想利用遍历的dom的xml做些diff工作,是否可以考虑把现在dom的xml命名规则改为
当前step + 当前 activity + 上一步所点击 的xpath + 具体操作 的形式?
不知道这种想法是不是合理,还请考虑。

关于内存

[1610651139970] *** Get guitree ***
[1610651144025] // Monkey is over!
[1610651144025] :Sending rotation degree : 0, persist : false
[1610651144080] Running failed
java.lang.OutOfMemoryError: Failed to allocate a 9108 byte allocation with 6544112 free bytes and 6MB until OOM; failed due to fragmentation (required continguous free 12288 bytes where largest contiguous free 8192 bytes)
at java.lang.StringFactory.newStringFromChars(Native Method)
at java.lang.AbstractStringBuilder.toString(AbstractStringBuilder.java:629)
at java.lang.StringBuffer.toString(StringBuffer.java:723)
at java.io.StringWriter.toString(StringWriter.java:100)
at com.android.a.d.a.bZ(SourceFile:170)
at com.android.a.a.e.c(SourceFile:2261)
at com.android.a.a.b.b(SourceFile:236)
at com.android.a.a.b.a(SourceFile:226)
at com.android.commands.monkey.y.y(SourceFile:680)
at com.android.commands.monkey.y.l(SourceFile:1239)
at com.android.commands.monkey.Monkey.f(SourceFile:1861)
at com.android.commands.monkey.Monkey.a(SourceFile:1105)
at com.android.commands.monkey.Monkey.main(SourceFile:827)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:251)
[1610651144081] Please report this bug issue to github

monkey跑着跑着就出现at com.android.a.d.c.a(SourceFile:505),打印了很多很多行,这是怎么了?

    at com.android.a.d.c.a(SourceFile:505)
    at com.android.a.d.c.a(SourceFile:505)
    at com.android.a.d.c.a(SourceFile:505)
    at com.android.a.d.c.a(SourceFile:505)
    at com.android.a.d.c.a(SourceFile:505)
    at com.android.a.d.c.a(SourceFile:505)
    at com.android.a.d.c.a(SourceFile:505)
    at com.android.a.d.c.a(SourceFile:505)
    at com.android.a.d.c.a(SourceFile:505)
    at com.android.a.d.c.<init>(SourceFile:1252)
    at com.android.a.c.j.b(SourceFile:107)
    at com.android.a.a.e.a(SourceFile:322)
    at com.android.a.a.e.c(SourceFile:2256)
    at com.android.a.a.b.b(SourceFile:236)
    at com.android.a.a.b.a(SourceFile:226)
    at com.android.commands.monkey.y.y(SourceFile:680)
    at com.android.commands.monkey.y.l(SourceFile:1239)
    at com.android.commands.monkey.Monkey.f(SourceFile:1861)
    at com.android.commands.monkey.Monkey.a(SourceFile:1105)
    at com.android.commands.monkey.Monkey.main(SourceFile:827)
    at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
    at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:285)

[1610003333759] Please report this bug issue to github

image

运行后报java.lang.NumberFormatException

Please report this bug issue to github
java.lang.NumberFormatException: For input string: "[0"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseFloat(FloatingDecimal.java:122)
at java.lang.Float.parseFloat(Float.java:451)
at java.lang.Float.valueOf(Float.java:416)
at com.android.a.c.a.b.b(SourceFile:134)
at com.android.a.c.a.b.a(SourceFile:1108)
at com.android.a.a.e.ay(SourceFile:129)
at com.android.a.a.c.ar(SourceFile:271)
at com.android.a.a.e.c(SourceFile:10546)
at com.android.a.a.b.b(SourceFile:236)
at com.android.a.a.b.a(SourceFile:226)
at com.android.commands.monkey.y.y(SourceFile:680)
at com.android.commands.monkey.y.l(SourceFile:1239)
at com.android.commands.monkey.Monkey.f(SourceFile:1861)
at com.android.commands.monkey.Monkey.a(SourceFile:1105)
at com.android.commands.monkey.Monkey.main(SourceFile:827)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:399)

【已知问题】本地消耗内存构建模型以及q值计算,性能差的设备长时间运行会出现OutOfMemoryError

[1611384606503] Exception for get action resouece: g26a2513@CLICKWidget{hashCode=-1817892424, index=0, clazz='android.widget.ImageView', resourceId='com.eeds.app:id/iv_title_left', operationTypeMask=6, scrollType=none, text='', contentDesc=''}[priority=4][throttle=500][][saturation=(1.0,1)][bounds=(0,75,102,234)]
[1611384606505] Exception for get action resouece: g26a2514@CLICKWidget{hashCode=-1426092412, index=1, clazz='android.widget.ImageView', resourceId='com.eeds.app:id/iv_title_finish', operationTypeMask=6, scrollType=none, text='', contentDesc=''}[priority=4][throttle=500][][saturation=(1.0,1)][bounds=(102,75,192,234)]
[1611384606507] Exception for get action resouece: g26a2515@SCROLL_BOTTOM_UPWidget{hashCode=2105448068, index=0, clazz='android.webkit.WebView', resourceId='com.eeds.app:id/zhangzhaopatch@-1211958893', operationTypeMask=34, scrollType=all, text='淘宝网触屏版', contentDesc=''}[priority=3][throttle=0][][saturation=(1.0,1)][bounds=(0,234,1080,1920)]
[1611384606508] Exception for get action resouece: g26a2516@SCROLL_TOP_DOWNWidget{hashCode=2105448068, index=0, clazz='android.webkit.WebView', resourceId='com.eeds.app:id/zhangzhaopatch@-1211958893', operationTypeMask=34, scrollType=all, text='淘宝网触屏版', contentDesc=''}[priority=2][throttle=0][][saturation=(1.0,1)][bounds=(0,234,1080,1920)]
[1611384606510] Exception for get action resouece: g26a2517@SCROLL_LEFT_RIGHTWidget{hashCode=2105448068, index=0, clazz='android.webkit.WebView', resourceId='com.eeds.app:id/zhangzhaopatch@-1211958893', operationTypeMask=34, scrollType=all, text='淘宝网触屏版', contentDesc=''}[priority=3][throttle=0][][saturation=(1.0,1)][bounds=(0,234,1080,1920)]
[1611384606512] Exception for get action resouece: g26a2518@SCROLL_RIGHT_LEFTWidget{hashCode=2105448068, index=0, clazz='android.webkit.WebView', resourceId='com.eeds.app:id/zhangzhaopatch@-1211958893', operationTypeMask=34, scrollType=all, text='淘宝网触屏版', contentDesc=''}[priority=2][throttle=0][][saturation=(1.0,1)][bounds=(0,234,1080,1920)]
[1611384606513] Exception for get action resouece: g26a2519@[email protected]@149229393[priority=1][throttle=0][]
[1611384606514] Exception for get action class: g26a2519@[email protected]@149229393[priority=1][throttle=0][]
[1611384606514] *** Get guitree ***
[1611384613530] // Monkey is over!
[1611384613543] :Sending rotation degree : 0, persist : false
[1611384613581] Running failed
java.lang.OutOfMemoryError: Failed to allocate a 150994952 byte allocation with 16777216 free bytes and 58MB until OOM
at java.util.Arrays.copyOf(Arrays.java:3352)
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:130)
at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:114)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:606)
at java.lang.StringBuffer.append(StringBuffer.java:332)
at java.io.StringWriter.write(StringWriter.java:77)
at org.apache.xml.serializer.ToStream.printSpace(ToStream.java:819)
at org.apache.xml.serializer.ToStream.indent(ToStream.java:796)
at org.apache.xml.serializer.ToStream.endElement(ToStream.java:2244)
at org.apache.xalan.transformer.TransformerIdentityImpl.endElement(TransformerIdentityImpl.java:1102)
at org.apache.xml.serializer.TreeWalker.endNode(TreeWalker.java:460)
at org.apache.xml.serializer.TreeWalker.traverse(TreeWalker.java:151)
at org.apache.xalan.transformer.TransformerIdentityImpl.transform(TransformerIdentityImpl.java:390)
at com.android.a.d.a.bZ(SourceFile:169)
at com.android.a.a.e.c(SourceFile:2261)
at com.android.a.a.b.b(SourceFile:236)
at com.android.a.a.b.a(SourceFile:226)
at com.android.commands.monkey.y.y(SourceFile:680)
at com.android.commands.monkey.y.l(SourceFile:1239)
at com.android.commands.monkey.Monkey.f(SourceFile:1861)
at com.android.commands.monkey.Monkey.a(SourceFile:1105)
at com.android.commands.monkey.Monkey.main(SourceFile:827)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:379)
[1611384613647] Please report this bug issue to github

操作一段时间后反复重启APP,不继续遍历

执行命令:
adb shell CLASSPATH=/sdcard/monkeyq.jar:/sdcard/framework.jar exec app_process /system/bin com.android.commands.monkey.Monkey -p dji.go.v5 --agent robot --act-blacklist-file /sdcard/abl.strings --running-minutes 100 --throttle 300 -v -v -v -v > fastbot4.log

问题:重复在 DJIDeviceActivity注入2次返回按键呢?在这个activity 执行两次back ,会关闭APP
看日志出现这个问题Exception for get action resouece: 这个是什么原因啊?有影响么?
手机信息: 三星s10 android9

[1609832854098] *** Get guitree ***
[1609832854101] <?xml 省略...
[1609832854102] using nstep-q agent
[1609832854103] // Display Bounds: (112,0),(2280,1080)
[1609832854104] // Black Element : //[contains(@resource-id,'text_personal')], Index : 0
[1609832854107] // matching 1 nodes, //
[contains(@resource-id,'text_personal')]
[1609832854108] // Black Element : //[contains(@resource-id,'text_editor')], Index : 0
[1609832854111] // matching 1 nodes, //
[contains(@resource-id,'text_editor')]
[1609832854111] // Black Element : //[contains(@resource-id,'text_skypixel')], Index : 0
[1609832854114] // matching 1 nodes, //
[contains(@resource-id,'text_skypixel')]
[1609832854115] // Black Element : //[contains(@resource-id,'tv_btn')], Index : 0
[1609832854118] // No matching nodes
[1609832854118] // Black Element : //
[contains(@resource-id,'main_page_ui_recommend_points_text_view')], Index : 0
[1609832854121] // matching 1 nodes, //[contains(@resource-id,'main_page_ui_recommend_points_text_view')]
[1609832854121] // Black Element : //
[contains(@resource-id,'main_page_ui_flysafe_area_text_view')], Index : 0
[1609832854124] // matching 1 nodes, //[contains(@resource-id,'main_page_ui_flysafe_area_text_view')]
[1609832854124] // Black Element : //
[contains(@resource-id,'main_page_ui_flysafe_area_layout')], Index : 0
[1609832854127] // matching 1 nodes, //[contains(@resource-id,'main_page_ui_flysafe_area_layout')]
[1609832854128] // Black Element : //
[contains(@resource-id,'main_page_ui_flysafe_area_image_view')], Index : 0
[1609832854131] // No matching nodes
[1609832854131] // Black Element : //[contains(@resource-id,'main_page_ui_image_view_academy')], Index : 0
[1609832854133] // matching 1 nodes, //
[contains(@resource-id,'main_page_ui_image_view_academy')]
[1609832854133] // Black Element : //[contains(@resource-id,'academyIv')], Index : 0
[1609832854134] // No matching nodes
[1609832854134] // Black Element : //
[contains(@resource-id,'firmware_up_tv_function')], Index : 0
[1609832854135] // No matching nodes
[1609832854135] // com.dji.mainpageui.device.DJIDeviceActivity find 7 black widgets:
[1609832854136] // black rect0: (144,42),(350,137)
[1609832854136] // black rect1: (196,943),(362,1027)
[1609832854136] // black rect2: (239,68),(329,111)
[1609832854136] // black rect3: (390,42),(592,137)
[1609832854137] // black rect4: (436,943),(662,1027)
[1609832854137] // black rect5: (736,943),(902,1027)
[1609832854137] // black rect6: (2122,37),(2227,142)
[1609832854138] select new action from ucb q value: g1a312@[email protected]@-363479026[priority=1][throttle=0][]
[1609832854138] new state visited : 199
[1609832854138] new action visited : 29
[1609832854138] get new reward
[1609832854139] update Q value
[1609832854139] // previous State and action polled
[1609832854139] *** Making decisions ***
[1609832854139] New state: [email protected]@-363479026
[1609832854140] New action: g1a312@[email protected]@-363479026[priority=1][throttle=0][]
[1609832854140] *** Inject event ***
[1609832854140] Device has no key KEYCODE_BACK
[1609832854140] :Send Key (ACTION_DOWN): 4 // KEYCODE_BACK
[1609832854144] :Send Key (ACTION_UP): 4 // KEYCODE_BACK
[1609832854152] Sleep for 0 ms
[1609832854153] Sleep for 300 ms
[1609832854455] Sleep for 0 ms
[1609832854483] Exception for get action resouece: g1a305@CLICKWidget{hashCode=-1921803567, index=6, clazz='android.widget.TextView', resourceId='dji.go.v5:id/text_skypixel', operationTypeMask=6, scrollType=none, text='天空之城', contentDesc=''}[priority=4][throttle=0][][saturation=(1.0,1)][bounds=(436,943,662,1027)]
[1609832854483] Exception for get action resouece: g1a306@CLICKWidget{hashCode=-1706084519, index=1, clazz='android.widget.TextView', resourceId='dji.go.v5:id/main_page_ui_recommend_points_text_view', operationTypeMask=6, scrollType=none, text='附近航拍点', contentDesc=''}[priority=4][throttle=0][][saturation=(1.0,1)][bounds=(390,42,592,137)]
[1609832854483] Exception for get action resouece: g1a307@CLICKWidget{hashCode=-1035997255, index=5, clazz='android.widget.TextView', resourceId='dji.go.v5:id/text_editor', operationTypeMask=6, scrollType=none, text='相册', contentDesc='Album'}[priority=4][throttle=0][][saturation=(1.0,1)][bounds=(196,943,362,1027)]
[1609832854484] Exception for get action resouece: g1a308@CLICKWidget{hashCode=137722956, index=7, clazz='android.widget.TextView', resourceId='dji.go.v5:id/text_personal', operationTypeMask=6, scrollType=none, text='我的', contentDesc=''}[priority=4][throttle=0][][saturation=(1.0,1)][bounds=(736,943,902,1027)]
[1609832854484] Exception for get action resouece: g1a309@CLICKWidget{hashCode=1239207423, index=0, clazz='android.widget.TextView', resourceId='dji.go.v5:id/main_page_ui_flysafe_area_text_view', operationTypeMask=6, scrollType=none, text='定位中', contentDesc=''}[priority=4][throttle=0][][saturation=(1.0,1)][bounds=(239,68,329,111)]
[1609832854484] Exception for get action resouece: g1a310@CLICKWidget{hashCode=1528771703, index=4, clazz='android.widget.TextView', resourceId='dji.go.v5:id/main_page_ui_state_startfly_btn', operationTypeMask=6, scrollType=none, text='GO FLY', contentDesc=''}[priority=4][throttle=500][][saturation=(1.0,1)][bounds=(1704,933,2229,1038)]
[1609832854485] Exception for get action resouece: g1a311@CLICKWidget{hashCode=1932836066, index=3, clazz='android.widget.FrameLayout', resourceId='dji.go.v5:id/main_page_ui_image_view_academy', operationTypeMask=6, scrollType=none, text='', contentDesc='Academy'}[priority=4][throttle=0][][saturation=(1.0,1)][bounds=(2122,37,2227,142)]
[1609832854485] Exception for get action resouece: g1a312@[email protected]@-363479026[priority=1][throttle=0][]

完整日志:
fastbot4.log

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.(Handler.java:204)
at android.os.Handler.(Handler.java:118)
at com.meizu.nightmode.MzNightModeManager.(MzNightModeManager.java:169)
at com.meizu.nightmode.MzNightModeManager.getDefault(MzNightModeManager.java:362)
at android.graphics.BaseCanvas.(BaseCanvas.java:1072)
at android.graphics.Canvas.(Canvas.java:114)
at android.app.UiAutomation.takeScreenshot(UiAutomation.java:741)
at com.android.commands.monkey.y.H(SourceFile:1269)
at com.android.a.a.e.c(SourceFile:3176)
at com.android.a.a.b.b(SourceFile:236)
at com.android.a.a.b.a(SourceFile:226)
at com.android.commands.monkey.y.y(SourceFile:680)
at com.android.commands.monkey.y.l(SourceFile:1239)
at com.android.commands.monkey.Monkey.f(SourceFile:1861)
at com.android.commands.monkey.Monkey.a(SourceFile:1105)
at com.android.commands.monkey.Monkey.main(SourceFile:827)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:285)

version为2.2.1.0202.1643_git,执行时报java.lang.NumberFormatException,麻烦看下

java.lang.NumberFormatException: For input string: "[43"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseFloat(FloatingDecimal.java:122)
at java.lang.Float.parseFloat(Float.java:451)
at java.lang.Float.valueOf(Float.java:416)
at com.android.a.c.a.b.b(SourceFile:134)
at com.android.a.c.a.b.a(SourceFile:1108)
at com.android.a.a.e.ay(SourceFile:131)
at com.android.a.a.c.ar(SourceFile:330)
at com.android.a.a.e.c(SourceFile:10548)
at com.android.a.a.b.b(SourceFile:236)
at com.android.a.a.b.a(SourceFile:226)
at com.android.commands.monkey.y.y(SourceFile:681)
at com.android.commands.monkey.y.l(SourceFile:1259)
at com.android.commands.monkey.Monkey.f(SourceFile:1861)
at com.android.commands.monkey.Monkey.a(SourceFile:1105)
at com.android.commands.monkey.Monkey.main(SourceFile:827)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:359)

Mate20 pro执行时会异常退出,详见堆栈

[1610799374860] using nstep-q agent
[1610799374860] // Display Bounds: (0,0),(1440,3120)
[1610799374860] // Monkey is over!
[1610799374861] :Sending rotation degree : 0, persist : false
[1610799374885] Running failed
java.lang.NumberFormatException: For input string: "[108"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseFloat(FloatingDecimal.java:122)
at java.lang.Float.parseFloat(Float.java:451)
at java.lang.Float.valueOf(Float.java:416)
at com.android.a.c.a.b.b(SourceFile:134)
at com.android.a.c.a.b.a(SourceFile:1108)
at com.android.a.a.e.ay(SourceFile:129)
at com.android.a.a.c.ar(SourceFile:271)
at com.android.a.a.e.c(SourceFile:10546)
at com.android.a.a.b.b(SourceFile:236)
at com.android.a.a.b.a(SourceFile:226)
at com.android.commands.monkey.y.y(SourceFile:680)
at com.android.commands.monkey.y.l(SourceFile:1239)
at com.android.commands.monkey.Monkey.f(SourceFile:1861)
at com.android.commands.monkey.Monkey.a(SourceFile:1105)
at com.android.commands.monkey.Monkey.main(SourceFile:827)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:359)
[1610799374889] Please report this bug issue to github

请问jar包的工程可以开源吗

试用了下fastbot, 感觉很好用, 基本想要的功能都能通过配置实现,
想学习下源码, 也想之后再开发些新功能, 不知道字节能否考虑开源

fastbot 输入框输入无效

运行日志:

[1607324755517] // Special Event:
[1607324755517] // Event0:
[1607324755518] // Prob: 1.0
[1607324755518] // Activity: a1.b1.c1.business.login.activity.accountlogin.AccountLoginActivity
[1607324755518] // Times: 100
[1607324755518] // Step0:
[1607324755518] //XPath: //[@resource-id='a1.b1.c1.client.stg:id/et_login_account']
[1607324755519] //XPathExpression: org.apache.xpath.jaxp.XPathExpressionImpl@f4b5e57
[1607324755519] //Action: CLICK
[1607324755519] //Text: ZHANGKAI308
[1607324755519] //Duration: 0
[1607324755520] //Throttle: 3000
[1607324755520] // Step1:
[1607324755520] //XPath: //
[@resource-id='a1.b1.c1.client.stg:id/et_login_password']
[1607324755520] //XPathExpression: org.apache.xpath.jaxp.XPathExpressionImpl@81fdd44
[1607324755520] //Action: CLICK
[1607324755521] //Text: abcde#2580
[1607324755521] //Duration: 0
[1607324755521] //Throttle: 3000
[1607324755521] // Step2:
[1607324755521] //XPath: //[@resource-id='a1.b1.c1.client.stg:id/cb_login_protocol']
[1607324755521] //XPathExpression: org.apache.xpath.jaxp.XPathExpressionImpl@1941e2d
[1607324755522] //Action: CLICK
[1607324755522] //Text:
[1607324755522] //Duration: 0
[1607324755522] //Throttle: 1000
[1607324755523] // Step3:
[1607324755523] //XPath: //
[@resource-id='a1.b1.c1.client.stg:id/btn_account_login']
[1607324755523] //XPathExpression: org.apache.xpath.jaxp.XPathExpressionImpl@110bf62
[1607324755523] //Action: CLICK
[1607324755523] //Text:
[1607324755524] //Duration: 0
[1607324755524] //Throttle: 3000
[1607324755526] // Black Widget:
[1607324755527] // Widget0:
[1607324755527] // Activity: a1.b1.c1.bussiness.usercenter.activity.SettingFunctionActivity
[1607324755527] // Xpath: //android.widget.TextView[@text='退出登录']
[1607324755527] // Index: 0
[1607324760903]

[1607324760919] : debug, currentActivity is a1.b1.c1.business.login.activity.accountlogin.AccountLoginActivity
[1607324760970] Exception for get action resouece: g0a0@CLICKWidget{hashCode=-1695166324, index=4, clazz='android.widget.CheckBox', resourceId='a1.b1.c1.client.stg:id/cb_login_protocol', operationTypeMask=14, scrollType=none, text='', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,745,151,800)]
[1607324760972] Exception for get action class: g0a0@CLICKWidget{hashCode=-1695166324, index=4, clazz='android.widget.CheckBox', resourceId='a1.b1.c1.client.stg:id/cb_login_protocol', operationTypeMask=14, scrollType=none, text='', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,745,151,800)]
[1607324760973] Exception for get action resouece: g0a1@CLICKWidget{hashCode=-1587776945, index=0, clazz='android.widget.EditText', resourceId='a1.b1.c1.client.stg:id/et_login_account', operationTypeMask=22, scrollType=none, text='ZHANGKAI', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,423,984,533)]
[1607324760973] Exception for get action class: g0a1@CLICKWidget{hashCode=-1587776945, index=0, clazz='android.widget.EditText', resourceId='a1.b1.c1.client.stg:id/et_login_account', operationTypeMask=22, scrollType=none, text='ZHANGKAI', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,423,984,533)]
[1607324760974] Exception for get action resouece: g0a2@LONG_CLICKWidget{hashCode=-1587776945, index=0, clazz='android.widget.EditText', resourceId='a1.b1.c1.client.stg:id/et_login_account', operationTypeMask=22, scrollType=none, text='ZHANGKAI', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,423,984,533)]
[1607324760974] Exception for get action class: g0a2@LONG_CLICKWidget{hashCode=-1587776945, index=0, clazz='android.widget.EditText', resourceId='a1.b1.c1.client.stg:id/et_login_account', operationTypeMask=22, scrollType=none, text='ZHANGKAI', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,423,984,533)]
[1607324760975] Exception for get action resouece: g0a3@CLICKWidget{hashCode=-1272883389, index=1, clazz='android.widget.EditText', resourceId='a1.b1.c1.client.stg:id/et_login_password', operationTypeMask=22, scrollType=none, text='••••••••', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,558,815,617)]
[1607324760975] Exception for get action class: g0a3@CLICKWidget{hashCode=-1272883389, index=1, clazz='android.widget.EditText', resourceId='a1.b1.c1.client.stg:id/et_login_password', operationTypeMask=22, scrollType=none, text='••••••••', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,558,815,617)]
[1607324760976] Exception for get action resouece: g0a4@LONG_CLICKWidget{hashCode=-1272883389, index=1, clazz='android.widget.EditText', resourceId='a1.b1.c1.client.stg:id/et_login_password', operationTypeMask=22, scrollType=none, text='••••••••', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,558,815,617)]
[1607324760976] Exception for get action class: g0a4@LONG_CLICKWidget{hashCode=-1272883389, index=1, clazz='android.widget.EditText', resourceId='a1.b1.c1.client.stg:id/et_login_password', operationTypeMask=22, scrollType=none, text='••••••••', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,558,815,617)]
[1607324760977] Exception for get action resouece: g0a5@CLICKWidget{hashCode=-1026114570, index=6, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_login_agree', operationTypeMask=6, scrollType=none, text='《用户隐私协议》', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(384,748,654,797)]
[1607324760977] Exception for get action class: g0a5@CLICKWidget{hashCode=-1026114570, index=6, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_login_agree', operationTypeMask=6, scrollType=none, text='《用户隐私协议》', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(384,748,654,797)]
[1607324760978] Exception for get action resouece: g0a6@CLICKWidget{hashCode=-996463192, index=10, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_more_options', operationTypeMask=6, scrollType=none, text='登录遇到问题', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(688,2133,984,2182)]
[1607324760978] Exception for get action class: g0a6@CLICKWidget{hashCode=-996463192, index=10, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_more_options', operationTypeMask=6, scrollType=none, text='登录遇到问题', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(688,2133,984,2182)]
[1607324760979] Exception for get action resouece: g0a7@CLICKWidget{hashCode=-995721964, index=3, clazz='android.widget.ImageView', resourceId='a1.b1.c1.client.stg:id/iv_login_password_eye', operationTypeMask=6, scrollType=none, text='', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(918,555,984,621)]
[1607324760980] Exception for get action class: g0a7@CLICKWidget{hashCode=-995721964, index=3, clazz='android.widget.ImageView', resourceId='a1.b1.c1.client.stg:id/iv_login_password_eye', operationTypeMask=6, scrollType=none, text='', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(918,555,984,621)]
[1607324760980] Exception for get action resouece: g0a8@CLICKWidget{hashCode=-837953416, index=9, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_set_pw', operationTypeMask=6, scrollType=none, text='忘记密码', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(392,2133,688,2182)]
[1607324760981] Exception for get action class: g0a8@CLICKWidget{hashCode=-837953416, index=9, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_set_pw', operationTypeMask=6, scrollType=none, text='忘记密码', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(392,2133,688,2182)]
[1607324760981] Exception for get action resouece: g0a9@CLICKWidget{hashCode=441011291, index=0, clazz='android.widget.RelativeLayout', resourceId='a1.b1.c1.client.stg:id/root', operationTypeMask=6, scrollType=none, text='', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(0,75,1080,2210)]
[1607324760982] Exception for get action class: g0a9@CLICKWidget{hashCode=441011291, index=0, clazz='android.widget.RelativeLayout', resourceId='a1.b1.c1.client.stg:id/root', operationTypeMask=6, scrollType=none, text='', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(0,75,1080,2210)]
[1607324760982] Exception for get action resouece: g0a10@CLICKWidget{hashCode=1067492390, index=8, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_unlock_account', operationTypeMask=6, scrollType=none, text='声纹登录', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,2133,392,2182)]
[1607324760983] Exception for get action class: g0a10@CLICKWidget{hashCode=1067492390, index=8, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_unlock_account', operationTypeMask=6, scrollType=none, text='声纹登录', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,2133,392,2182)]
[1607324760983] Exception for get action resouece: g0a11@CLICKWidget{hashCode=1068669062, index=5, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_already_know', operationTypeMask=6, scrollType=none, text='已阅读并同意', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(151,748,384,797)]
[1607324760984] Exception for get action class: g0a11@CLICKWidget{hashCode=1068669062, index=5, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_already_know', operationTypeMask=6, scrollType=none, text='已阅读并同意', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(151,748,384,797)]
[1607324760984] Exception for get action resouece: g0a12@CLICKWidget{hashCode=1306309260, index=2, clazz='android.widget.ImageView', resourceId='a1.b1.c1.client.stg:id/iv_login_password_delete', operationTypeMask=6, scrollType=none, text='', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(815,554,882,621)]
[1607324760985] Exception for get action class: g0a12@CLICKWidget{hashCode=1306309260, index=2, clazz='android.widget.ImageView', resourceId='a1.b1.c1.client.stg:id/iv_login_password_delete', operationTypeMask=6, scrollType=none, text='', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(815,554,882,621)]
[1607324760985] Exception for get action resouece: g0a13@CLICKWidget{hashCode=2130564363, index=7, clazz='android.widget.Button', resourceId='a1.b1.c1.client.stg:id/btn_account_login', operationTypeMask=6, scrollType=none, text='登 录', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,841,984,979)]
[1607324760986] Exception for get action class: g0a13@CLICKWidget{hashCode=2130564363, index=7, clazz='android.widget.Button', resourceId='a1.b1.c1.client.stg:id/btn_account_login', operationTypeMask=6, scrollType=none, text='登 录', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,841,984,979)]
[1607324760986] Exception for get action resouece: g0a14@BACKg0s0@a1.b1.c1.business.login.activity.accountlogin.AccountLoginActivity@-2107324438[priority=0][throttle=200][, UNVISITED]
[1607324760986] Exception for get action class: g0a14@BACKg0s0@a1.b1.c1.business.login.activity.accountlogin.AccountLoginActivity@-2107324438[priority=0][throttle=200][, UNVISITED]
[1607324760987] *** Get guitree ***
[1607324760995]
<?xml version="1.0" encoding="UTF-8"?><node index="0" text="" resource-id="" class="android.widget.FrameLayout" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[0,0][1080,2340]"> <node index="0" text="" resource-id="a1.b1.c1.client.stg:id/root" class="android.widget.RelativeLayout" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="true" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[0,75][1080,2210]"> <node index="0" text="ZHANGKAI" resource-id="a1.b1.c1.client.stg:id/et_login_account" class="android.widget.EditText" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="true" password="false" scroll-type="none" bounds="[96,423][984,533]"/> <node index="1" text="••••••••" resource-id="a1.b1.c1.client.stg:id/et_login_password" class="android.widget.EditText" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="true" password="false" scroll-type="none" bounds="[96,558][815,617]"/> <node index="2" text="" resource-id="a1.b1.c1.client.stg:id/iv_login_password_delete" class="android.widget.ImageView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[815,554][882,621]"/> <node index="3" text="" resource-id="a1.b1.c1.client.stg:id/iv_login_password_eye" class="android.widget.ImageView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[918,555][984,621]"/> <node index="4" text="" resource-id="a1.b1.c1.client.stg:id/cb_login_protocol" class="android.widget.CheckBox" content-desc="" package="a1.b1.c1.client.stg" checkable="true" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[96,745][151,800]"/> <node index="5" text="已阅读并同意" resource-id="a1.b1.c1.client.stg:id/tv_already_know" class="android.widget.TextView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[151,748][384,797]"/> <node index="6" text="《用户隐私协议》" resource-id="a1.b1.c1.client.stg:id/tv_login_agree" class="android.widget.TextView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[384,748][654,797]"/> <node index="7" text="登 录" resource-id="a1.b1.c1.client.stg:id/btn_account_login" class="android.widget.Button" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[96,841][984,979]"/> <node index="8" text="声纹登录" resource-id="a1.b1.c1.client.stg:id/tv_unlock_account" class="android.widget.TextView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[96,2133][392,2182]"/> <node index="9" text="忘记密码" resource-id="a1.b1.c1.client.stg:id/tv_set_pw" class="android.widget.TextView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[392,2133][688,2182]"/> <node index="10" text="登录遇到问题" resource-id="a1.b1.c1.client.stg:id/tv_more_options" class="android.widget.TextView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[688,2133][984,2182]"/> </node> </node>

[1607324760996] using nstep-q agent
[1607324760996] // Display Bounds: (0,0),(1080,2340)
[1607324760996] // XAction : //[@resource-id='a1.b1.c1.client.stg:id/et_login_account'], Action : CLICK, Text : ZHANGKAI308, Throttle : 3000
[1607324760999] // matching 1 nodes, //
[@resource-id='a1.b1.c1.client.stg:id/et_login_account']
[1607324761011] *** Inject event ***
[1607324761014] :Sending Touch (ACTION_DOWN): 0:(540.0,478.0)
[1607324761021] :Sending Touch (ACTION_UP): 0:(540.0,478.0)
[1607324761023] Sleep for 0 ms
[1607324761028] Sleep for 190 ms
[1607324761223] Sleep for 0 ms
[1607324761226] :Sending Touch (ACTION_DOWN): 0:(540.0,478.0)
[1607324761232] :Sending Touch (ACTION_UP): 0:(540.0,478.0)
[1607324761237] Sleep for 0 ms
[1607324761239] Sleep for 125 ms
[1607324761367] Sleep for 0 ms
[1607324761373] :Send Key (ACTION_DOWN): 67 // KEYCODE_DEL
[1607324761382] :Send Key (ACTION_UP): 67 // KEYCODE_DEL
[1607324761398] Sleep for 0 ms
[1607324761400] Sleep for 131 ms
[1607324761535] Sleep for 0 ms
[1607324761539] :Sending Touch (ACTION_DOWN): 0:(540.0,478.0)
[1607324761554] :Sending Touch (ACTION_UP): 0:(540.0,478.0)
[1607324761557] Sleep for 0 ms
[1607324761559] Sleep for 215 ms
[1607324761777] Sleep for 0 ms
[1607324761779] Sleep for 500 ms
[1607324762282] Sleep for 0 ms
[1607324762285] :Checking IME Visible Height: 771
[1607324762586] :Sending Input Text (ZHANGKAI308)
[1607324762591] Sleep for 0 ms
[1607324762593] Sleep for 247 ms
[1607324762843] Sleep for 0 ms
[1607324762846] Sleep for 3000 ms
[1607324765849] Sleep for 0 ms
[1607324765852] :Sending rotation degree : 0, persist : false
[1607324765882] Sleep for 0 ms
[1607324765888] Sleep for 300 ms
[1607324766190] Sleep for 0 ms
[1607324766226] Exception for get action resouece: g0a15@CLICKWidget{hashCode=-1695166324, index=5, clazz='android.widget.CheckBox', resourceId='a1.b1.c1.client.stg:id/cb_login_protocol', operationTypeMask=14, scrollType=none, text='', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,745,151,800)]
[1607324766228] Exception for get action class: g0a15@CLICKWidget{hashCode=-1695166324, index=5, clazz='android.widget.CheckBox', resourceId='a1.b1.c1.client.stg:id/cb_login_protocol', operationTypeMask=14, scrollType=none, text='', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,745,151,800)]
[1607324766230] Exception for get action resouece: g0a16@CLICKWidget{hashCode=-1587776945, index=0, clazz='android.widget.EditText', resourceId='a1.b1.c1.client.stg:id/et_login_account', operationTypeMask=22, scrollType=none, text='ZHANGKAI', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,423,917,533)]
[1607324766232] Exception for get action class: g0a16@CLICKWidget{hashCode=-1587776945, index=0, clazz='android.widget.EditText', resourceId='a1.b1.c1.client.stg:id/et_login_account', operationTypeMask=22, scrollType=none, text='ZHANGKAI', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,423,917,533)]
[1607324766233] Exception for get action resouece: g0a17@LONG_CLICKWidget{hashCode=-1587776945, index=0, clazz='android.widget.EditText', resourceId='a1.b1.c1.client.stg:id/et_login_account', operationTypeMask=22, scrollType=none, text='ZHANGKAI', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,423,917,533)]
[1607324766235] Exception for get action class: g0a17@LONG_CLICKWidget{hashCode=-1587776945, index=0, clazz='android.widget.EditText', resourceId='a1.b1.c1.client.stg:id/et_login_account', operationTypeMask=22, scrollType=none, text='ZHANGKAI', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,423,917,533)]
[1607324766237] Exception for get action resouece: g0a18@CLICKWidget{hashCode=-1349927612, index=1, clazz='android.widget.ImageView', resourceId='a1.b1.c1.client.stg:id/iv_login_account_delete', operationTypeMask=6, scrollType=none, text='', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(917,444,984,511)]
[1607324766238] Exception for get action class: g0a18@CLICKWidget{hashCode=-1349927612, index=1, clazz='android.widget.ImageView', resourceId='a1.b1.c1.client.stg:id/iv_login_account_delete', operationTypeMask=6, scrollType=none, text='', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(917,444,984,511)]
[1607324766239] Exception for get action resouece: g0a19@CLICKWidget{hashCode=-1272883389, index=2, clazz='android.widget.EditText', resourceId='a1.b1.c1.client.stg:id/et_login_password', operationTypeMask=22, scrollType=none, text='••••••••', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,558,815,617)]
[1607324766240] Exception for get action class: g0a19@CLICKWidget{hashCode=-1272883389, index=2, clazz='android.widget.EditText', resourceId='a1.b1.c1.client.stg:id/et_login_password', operationTypeMask=22, scrollType=none, text='••••••••', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,558,815,617)]
[1607324766242] Exception for get action resouece: g0a20@LONG_CLICKWidget{hashCode=-1272883389, index=2, clazz='android.widget.EditText', resourceId='a1.b1.c1.client.stg:id/et_login_password', operationTypeMask=22, scrollType=none, text='••••••••', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,558,815,617)]
[1607324766242] Exception for get action class: g0a20@LONG_CLICKWidget{hashCode=-1272883389, index=2, clazz='android.widget.EditText', resourceId='a1.b1.c1.client.stg:id/et_login_password', operationTypeMask=22, scrollType=none, text='••••••••', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,558,815,617)]
[1607324766244] Exception for get action resouece: g0a21@CLICKWidget{hashCode=-1026114570, index=7, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_login_agree', operationTypeMask=6, scrollType=none, text='《用户隐私协议》', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(384,748,654,797)]
[1607324766245] Exception for get action class: g0a21@CLICKWidget{hashCode=-1026114570, index=7, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_login_agree', operationTypeMask=6, scrollType=none, text='《用户隐私协议》', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(384,748,654,797)]
[1607324766246] Exception for get action resouece: g0a22@CLICKWidget{hashCode=-996463192, index=11, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_more_options', operationTypeMask=6, scrollType=none, text='登录遇到问题', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(688,2133,984,2182)]
[1607324766246] Exception for get action class: g0a22@CLICKWidget{hashCode=-996463192, index=11, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_more_options', operationTypeMask=6, scrollType=none, text='登录遇到问题', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(688,2133,984,2182)]
[1607324766247] Exception for get action resouece: g0a23@CLICKWidget{hashCode=-995721964, index=4, clazz='android.widget.ImageView', resourceId='a1.b1.c1.client.stg:id/iv_login_password_eye', operationTypeMask=6, scrollType=none, text='', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(918,555,984,621)]
[1607324766249] Exception for get action class: g0a23@CLICKWidget{hashCode=-995721964, index=4, clazz='android.widget.ImageView', resourceId='a1.b1.c1.client.stg:id/iv_login_password_eye', operationTypeMask=6, scrollType=none, text='', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(918,555,984,621)]
[1607324766250] Exception for get action resouece: g0a24@CLICKWidget{hashCode=-837953416, index=10, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_set_pw', operationTypeMask=6, scrollType=none, text='忘记密码', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(392,2133,688,2182)]
[1607324766251] Exception for get action class: g0a24@CLICKWidget{hashCode=-837953416, index=10, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_set_pw', operationTypeMask=6, scrollType=none, text='忘记密码', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(392,2133,688,2182)]
[1607324766253] Exception for get action resouece: g0a25@CLICKWidget{hashCode=441011291, index=0, clazz='android.widget.RelativeLayout', resourceId='a1.b1.c1.client.stg:id/root', operationTypeMask=6, scrollType=none, text='', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(0,75,1080,2210)]
[1607324766253] Exception for get action class: g0a25@CLICKWidget{hashCode=441011291, index=0, clazz='android.widget.RelativeLayout', resourceId='a1.b1.c1.client.stg:id/root', operationTypeMask=6, scrollType=none, text='', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(0,75,1080,2210)]
[1607324766254] Exception for get action resouece: g0a26@CLICKWidget{hashCode=1067492390, index=9, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_unlock_account', operationTypeMask=6, scrollType=none, text='声纹登录', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,2133,392,2182)]
[1607324766255] Exception for get action class: g0a26@CLICKWidget{hashCode=1067492390, index=9, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_unlock_account', operationTypeMask=6, scrollType=none, text='声纹登录', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,2133,392,2182)]
[1607324766255] Exception for get action resouece: g0a27@CLICKWidget{hashCode=1068669062, index=6, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_already_know', operationTypeMask=6, scrollType=none, text='已阅读并同意', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(151,748,384,797)]
[1607324766256] Exception for get action class: g0a27@CLICKWidget{hashCode=1068669062, index=6, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_already_know', operationTypeMask=6, scrollType=none, text='已阅读并同意', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(151,748,384,797)]
[1607324766257] Exception for get action resouece: g0a28@CLICKWidget{hashCode=1306309260, index=3, clazz='android.widget.ImageView', resourceId='a1.b1.c1.client.stg:id/iv_login_password_delete', operationTypeMask=6, scrollType=none, text='', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(815,554,882,621)]
[1607324766257] Exception for get action class: g0a28@CLICKWidget{hashCode=1306309260, index=3, clazz='android.widget.ImageView', resourceId='a1.b1.c1.client.stg:id/iv_login_password_delete', operationTypeMask=6, scrollType=none, text='', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(815,554,882,621)]
[1607324766258] Exception for get action resouece: g0a29@CLICKWidget{hashCode=2130564363, index=8, clazz='android.widget.Button', resourceId='a1.b1.c1.client.stg:id/btn_account_login', operationTypeMask=6, scrollType=none, text='登 录', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,841,984,979)]
[1607324766258] Exception for get action class: g0a29@CLICKWidget{hashCode=2130564363, index=8, clazz='android.widget.Button', resourceId='a1.b1.c1.client.stg:id/btn_account_login', operationTypeMask=6, scrollType=none, text='登 录', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,841,984,979)]
[1607324766259] Exception for get action resouece: g0a30@BACKg0s1@a1.b1.c1.business.login.activity.accountlogin.AccountLoginActivity@-76043602[priority=0][throttle=200][, UNVISITED]
[1607324766259] Exception for get action class: g0a30@BACKg0s1@a1.b1.c1.business.login.activity.accountlogin.AccountLoginActivity@-76043602[priority=0][throttle=200][, UNVISITED]
[1607324766259] *** Get guitree ***
[1607324766261]
<?xml version="1.0" encoding="UTF-8"?><node index="0" text="" resource-id="" class="android.widget.FrameLayout" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[0,0][1080,2340]"> <node index="0" text="" resource-id="a1.b1.c1.client.stg:id/root" class="android.widget.RelativeLayout" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[0,75][1080,2210]"> <node index="0" text="ZHANGKAI" resource-id="a1.b1.c1.client.stg:id/et_login_account" class="android.widget.EditText" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="true" scrollable="false" long-clickable="true" password="false" scroll-type="none" bounds="[96,423][917,533]"/> <node index="1" text="" resource-id="a1.b1.c1.client.stg:id/iv_login_account_delete" class="android.widget.ImageView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[917,444][984,511]"/> <node index="2" text="••••••••" resource-id="a1.b1.c1.client.stg:id/et_login_password" class="android.widget.EditText" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="true" password="false" scroll-type="none" bounds="[96,558][815,617]"/> <node index="3" text="" resource-id="a1.b1.c1.client.stg:id/iv_login_password_delete" class="android.widget.ImageView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[815,554][882,621]"/> <node index="4" text="" resource-id="a1.b1.c1.client.stg:id/iv_login_password_eye" class="android.widget.ImageView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[918,555][984,621]"/> <node index="5" text="" resource-id="a1.b1.c1.client.stg:id/cb_login_protocol" class="android.widget.CheckBox" content-desc="" package="a1.b1.c1.client.stg" checkable="true" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[96,745][151,800]"/> <node index="6" text="已阅读并同意" resource-id="a1.b1.c1.client.stg:id/tv_already_know" class="android.widget.TextView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[151,748][384,797]"/> <node index="7" text="《用户隐私协议》" resource-id="a1.b1.c1.client.stg:id/tv_login_agree" class="android.widget.TextView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[384,748][654,797]"/> <node index="8" text="登 录" resource-id="a1.b1.c1.client.stg:id/btn_account_login" class="android.widget.Button" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[96,841][984,979]"/> <node index="9" text="声纹登录" resource-id="a1.b1.c1.client.stg:id/tv_unlock_account" class="android.widget.TextView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[96,2133][392,2182]"/> <node index="10" text="忘记密码" resource-id="a1.b1.c1.client.stg:id/tv_set_pw" class="android.widget.TextView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[392,2133][688,2182]"/> <node index="11" text="登录遇到问题" resource-id="a1.b1.c1.client.stg:id/tv_more_options" class="android.widget.TextView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[688,2133][984,2182]"/> </node> </node>

[1607324766262] using nstep-q agent
[1607324766262] // Display Bounds: (0,0),(1080,2340)
[1607324766262] // XAction : //[@resource-id='a1.b1.c1.client.stg:id/et_login_password'], Action : CLICK, Text : abcde#2580, Throttle : 3000
[1607324766265] // matching 1 nodes, //
[@resource-id='a1.b1.c1.client.stg:id/et_login_password']
[1607324766268] *** Inject event ***
[1607324766271] :Sending Touch (ACTION_DOWN): 0:(455.5,587.5)
[1607324766278] :Sending Touch (ACTION_UP): 0:(455.5,587.5)
[1607324766295] Sleep for 0 ms
[1607324766296] Sleep for 176 ms
[1607324766476] Sleep for 0 ms
[1607324766479] :Sending Touch (ACTION_DOWN): 0:(455.5,587.5)
[1607324766483] :Sending Touch (ACTION_UP): 0:(455.5,587.5)
[1607324766488] Sleep for 0 ms
[1607324766490] Sleep for 228 ms
[1607324766721] Sleep for 0 ms
[1607324766724] :Send Key (ACTION_DOWN): 67 // KEYCODE_DEL
[1607324766729] :Send Key (ACTION_UP): 67 // KEYCODE_DEL
[1607324766740] Sleep for 0 ms
[1607324766742] Sleep for 167 ms
[1607324766913] Sleep for 0 ms
[1607324766916] :Sending Touch (ACTION_DOWN): 0:(455.5,587.5)
[1607324766925] :Sending Touch (ACTION_UP): 0:(455.5,587.5)
[1607324766929] Sleep for 0 ms
[1607324766931] Sleep for 219 ms
[1607324767154] Sleep for 0 ms
[1607324767156] Sleep for 500 ms
[1607324767660] Sleep for 0 ms
[1607324767665] :Checking IME Visible Height: 883
[1607324767966] :Sending Input Text (abcde#2580)
[1607324767972] Sleep for 0 ms
[1607324767976] Sleep for 146 ms
[1607324768126] Sleep for 0 ms
[1607324768131] :Send Key (ACTION_DOWN): 111 // KEYCODE_ESCAPE
[1607324768139] :Send Key (ACTION_UP): 111 // KEYCODE_ESCAPE
[1607324768148] Sleep for 0 ms
[1607324768151] Sleep for 262 ms
[1607324768418] Sleep for 0 ms
[1607324768422] Sleep for 3000 ms
[1607324771426] Sleep for 0 ms
[1607324771428] :Sending rotation degree : 0, persist : false
[1607324771443] Sleep for 0 ms
[1607324771446] Sleep for 300 ms
[1607324771748] Sleep for 0 ms
[1607324771780] Exception for get action resouece: g0a15@CLICKWidget{hashCode=-1695166324, index=5, clazz='android.widget.CheckBox', resourceId='a1.b1.c1.client.stg:id/cb_login_protocol', operationTypeMask=14, scrollType=none, text='', contentDesc=''}[priority=24][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,745,151,800)]
[1607324771782] Exception for get action class: g0a15@CLICKWidget{hashCode=-1695166324, index=5, clazz='android.widget.CheckBox', resourceId='a1.b1.c1.client.stg:id/cb_login_protocol', operationTypeMask=14, scrollType=none, text='', contentDesc=''}[priority=24][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,745,151,800)]
[1607324771784] Exception for get action resouece: g0a16@CLICKWidget{hashCode=-1587776945, index=0, clazz='android.widget.EditText', resourceId='a1.b1.c1.client.stg:id/et_login_account', operationTypeMask=22, scrollType=none, text='ZHANGKAI', contentDesc=''}[priority=24][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,423,917,533)]
[1607324771785] Exception for get action class: g0a16@CLICKWidget{hashCode=-1587776945, index=0, clazz='android.widget.EditText', resourceId='a1.b1.c1.client.stg:id/et_login_account', operationTypeMask=22, scrollType=none, text='ZHANGKAI', contentDesc=''}[priority=24][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,423,917,533)]
[1607324771786] Exception for get action resouece: g0a17@LONG_CLICKWidget{hashCode=-1587776945, index=0, clazz='android.widget.EditText', resourceId='a1.b1.c1.client.stg:id/et_login_account', operationTypeMask=22, scrollType=none, text='ZHANGKAI', contentDesc=''}[priority=22][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,423,917,533)]
[1607324771787] Exception for get action class: g0a17@LONG_CLICKWidget{hashCode=-1587776945, index=0, clazz='android.widget.EditText', resourceId='a1.b1.c1.client.stg:id/et_login_account', operationTypeMask=22, scrollType=none, text='ZHANGKAI', contentDesc=''}[priority=22][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,423,917,533)]
[1607324771788] Exception for get action resouece: g0a18@CLICKWidget{hashCode=-1349927612, index=1, clazz='android.widget.ImageView', resourceId='a1.b1.c1.client.stg:id/iv_login_account_delete', operationTypeMask=6, scrollType=none, text='', contentDesc=''}[priority=24][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(917,444,984,511)]
[1607324771789] Exception for get action class: g0a18@CLICKWidget{hashCode=-1349927612, index=1, clazz='android.widget.ImageView', resourceId='a1.b1.c1.client.stg:id/iv_login_account_delete', operationTypeMask=6, scrollType=none, text='', contentDesc=''}[priority=24][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(917,444,984,511)]
[1607324771790] Exception for get action resouece: g0a19@CLICKWidget{hashCode=-1272883389, index=2, clazz='android.widget.EditText', resourceId='a1.b1.c1.client.stg:id/et_login_password', operationTypeMask=22, scrollType=none, text='••••••••', contentDesc=''}[priority=24][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,558,815,617)]
[1607324771792] Exception for get action class: g0a19@CLICKWidget{hashCode=-1272883389, index=2, clazz='android.widget.EditText', resourceId='a1.b1.c1.client.stg:id/et_login_password', operationTypeMask=22, scrollType=none, text='••••••••', contentDesc=''}[priority=24][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,558,815,617)]
[1607324771794] Exception for get action resouece: g0a20@LONG_CLICKWidget{hashCode=-1272883389, index=2, clazz='android.widget.EditText', resourceId='a1.b1.c1.client.stg:id/et_login_password', operationTypeMask=22, scrollType=none, text='••••••••', contentDesc=''}[priority=22][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,558,815,617)]
[1607324771795] Exception for get action class: g0a20@LONG_CLICKWidget{hashCode=-1272883389, index=2, clazz='android.widget.EditText', resourceId='a1.b1.c1.client.stg:id/et_login_password', operationTypeMask=22, scrollType=none, text='••••••••', contentDesc=''}[priority=22][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,558,815,617)]
[1607324771795] Exception for get action resouece: g0a21@CLICKWidget{hashCode=-1026114570, index=7, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_login_agree', operationTypeMask=6, scrollType=none, text='《用户隐私协议》', contentDesc=''}[priority=24][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(384,748,654,797)]
[1607324771796] Exception for get action class: g0a21@CLICKWidget{hashCode=-1026114570, index=7, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_login_agree', operationTypeMask=6, scrollType=none, text='《用户隐私协议》', contentDesc=''}[priority=24][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(384,748,654,797)]
[1607324771797] Exception for get action resouece: g0a22@CLICKWidget{hashCode=-996463192, index=11, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_more_options', operationTypeMask=6, scrollType=none, text='登录遇到问题', contentDesc=''}[priority=24][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(688,2133,984,2182)]
[1607324771797] Exception for get action class: g0a22@CLICKWidget{hashCode=-996463192, index=11, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_more_options', operationTypeMask=6, scrollType=none, text='登录遇到问题', contentDesc=''}[priority=24][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(688,2133,984,2182)]
[1607324771798] Exception for get action resouece: g0a23@CLICKWidget{hashCode=-995721964, index=4, clazz='android.widget.ImageView', resourceId='a1.b1.c1.client.stg:id/iv_login_password_eye', operationTypeMask=6, scrollType=none, text='', contentDesc=''}[priority=24][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(918,555,984,621)]
[1607324771799] Exception for get action class: g0a23@CLICKWidget{hashCode=-995721964, index=4, clazz='android.widget.ImageView', resourceId='a1.b1.c1.client.stg:id/iv_login_password_eye', operationTypeMask=6, scrollType=none, text='', contentDesc=''}[priority=24][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(918,555,984,621)]
[1607324771800] Exception for get action resouece: g0a24@CLICKWidget{hashCode=-837953416, index=10, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_set_pw', operationTypeMask=6, scrollType=none, text='忘记密码', contentDesc=''}[priority=24][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(392,2133,688,2182)]
[1607324771800] Exception for get action class: g0a24@CLICKWidget{hashCode=-837953416, index=10, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_set_pw', operationTypeMask=6, scrollType=none, text='忘记密码', contentDesc=''}[priority=24][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(392,2133,688,2182)]
[1607324771801] Exception for get action resouece: g0a25@CLICKWidget{hashCode=441011291, index=0, clazz='android.widget.RelativeLayout', resourceId='a1.b1.c1.client.stg:id/root', operationTypeMask=6, scrollType=none, text='', contentDesc=''}[priority=24][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(0,75,1080,2210)]
[1607324771801] Exception for get action class: g0a25@CLICKWidget{hashCode=441011291, index=0, clazz='android.widget.RelativeLayout', resourceId='a1.b1.c1.client.stg:id/root', operationTypeMask=6, scrollType=none, text='', contentDesc=''}[priority=24][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(0,75,1080,2210)]
[1607324771802] Exception for get action resouece: g0a26@CLICKWidget{hashCode=1067492390, index=9, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_unlock_account', operationTypeMask=6, scrollType=none, text='声纹登录', contentDesc=''}[priority=24][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,2133,392,2182)]
[1607324771803] Exception for get action class: g0a26@CLICKWidget{hashCode=1067492390, index=9, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_unlock_account', operationTypeMask=6, scrollType=none, text='声纹登录', contentDesc=''}[priority=24][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,2133,392,2182)]
[1607324771803] Exception for get action resouece: g0a27@CLICKWidget{hashCode=1068669062, index=6, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_already_know', operationTypeMask=6, scrollType=none, text='已阅读并同意', contentDesc=''}[priority=24][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(151,748,384,797)]
[1607324771804] Exception for get action class: g0a27@CLICKWidget{hashCode=1068669062, index=6, clazz='android.widget.TextView', resourceId='a1.b1.c1.client.stg:id/tv_already_know', operationTypeMask=6, scrollType=none, text='已阅读并同意', contentDesc=''}[priority=24][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(151,748,384,797)]
[1607324771805] Exception for get action resouece: g0a28@CLICKWidget{hashCode=1306309260, index=3, clazz='android.widget.ImageView', resourceId='a1.b1.c1.client.stg:id/iv_login_password_delete', operationTypeMask=6, scrollType=none, text='', contentDesc=''}[priority=24][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(815,554,882,621)]
[1607324771805] Exception for get action class: g0a28@CLICKWidget{hashCode=1306309260, index=3, clazz='android.widget.ImageView', resourceId='a1.b1.c1.client.stg:id/iv_login_password_delete', operationTypeMask=6, scrollType=none, text='', contentDesc=''}[priority=24][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(815,554,882,621)]
[1607324771806] Exception for get action resouece: g0a29@CLICKWidget{hashCode=2130564363, index=8, clazz='android.widget.Button', resourceId='a1.b1.c1.client.stg:id/btn_account_login', operationTypeMask=6, scrollType=none, text='登 录', contentDesc=''}[priority=24][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,841,984,979)]
[1607324771806] Exception for get action class: g0a29@CLICKWidget{hashCode=2130564363, index=8, clazz='android.widget.Button', resourceId='a1.b1.c1.client.stg:id/btn_account_login', operationTypeMask=6, scrollType=none, text='登 录', contentDesc=''}[priority=24][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(96,841,984,979)]
[1607324771807] Exception for get action resouece: g0a30@BACKg0s1@a1.b1.c1.business.login.activity.accountlogin.AccountLoginActivity@-76043602[priority=6][throttle=200][, UNVISITED]
[1607324771807] Exception for get action class: g0a30@BACKg0s1@a1.b1.c1.business.login.activity.accountlogin.AccountLoginActivity@-76043602[priority=6][throttle=200][, UNVISITED]
[1607324771808] *** Get guitree ***
[1607324771809]
<?xml version="1.0" encoding="UTF-8"?><node index="0" text="" resource-id="" class="android.widget.FrameLayout" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[0,0][1080,2340]"> <node index="0" text="" resource-id="a1.b1.c1.client.stg:id/root" class="android.widget.RelativeLayout" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[0,75][1080,2210]"> <node index="0" text="ZHANGKAI" resource-id="a1.b1.c1.client.stg:id/et_login_account" class="android.widget.EditText" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="true" password="false" scroll-type="none" bounds="[96,423][917,533]"/> <node index="1" text="" resource-id="a1.b1.c1.client.stg:id/iv_login_account_delete" class="android.widget.ImageView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[917,444][984,511]"/> <node index="2" text="••••••••" resource-id="a1.b1.c1.client.stg:id/et_login_password" class="android.widget.EditText" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="true" scrollable="false" long-clickable="true" password="false" scroll-type="none" bounds="[96,558][815,617]"/> <node index="3" text="" resource-id="a1.b1.c1.client.stg:id/iv_login_password_delete" class="android.widget.ImageView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[815,554][882,621]"/> <node index="4" text="" resource-id="a1.b1.c1.client.stg:id/iv_login_password_eye" class="android.widget.ImageView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[918,555][984,621]"/> <node index="5" text="" resource-id="a1.b1.c1.client.stg:id/cb_login_protocol" class="android.widget.CheckBox" content-desc="" package="a1.b1.c1.client.stg" checkable="true" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[96,745][151,800]"/> <node index="6" text="已阅读并同意" resource-id="a1.b1.c1.client.stg:id/tv_already_know" class="android.widget.TextView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[151,748][384,797]"/> <node index="7" text="《用户隐私协议》" resource-id="a1.b1.c1.client.stg:id/tv_login_agree" class="android.widget.TextView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[384,748][654,797]"/> <node index="8" text="登 录" resource-id="a1.b1.c1.client.stg:id/btn_account_login" class="android.widget.Button" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[96,841][984,979]"/> <node index="9" text="声纹登录" resource-id="a1.b1.c1.client.stg:id/tv_unlock_account" class="android.widget.TextView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[96,2133][392,2182]"/> <node index="10" text="忘记密码" resource-id="a1.b1.c1.client.stg:id/tv_set_pw" class="android.widget.TextView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[392,2133][688,2182]"/> <node index="11" text="登录遇到问题" resource-id="a1.b1.c1.client.stg:id/tv_more_options" class="android.widget.TextView" content-desc="" package="a1.b1.c1.client.stg" checkable="false" checked="false" clickable="true" enabled="true" focusable="true" focused="false" scrollable="false" long-clickable="false" password="false" scroll-type="none" bounds="[688,2133][984,2182]"/> </node> </÷÷÷÷node>

max.widget.black报错:java.lang.NumberFormatException

[1623934395618] @Version : 2.2.1.0304.2039_git
[1623934395653] // Monkey : seed=1624036500254 count=1000

[1623934395654] // Valid Package: com.tal.tiku
[1623934395655] // IncludeCategory : android.intent.category.LAUNCHER
[1623934395655] // IncludeCategory : android.intent.category.MONKEY
[1623934395688] // Selecting main activities from category android.intent.category.LAUNCHER
[1623934395689] // - NOT USING main activity com.mail139.about.LaunchActivity (from package cn.cj.pe)
[1623934395690] // - NOT USING main activity com.android.calendar.AllInOneActivity (from package com.android.calendar)
[1623934395690] // - NOT USING main activity com.android.contacts.activities.PeopleActivity (from package com.android.contacts)
[1623934395690] // - NOT USING main activity com.android.contacts.activities.DialtactsActivity (from package com.android.contacts)
[1623934395691] // - NOT USING main activity com.android.deskclock.AlarmsMainActivity (from package com.android.deskclock)
[1623934395691] // - NOT USING main activity com.android.email.activity.Welcome (from package com.android.email)
[1623934395691] // - NOT USING main activity com.huawei.gallery.app.GalleryMain (from package com.android.gallery3d)
[1623934395691] // - NOT USING main activity com.android.mediacenter.PageActivity (from package com.android.mediacenter)
[1623934395691] // - NOT USING main activity com.android.mms.ui.ConversationList (from package com.android.mms)
[1623934395692] // - NOT USING main activity com.android.settings.HWSettings (from package com.android.settings)
[1623934395692] // - NOT USING main activity com.example.android.notepad.NotePadActivity (from package com.example.android.notepad)
[1623934395692] // - NOT USING main activity com.huawei.FMRadio.page.PageActivity (from package com.huawei.android.FMRadio)
[1623934395692] // - NOT USING main activity com.huawei.android.findmyphone.ui.findphone.FindMyPhoneActivity (from package com.huawei.android.findmyphone)
[1623934395692] // - NOT USING main activity com.huawei.android.tips.DrawerDisplayActivity (from package com.huawei.android.tips)
[1623934395693] // - NOT USING main activity com.huawei.camera (from package com.huawei.camera)
[1623934395693] // - NOT USING main activity com.huawei.gamebox.GameBoxActivity (from package com.huawei.gamebox)
[1623934395693] // - NOT USING main activity com.huawei.hidisk.filemanager.FileManager (from package com.huawei.hidisk)
[1623934395693] // - NOT USING main activity com.huawei.himovie.ui.login.SplashScreenActivity (from package com.huawei.himovie)
[1623934395693] // - NOT USING main activity com.baidu.baidumaps.WelcomeScreen (from package com.baidu.BaiduMap)
[1623934395694] // - NOT USING main activity com.yxcorp.gifshow.HomeActivity (from package com.smile.gifmaker)
[1623934395694] // - NOT USING main activity com.android.browser.SplashActivity (from package com.android.browser)
[1623934395694] // - NOT USING main activity com.android.calculator2.Calculator (from package com.android.calculator2)
[1623934395694] // - NOT USING main activity com.android.documentsui.LauncherActivity (from package com.android.documentsui)
[1623934395694] // - NOT USING main activity com.android.mediacenter.PageActivity (from package com.android.imedia.syncplay)
[1623934395695] // - NOT USING main activity com.android.soundrecorder.RecordListActivity (from package com.android.soundrecorder)
[1623934395695] // - NOT USING main activity com.android.stk.StkLauncherActivity (from package com.android.stk)
[1623934395695] // - NOT USING main activity com.android.stk.StkLauncherActivity2 (from package com.android.stk)
[1623934395695] // - NOT USING main activity com.android.systemui.flashlight.FlashlightActivity (from package com.android.systemui)
[1623934395695] // - NOT USING main activity com.cmcc.cmvideo.splash.SplashActivity (from package com.cmcc.cmvideo)
[1623934395696] // - NOT USING main activity com.cmic.mmnes.activity.SplashActivity (from package com.cmic.mmnes)
[1623934395696] // - NOT USING main activity com.mc10086.cmcc.base.StartPageActivity (from package com.greenpoint.android.mc10086.activity)
[1623934395696] // - NOT USING main activity com.huawei.android.clone.activity.sender.ChooseReceiveSendActivity (from package com.hicloud.android.clone)
[1623934395696] // - NOT USING main activity com.huawei.android.hwouc.ui.activities.MainEntranceActivity (from package com.huawei.android.hwouc)
[1623934395697] // - NOT USING main activity com.huawei.android.thememanager.mvp.view.activity.onlinebase.PageActivity (from package com.huawei.android.thememanager)
[1623934395697] // - NOT USING main activity com.huawei.android.totemweather.WeatherHome (from package com.huawei.android.totemweather)
[1623934395697] // - NOT USING main activity com.huawei.appmarket.MainActivity (from package com.huawei.appmarket)
[1623934395698] // - NOT USING main activity com.huawei.gameassistant.views.GameassistantMainActivity (from package com.huawei.gameassistant)
[1623934395698] // - NOT USING main activity com.dzbook.activity.SplashActivity (from package com.huawei.hwread.al)
[1623934395698] // - NOT USING main activity com.huawei.mycenter.module.main.view.MainActivity (from package com.huawei.mycenter)
[1623934395699] // - NOT USING main activity com.huawei.phoneservice.LaunchActivity (from package com.huawei.phoneservice)
[1623934395699] // - NOT USING main activity com.huawei.systemmanager.mainscreen.MainScreenActivity (from package com.huawei.systemmanager)
[1623934395699] // - NOT USING main activity com.huawei.trustspace.mainscreen.LoadActivity (from package com.huawei.trustspace)
[1623934395700] // - NOT USING main activity com.huawei.vassistant.ui.main.VAssistantActivity (from package com.huawei.vassistant)
[1623934395700] // - NOT USING main activity com.vmall.client.splash.fragment.SplashActivity (from package com.vmall.client)
[1623934395700] // - NOT USING main activity cn.wps.moffice.documentmanager.PreStartActivity (from package cn.wps.moffice_eng)
[1623934395701] // - NOT USING main activity com.mqunar.splash.SplashActivity (from package com.Qunar)
[1623934395701] // - NOT USING main activity com.baidu.searchbox.SplashActivity (from package com.baidu.searchbox)
[1623934395701] // - NOT USING main activity com.dianping.v1.NovaMainActivity (from package com.dianping.v1)
[1623934395702] // - NOT USING main activity com.github.uiautomator.MainActivity (from package com.github.uiautomator)
[1623934395702] // - NOT USING main activity com.jingdong.app.mall.main.MainActivity (from package com.jingdong.app.mall)
[1623934395702] // - NOT USING main activity com.meituan.android.pt.homepage.activity.MainActivity (from package com.sankuai.meituan)
[1623934395702] // - NOT USING main activity com.sina.weibo.SplashActivity (from package com.sina.weibo)
[1623934395702] // - NOT USING main activity com.ss.android.article.news.activity.MainActivity (from package com.ss.android.article.news)
[1623934395703] // + Using main activity com.tal.tiku.splash.SplashActivity (from package com.tal.tiku)
[1623934395703] // - NOT USING main activity com.taobao.tao.welcome.Welcome (from package com.taobao.taobao)
[1623934395703] // - NOT USING main activity com.tencent.mobileqq.activity.SplashActivity (from package com.tencent.mobileqq)
[1623934395703] // - NOT USING main activity com.tencent.mtt.SplashActivity (from package com.tencent.mtt)
[1623934395704] // - NOT USING main activity com.tencent.news.activity.SplashActivity (from package com.tencent.news)
[1623934395704] // - NOT USING main activity com.tencent.qnet.Component.LoginActivity (from package com.tencent.qnet)
[1623934395704] // - NOT USING main activity io.appium.settings.Settings (from package io.appium.settings)
[1623934395707] // Selecting main activities from category android.intent.category.MONKEY
[1623934395708] // - NOT USING main activity com.android.settings.Settings$RunningServicesActivity (from package com.android.settings)
[1623934395709] // - NOT USING main activity com.android.settings.Settings$StorageUseActivity (from package com.android.settings)
[1623934395709] // - NOT USING main activity com.huawei.android.launcher.unihome.UniHomeLauncher (from package com.huawei.android.launcher)
[1623934395710] // - NOT USING main activity com.huawei.KoBackup.InitializeActivity (from package com.huawei.KoBackup)
[1623934398765] // Special Event:
[1623934398766] // Event0:
[1623934398767] // Prob: 1.0
[1623934398767] // Activity: com.tal.user.login.CodeLoginActivity
[1623934398767] // Times: 1
[1623934398768] // Step0:
[1623934398769] //XPath: //[@resource-id='com.tal.tiku:id/arg' and @text='请输入手机号']
[1623934398770] //XPathExpression: org.apache.xpath.jaxp.XPathExpressionImpl@a94c697
[1623934398770] //Action: CLICK
[1623934398771] //Text: 13310894227
[1623934398771] //Duration: 0
[1623934398772] //Throttle: 1000
[1623934398772] // Step1:
[1623934398773] //XPath: //
[@resource-id='com.tal.tiku:id/arg' and @text='请输入验证码']
[1623934398773] //XPathExpression: org.apache.xpath.jaxp.XPathExpressionImpl@5a4c084
[1623934398774] //Action: CLICK
[1623934398774] //Text: 88888888
[1623934398775] //Duration: 0
[1623934398775] //Throttle: 1000
[1623934398775] // Step2:
[1623934398776] //XPath: //[@resource-id='com.tal.tiku.id/arg' and @Class='android.widget.LinearLayout']
[1623934398776] //XPathExpression: org.apache.xpath.jaxp.XPathExpressionImpl@3e6606d
[1623934398777] //Action: CLICK
[1623934398777] //Text:
[1623934398778] //Duration: 0
[1623934398778] //Throttle: 1000
[1623934398779] // Step3:
[1623934398779] //XPath: //
[@resource-id='com.tal/tiku:id/arg' and @text='登 录']
[1623934398779] //XPathExpression: org.apache.xpath.jaxp.XPathExpressionImpl@bc674a2
[1623934398780] //Action: CLICK
[1623934398781] //Text:
[1623934398781] //Duration: 0
[1623934398782] //Throttle: 1000
[1623934398788] // Black Widget:
[1623934398789] // Widget0:
[1623934398790] // Activity: com.tal.user.login.CodeLoginActivity
[1623934398790] // Xpath: //[@resource-id='com.tal.tiku:id/arg' and @text='密码登录']
[1623934398791] // Index: 0
[1623934398792] // Widget0:
[1623934398792] // Activity: com.tal.user.login.CodeLoginActivity
[1623934398793] // Xpath: //
[@resoutce-id='com.tal.tiku:id/arg' and @text='获取验证码']
[1623934398793] // Index: 0
[1623934398793] // Widget0:
[1623934398794] // Activity: com.tal.user.login.CodeLoginActivity
[1623934398794] // Xpath: //[@resource-id='com.tal.tiku:id/arg' and @text='《用户协议》']
[1623934398795] // Index: 0
[1623934398795] // Widget0:
[1623934398796] // Activity: com.tal.user.login.CodeLoginActivity
[1623934398796] // Xpath: //
[@resource-id='com.tal.tiku.id/arg' and @text='《隐私政策》']
[1623934398797] // Index: 0
[1623934398797] // Widget0:
[1623934398798] // Activity: com.tal.user.login.CodeLoginActivity
[1623934398798] // Xpath: //[@resource-id='com.tal.tiku.id/arg']
[1623934398799] // Index: 0
[1623934398799] // Bounds: [604,478]
[1623934398799] // Widget0:
[1623934398800] // Activity: com.tal.user.login.CodeLoginActivity
[1623934398800] // Xpath: //
[@resource-id='com.tal.tiku.id/arg']
[1623934398800] // Index: 0
[1623934398801] // Bounds: [448,593]
[1623934401333]

[1623934401346] // the top activity is com.huawei.android.launcher.unihome.UniHomeLauncher, not testing app, need inject restart app
[1623934401349] fastbot exec shell:
[1623934401353] fastbot exec schema:
[1623934401354] Switch : #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.tal.tiku/.splash.SplashActivity;end
[1623934401382] // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.tal.tiku/.splash.SplashActivity } in package com.tal.tiku
[1623934401556] : debug, currentActivity is com.tal.tiku.splash.SplashActivity
[1623934401557] Sleep for 0 ms
[1623934401561] Sleep for 2000 ms
[1623934403565] Sleep for 0 ms
[1623934403567] :schema :
[1623934403576] Sleep for 0 ms
[1623934403578] Sleep for 2000 ms
[1623934404413] // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.tal.tiku/.main.MainActivity } in package com.tal.tiku
[1623934404451] // activityResuming(com.tal.tiku)
[1623934405583] : debug, currentActivity is com.tal.tiku.main.MainActivity
[1623934405584] Sleep for 0 ms
[1623934405592] Sleep for 600 ms
[1623934406194] Sleep for 0 ms
[1623934410358] Exception for get action resouece: g0a7@CLICKWidget{hashCode=-1860486566, index=2, clazz='android.widget.TextView', resourceId='com.tal.tiku:id/arg', operationTypeMask=6, scrollType=none, text='版本升级', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(210,1386,510,1466)]
[1623934410362] Exception for get action resouece: g0a8@CLICKWidget{hashCode=-1076197662, index=1, clazz='android.widget.ImageView', resourceId='com.tal.tiku:id/arg', operationTypeMask=6, scrollType=none, text='', contentDesc=''}[priority=0][throttle=200][, UNVISITED][saturation=(0.0,1)][bounds=(620,964,680,1024)]
[1623934410379] Exception for get action resouece: g0a9@[email protected]@50360232[priority=0][throttle=200][, UNVISITED]
[1623934410380] Exception for get action class: g0a9@[email protected]@50360232[priority=0][throttle=200][, UNVISITED]
[1623934410381] *** Get guitree ***
[1623934410471]




[1623934410473] using nstep-q agent
[1623934410474] // Display Bounds: (0,924),(720,1560)
[1623934410474] // Monkey is over!
[1623934410475] :Sending rotation degree : 0, persist : false
[1623934410611] Running failed
java.lang.NumberFormatException: For input string: "[604"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseFloat(FloatingDecimal.java:122)
at java.lang.Float.parseFloat(Float.java:451)
at java.lang.Float.valueOf(Float.java:416)
at com.android.a.c.a.b.b(SourceFile:134)
at com.android.a.c.a.b.a(SourceFile:1108)
at com.android.a.a.e.ay(SourceFile:131)
at com.android.a.a.c.ar(SourceFile:330)
at com.android.a.a.e.c(SourceFile:10548)
at com.android.a.a.b.b(SourceFile:236)
at com.android.a.a.b.a(SourceFile:226)
at com.android.commands.monkey.y.y(SourceFile:681)
at com.android.commands.monkey.y.l(SourceFile:1259)
at com.android.commands.monkey.Monkey.f(SourceFile:1861)
at com.android.commands.monkey.Monkey.a(SourceFile:1105)
at com.android.commands.monkey.Monkey.main(SourceFile:827)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:371)
[1623934410615] Please report this bug issue to github

max.widget.black内容如下:
[
{
"activity": "com.tal.user.login.CodeLoginActivity",
"xpath": "//[@resource-id='com.tal.tiku:id/arg' and @text='密码登录']"
},
{
"activity": "com.tal.user.login.CodeLoginActivity",
"xpath": "//
[@resoutce-id='com.tal.tiku:id/arg' and @text='获取验证码']"
},
{
"activity": "com.tal.user.login.CodeLoginActivity",
"xpath": "//[@resource-id='com.tal.tiku:id/arg' and @text='《用户协议》']"
},
{
"activity": "com.tal.user.login.CodeLoginActivity",
"xpath": "//
[@resource-id='com.tal.tiku.id/arg' and @text='《隐私政策》']"
},
{
"activity": "com.tal.user.login.CodeLoginActivity",
"xpath": "//*[@resource-id='com.tal.tiku.id/arg']",
"bounds": "[604,478]" // 尝试过 "bounds": [604,478]这种格式也不报错

},
{
    "activity": "com.tal.user.login.CodeLoginActivity",
    "xpath": "//*[@resource-id='com.tal.tiku.id/arg']",
    "bounds": "[448,593]"
}

]

PDF使用文档对这块的使用描述较少,麻烦能补充一下吗?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.