#5 楼 @seveniruby 恩,看了一下 macaca-insepector 的 xpath, js 写的,目测 appcrawler 的算法和它还是有点小区别,加入了 index,resouce-id,text ... etc,更直观,我用的语言是 java,尝试 java 重造一下。
十一期间开源,这是大礼包啊,感谢思寒! 期待
@seveniruby
版本迭代好快啊,非常好用的一款遍历工具!(汗!,刚才弹出页面,发错位置了。。。)
有个问题想请教,获取界面元素后,操作某控件后,跳转界面后,那么之前界面上未遍历的元素肯定是需要存储的,以便下次识别遍历情况,我看是存入到了 UrlElement 中,其中 UrlElement 中的 loc 我理解就是该控件的 xpath 规则,下次遍历到该界面就采用这个 xpath 规则获取控件,不知我理解是否准确。问题是,比如下面这个 “注册” 控件元素,获取到 WebElement 后,很想了解如何组装成 loc 存入 UrlElement 的?
Element='<android.widget.LinearLayout bounds="[0,435][360,484]" checkable="false" checked="false" class="android.widget.LinearLayout" clickable="true" content-desc="" enabled="true" focusable="false" focused="false" index="0" instance="2" long-clickable="false" package="com.xueqiu.android" password="false" resource-id="com.xueqiu.android:id/button_register_container" scrollable="false" selected="false" text="">
<android.widget.TextView bounds="[0,435][360,484]" checkable="false" checked="false" class="android.widget.TextView" clickable="false" content-desc="" enabled="true" focusable="false" focused="false" index="0" instance="0" long-clickable="false" package="com.xueqiu.android" password="false" resource-id="com.xueqiu.android:id/button_register" scrollable="false" selected="false" text="注册" />
</android.widget.LinearLayout>'
#90 楼 @quqing 确实 JDK1.8 上是可以奔跑的!赞!
还遇到一个问题,影响性能不知如何破解,UiNode 存储 Id 包含 xpath,之后 pop 出来会根据 xpath 在当前页面进行懒加载,
element 获取不到,抛出 NoSuchElementException,从开始找到抛异常间隔时间太长了,这个时间能否缩短。
Appium Server 端 log 如下
info: [debug] [BOOTSTRAP] [debug] Got data from client: {"cmd":"action","action"
:"find","params":{"strategy":"xpath","selector":"//android.widget.FrameLayout[1]
/android.view.ViewGroup[1]/android.widget.FrameLayout[1]/android.widget.LinearLa
yout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.wid
get.LinearLayout[2]/android.widget.FrameLayout[1]/android.widget.ListView[1]/and
roid.widget.LinearLayout[1]/android.widget.LinearLayout[2]/android.widget.Linear
Layout[4]","context":"","multiple":false}}
info: [debug] [BOOTSTRAP] [debug] Got command of type ACTION
info: [debug] [BOOTSTRAP] [debug] Got command action: find
info: [debug] [BOOTSTRAP] [debug] Finding //android.widget.FrameLayout[1]/androi
d.view.ViewGroup[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]
/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.Lin
earLayout[2]/android.widget.FrameLayout[1]/android.widget.ListView[1]/android.wi
dget.LinearLayout[1]/android.widget.LinearLayout[2]/android.widget.LinearLayout[
4] using XPATH with the contextId: multiple: false
info: [debug] [BOOTSTRAP] [debug] Returning result: {"status":7,"value":"Could n
ot find an element using supplied strategy. "}
抢沙发,楼主辛苦!
Exception in thread "main" java.lang.UnsupportedClassVersionError: pers/quq/filedb/core/Filter : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at pers.traveler.robot.RobotFactory.build(RobotFactory.java:13)
at pers.traveler.test.TravelerTest.main(TravelerTest.java:16)
我在 github 上拿到源码,一直在看,还没有跑成功,报错如上
Windows7
android 6.0
测试 Apk zhihu
请教一下,我没找到 pers/quq/filedb/core/Filter 这个在哪