Appium appium 与 webview--元素的属性会"变"

grizz · 2018年08月23日 · 最后由 omeletteWithEgg 回复于 2019年12月11日 · 2453 次阅读

一、 背景:

在写 appium 框架,使用 macaca 的 app-inspector 定位小米 5S 的元素,再想尽各种办法调好各大模块的流程,封装通用模块后,case 都运行成功了,哈哈哈哈

开始交付,并要求在 vivo 手机上跑,一跑发现很多 case 都失败了,都是报错NoSuchElementException,我想不应该啊,刚在小米上调过的,怎么会报找不到元素的报错,仔细对比后发现,同一页面的同一元素的属性,两个手机显示的不一样,具体举例如图:


二、问题:

具体表现如下:

先介绍一下 Android 根据元素属性,定位元素的方法:

1.根据 resource-id 的值:
driver.find_element_by_id('openapp').click()
2.根据 text 的值:
driver.find_element_by_android_uiautomator("text('打开 APP')")
3.根据 content-desc 的值:
driver.find_element_by_accessibility_id("打开 APP")

对于打开APP这个按钮,在小米上面text属性值为打开 APP,但是在 VIVO 手机上content-desc属性值为打开 APP。
意思就是我们要把
driver.find_element_by_android_uiautomator("text('打开 APP')")
改成
driver.find_element_by_accessibility_id("打开 APP")

才能把在小米手机上运行的代码,在 VIVO 手机同样运行成功。
这个工程想想好像不小,有点气,拿着手机打开 app-inspector 的页面去找对应的开发,你们这个版本有改这个页面的元素属性吗,我之前根据 text 属性定位元素,现在 text 属性没了变成了 content-desc。“这个版本没有改这块的代码啊”,好吧,我有点不信但是还是要相信战友,想想问题到底出在哪。先排除版本问题,于是我两个手机都下载了同一版本的 APP,使用 app-inspector 查看元素,发现现象是一样的。那一样的版本在不同的手机上,使用 app-inspector 查看元素的属性不一样,那就是手机的问题罗 (心里默默吐槽了一下,垃圾手机)。后面仔细查看,这个现象好像只出现在一些 react 写的 H5 页面上,原来是两个手机的 webview 版本不一样,导致不同版本的 webview 渲染页面时效果不一样,使用 chrome 的 inspect 查看得知: 小米手机 webview 版本64.0.3282.137,VIVO 手机 webview 版本55.0.2883.91
虽然发现了问题,但是我把要是把find_element_by_android_uiautomator("text(‘打开APP’)")的一部分改成find_element_by_accessibility_id(“打开APP”),这个活好像不太好干,而且我改了后就只能在 VIVO 手机上跑,小米上跑不了了,目前小米的 webview 版本高一点,根据趋势我要是改了我总感觉以后还要改回来。

三、解决:

框架的 case 是读的 yaml 文件,所有封装好的方法可以在 yaml 文件中调用

-
  element_info: text("我的")
  find_type: by_android_uiautomator
  operate_type: click
-
  element_info: 我的
  find_type: by_accessibility_id
  operate_type: click

因为低版本的 webview 会把高版本的 text 渲染成 content-desc,我只需要在识别到 find_type 是 by_android_uiautomator 时,先根据 by_android_uiautomator 去找,找不到了转化成 by_accessibility_id 再去调就好了。
记录一下遇到的问题和解决

欢迎交流指正,感谢阅读。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 3 条回复 时间 点赞

切换进 webview 再查找元素应该没这种问题吧

雨夜狂奔 回复

切了定位 webview 元素没有问题,但是很多页面是混合页面,一个页面有 native 有 h5

我发现不仅仅是 text 和 content-desc 渲染不一样,连 resource-id 也是在不同版本的手机里,有些有,有些没有的情况

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