Appium 有人尝试过通过定位 Appium 控件逆推出该控件的所有信息么?

scarletykuyh · 2019年10月23日 · 最后由 scarletykuyh 回复于 2019年10月23日 · 2570 次阅读

一般都是通过 find 系的函数,借由一到多个属性定位某一个控件的,但是既然能定位到这个控件,理论上就能获取该控件的其他信息吧?

现在有一个想法是截取下每次操作前的页面信息,定位控件时,通过定位的属性在 xml 里直接找到这个控件,然后就能得到所有其他属性了。

但是想了解下 Appium 自身有没有自带这样的接口或者功能呢?不然白造个轮子感觉就挺傻的……

希望有做过类似研究的大佬能不能交流一下,谢谢!

共收到 5 条回复 时间 点赞

先访问 /elements 接口获取查找元素的 elementId,内部会把控件的信息缓存下来,在根据 elementId 访问 /element/:uuid/text 可以获取控件文本信息,其他信息可以看下这个链接里的文档,有代码示例 https://github.com/appium/appium/tree/master/docs/en/commands/element/attributes

ltyd5788 回复

谢谢回复,网址中的内容我了解了一下。因为我是主要用 java 脚本写的,所以尝试了下 java 获取的方法,发现网址里提供的接口似乎还是会有一些参数获取有问题,比如 content-desc 无法精确获取。也找了一些佐证的帖子,https://testerhome.com/topics/2606
您说的 http 格式的我确实不太了解…不知道是否能够拿到控件全部的属性呢?

scarletykuyh 回复

从 appium-uiautomator2-server 上看,用/element/elementId/name 端点和/elements/:element_id/attribute/:name 都能获取 content-desc 属性,可以从以下两篇链接得知,只不过访问 /elements/:element_id/attribute/:name 端点用的是 contentDescription 属性,试试改用 contentDescription 属性或者根据 name.md 文档用另外的端点看看能不能拿到这个属性的信息,至于 content-desc 无法精确获取元素的信息,需要给出例子用 uiautomatorviewer 或 adb 对比下提取的信息是否存在,uiautomatorviewer 能显示出对应控件的属性,Appium 都提供了对应的接口访问其属性

https://github.com/appium/appium-uiautomator2-server/blob/752a8a8551b7e8cf7050182b826e234c0839a548/app/src/androidTestE2eTest/java/io/appium/uiautomator2/unittest/test/internal/commands/ElementCommands.java#L98

https://github.com/appium/appium-uiautomator2-server/blob/752a8a8551b7e8cf7050182b826e234c0839a548/app/src/androidTestE2eTest/java/io/appium/uiautomator2/unittest/test/ElementCommandsTest.java#L73

建议多看下 appium 的 api 吧, 你说的这些都有, 元素的 text 文本、元素坐标、长宽高、是否勾选、是否可点击等等,元素所有相关的东西都能获取,有现成的 API

usky 回复

content-desc 和 text 会混呀…你看我评论里发的那篇,里面说到 desc 为空时会被 text 替换,无法确定精确的 desc 值。而且也有一些控件只有用 index 获取的,这个靠官方 api 时没法获得的

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册