地图类应用只能定位到一个占满屏幕的layer

问题

一个地图类应用,使用inspector定位的时候发现定位不到元素,只有一个占满屏幕的layer,应该怎么解决?

报错信息

环境

windows11

@seveniruby @hogwarts_wenzi @hogwarts-yunlong

你刷新下看看,可能是有延迟。另外一个可能是本身是由一些独立的引擎开发的,是自定义控件。appium无法识别。

应该是有自研引擎。

  1. 对于引擎渲染的界面appium除了坐标定位有什么办法么?

2.修改appium的源码 or 需要开发配合修改引擎?

3.需要开发配合的话应该怎么和开发形容修改的内容?

先搞清楚什么引擎吧,一般的引擎都有技术是支持识别和自动化的。如果是真的没有解决方案,再动用一些特殊的防范,坐标、ocr、opencv、人工智能等技术去搞定。

看了一下源代码,是安卓应用通过JNI调的C,主要的逻辑都写在C层,安卓层就放了一个service view,是c层用opengl绘制完界面了再传到安卓层贴上去的,这感觉无解了哇 校长救我 :sob:

opengl我也不熟悉,不过自动化的原理都是类似的,如果外部系统没有对应的界面控件识别逻辑,你可以跟研发配合,让研发提供接口去识别界面。这个方式跟游戏测试差不多。

另外就是用图像识别或者人工智能去识别,不过维护成本比较大。可以先看看我提的第一个方案。

嗯 比如我要求开发提供一个接口放界面渲染的描述比如一个xml结构的字符串,我可以解析这个字符串得到界面信息,然后开发提供一个接口根据我提供的元素描述和动作来实现操作元素,但是应该怎么实现这个一个传递的过程呢?
还需要我做一个类似appium settings的辅助apk安装在机器上然后类似appium server一样通过adb命令去传递操作,再由我做的辅助apk去调开发的接口执行么?

最简单的方式就是提供一个调用方式,比如开启一个小的网络端口,或者类似webview mysql那种socket句柄,再或者性能低一点写到某个临时文件里。只要你们约定好通讯就行了。这种技术理念也特别像airtest里的poco的sdk。

有了上面的这个基础,其他的什么apk就用不着了。直接网络通讯就行了。

这个方法最大的难度是需要研发的支持。