炒沙作縻终不饱,缕冰文章费工巧。这篇文章主要讲述关于 appiumget_attribute 方法的坑相关的知识,希望能为你提供帮助。
(得要学着看源码)
问题:
self.driver.find_element_by_id("id").get_attribute("content-desc"),
会报NoSuchElement异常,经过验证是get_attribute的问题
问题原因探究:需要学会分析排插定位问题的根源,最关键还是要理解业务、底层代码、调用库实现流程的原理
appium server 在 android 原生应用上获取 attribute 的大致流程为:
- 从 client 收到获取 attribute 的请求
- 把请求转发给在手机上运行的 bootstrap
- bootstrap 调用相关方法进行实际操作
- bootstrap 返回结果给 appium server
- appium server 把结果返回给 client
文章图片
文章图片
其中`getStringAttribute`和`getBoolAttribute`源码如下:
文章图片
文章图片
总结:
1、获取 content-desc 的方法为
get_attribute("name")
,而且还不能保证返回的一定是 content-desc (content-desc 为空时会返回 text 属性值)2、
get_attribute
方法不是我们在
uiautomatorviewer
看到的所有属性都能获取的(此处的名称均为使用 get_attribute 时使用的属性名称):可获取的:
字符串类型:
- name(返回 content-desc 或 text)
- text(返回 text)
- className(返回 class,只有 API=> 18 才能支持)
- resourceId(返回 resource-id,只有 API=> 18 才能支持)
- enabled
- checkable
- checked
- clickable
- focusable
- focused
- longClickable(返回 long-clickable)
- scrollable
- selected
- displayed(此元素是否在当前界面存在。调用的是 UIObject 的
exists()
方法,详情请看 http://developer.android.com/reference/android/support/test/uiautomator/UiObject.html#exists())
- index
- package
- password
- bounds(可通过 get_position 来获取其中部分内容)
【关于 appiumget_attribute 方法的坑】
推荐阅读
- 解决krpano全景视频在QQ浏览器安卓不能正常播放的问题
- Android Studio - No cached version available for offline mode
- android布局属性tools:context的作用
- [Compose] 17. List comprehensions with Applicative Functors
- android关于fragment的构造函数用法建议
- Android组件化开发的简单应用
- 微信小程序引入外部组件 iView Weapp
- Android中的线程池
- AppScan使用教程