关于 appium get_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
通过排查各部分的代码发现,错误是在 bootstrap 产生的(排查过程涉及代码有点多,所以这里就不解释了),所以看看 bootstrap 相关源码:


其中`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 才能支持)
布尔类型(如果无特殊说明, get_attribute 里面使用的属性名称和 uiautomatorviewer 里面的一致):
- 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())
获取不到,但会显示在 uiautomatorviewer 中的属性:
- index
- package
- password
- bounds(可通过 get_position 来获取其中部分内容)
关于 appium get_attribute 方法的坑的更多相关文章
- appium的get_attribute方法
转http://blog.csdn.net/bear_w/article/details/50330753 问题描述 当使用类似下面的代码获取元素的 content-desc 属性时,会报 NoSuc ...
- 关于 appium get_attribute --获取对应属性值 API说明
1.获取 content-desc 的方法为 get_attribute("name") ,而且还不能保证返回的一定是 content-desc (content-desc 为空时 ...
- 转载:appium踩过的坑
原文地址:http://blog.csdn.net/wirelessqa/article/details/29188665 自己的操作:由于在window上安装appium时,报各种错误:所以选择在u ...
- JQ绑定事件的叠加和解决,index()方法的坑
JQ绑定事件的叠加和解决,index()方法的坑 前言 在做过几个不大不小的项目后,发现技术这种东西,必须要多多实践,才能发现各种问题,理论的知识掌握的再好终究是纸上谈兵. 因此目前感觉有两点是必须要 ...
- SFTP 连接服务器下载文件方法采坑说明
本篇博客主要记录请求SFTP服务器的一些方法采坑情况. 采坑的方法说明: 1. cd():这个方法用于进入某个目录下. 默认情况,当连接SFTP服务器成功后直接进入用户目录,比如我连接自己本机SFTP ...
- appium 等待方法 转
前些日子,配置好了appium测试环境,至于环境怎么搭建,参考:http://www.cnblogs.com/tobecrazy/p/4562199.html 知乎Android客户端登陆:htt ...
- appium简明教程(5)——appium client方法一览
appium client扩展了原生的webdriver client方法 下面以java代码为例,简单过一下appium client提供的适合移动端使用的新方法 resetApp() getApp ...
- appium定位方法
1.id定位 driver.find_element_by_id("这里是resource-id") 2.name定位 (新版本的appium 1.7 已经没有这个定位方法了) d ...
- python appium增加方法
1.测试过程中发现python client没有拨打电话的方法,因此去添加该方法 1.1查看源码 appium-base-driver/blob/master/lib/protocol/routes. ...
随机推荐
- 牛客多校第七场H Pair 数位dp理解
Pair 题意 给出A B C,问x取值[1,A]和y取值[1,B]存在多少组pair<x,y>满足以下最小一种条件,\(x \& y >c\),\(x\) xor \(y& ...
- c#数据筛选和排序
一.TreeView SelectedNode 选中的节点 Level 节点的深度(从0开始) AfterSelect 节点选中后 ...
- 正则表达式过滤url请求
过滤url中带reset的url请求 atgBusSignFilter.setSignUriRegex("^.*/reset/.*$")等价于 atgBusSignFilter.s ...
- Contos7下安装Redis
第一步:在线下载Redis的安装包 cd /opt/ wget http://download.redis.io/releases/redis-5.0.2.tar.gz `ps:也可自行下载到本地,让 ...
- crowdfunding项目02——server无法启动
错误描述:在maven工程下使用tomcat启动项目时,一直报错,排除代码问题(可以打包成功) 原因:jar包在下载过程中网断或者其他原因发生错误,导致server服务无法启动(简单理解:jar包下载 ...
- xpath解析html标签
最近忙一个需求:把一个字符串形式的html文档转化成excel. 分解需求: ① 实现语言 ———— python ② html解析 ———— 用 lxml库的etree工具,xpath方式解析文档树 ...
- 路飞-Redis
redis数据库 # 1.安装redis与可视化操作工具 # 2.在服务中管理redis服务器的开启关闭 # 3.命令行简单使用redis: -- redis-cli # 启动客户端 -- set k ...
- nginx 定义:响应头和请求头
1) 响应头 add_header 例如: add_header Cache-Control no-cache; add_header Access-Control-Allow-Origin *; a ...
- hadoop之mr框架的源码理解注意点
1.reduce源码中的 GroupComparable和SecondaryComparable到底都是干什么的 理解点1: 源码位置 理解点 secondaryComparable这个是可以对map ...
- c#修改项目名称
1.修改解决方案名称 右键,重命名 2.修改项目名称 右键,重命名 3.修改程序集名称和默认命名空间 项目,属性 4.替换解决方案中的名称 编辑,替换,替换范围默认整个解决方案 5.用记事本打开.sl ...