Appium Dcloud 开发的 Android APP 无法使用 ID 定位元素?

Chen · 2020年02月05日 · 最后由 花开 回复于 2020年02月12日 · 1787 次阅读

开年不顺,现在公司要求 iOS Android 二合一,由原生改为 Dcloud 开发,新版发包后要修改之前的元素定位,但是发现把原来的元素 ID 改成新的 ID 之后无法定位。
举个栗子:
老版的登陆和注册的定位是这样的:_login_locator = (By.ID, 'com.avictc.xxx:id/login') _register_locator = (By.ID, 'com.avictc.xxx:id/register'),久经考验,一直没问题;
新版的登陆和注册的定位改成了这样:_login_locator = (By.ID, 'btnLogin') _register_locator = (By.ID, 'btnReg');

问题:
ID 修改成新的之后便一直无法定位,APP 页面结构和 appium 打印的 log 是这样的:

使用 ID 无法定位之后,我改用了 XPATH 定位:_register_locator = (By.XPATH, '//android.view.View[@text="注册"]') 或者 _login_img_locator = (By.XPATH, '//android.view.View[@resource-id="btnLogin"]') 便可以定位了;

有点想不通,这 ID 为什么就定位不了呢?

===================================================================================

新的发现:

Android APP 的代码都是由 html 转换过来的,我们的应用目前是 三端合一,刚刚去了 web 端看了下,发现 web 端的元素属性是这样的:

我现在就只想呵呵,压根就没有 ID 属性,html 转换成 Android 元素的时候 将 class 属性识别成了 ID 属性,这应该是问题的根本原因了。

那么,这玩意到底是 Dcloud 的锅,还是 appium 的锅???

===================================================================================

又有新的发现,html 和转换成 app 的元素都有 ID 属性时,仍然无法使用 ID 定位,只能使用 XPATH;
(By.XPATH, '//android.view.View[@resource-id="KBCon"]')

共收到 14 条回复 时间 点赞

id 也要给完整的 id 吧

Chen #2 · 2020年02月05日 Author
恒温 回复

已经完整了,appium 客户端识别出来就是这么短😂

使用 uiautomatorview 看看页面结构,你这里看的不清不楚的

Chen #4 · 2020年02月06日 Author
花开 回复

页面结构上传了,html 中没有 ID 属性,转换成 Android 页面时 appium 怎么把 class 当成 ID 了😂

看一下这个页面上是否 id = KBCon 的元素不止这一个

楼主已经上班了?

Chen 回复

你这个根本就是 web 的页面,需要切换为 webview 的 context 查找控件信息,使用原生的是肯定不行的

Chen #8 · 2020年02月06日 Author
Tester_XXX 回复

只有一个,如果有多个的话,也会找到第一个返回元素对象!

Chen #9 · 2020年02月06日 Author
花开 回复

不是 web 页面哦,APP 内嵌的 web 页用 appium 根本看不到页面结构,这个是 dcloud 用 html 转换成的 Android 页面结构,我用 XPATH 就能定位到元素,但是用 ID 就定位不到,帖子里有描述的。

Chen #10 · 2020年02月06日 Author
山姆大叔 回复

远程上班,返回工作地隔离 14 天!

Chen 回复

兄弟,你往上几层看看是不是有一个 webview,现在 android uiautomator 贵把 webivew 里面的元素转成看起来是原生的控件,你对比看看元素差别还是挺多的,最少没有 class 或者都是 view

Chen #12 · 2020年02月11日 Author
花开 回复

开发说是 dcloud 转的,代码本身是 html,被转换成这种的 Android 布局...

Chen #13 · 2020年02月11日 Author
花开 回复

仔细看了下,这个页面没有 webview,整个 app 里只有资讯版本是 webview...

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