(得要学着看源码)

问题:

self.driver.find_element_by_id("id").get_attribute("content-desc"), 会报NoSuchElement异常,经过验证是get_attribute的问题

问题原因探究:需要学会分析排插定位问题的根源,最关键还是要理解业务、底层代码、调用库实现流程的原理

appium server 在 android 原生应用上获取 attribute 的大致流程为:

  1. 从 client 收到获取 attribute 的请求
  2. 把请求转发给在手机上运行的 bootstrap
  3. bootstrap 调用相关方法进行实际操作
  4. bootstrap 返回结果给 appium server
  5. 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 里面的一致):

获取不到,但会显示在 uiautomatorviewer 中的属性:

    • index
    • package
    • password
    • bounds(可通过 get_position 来获取其中部分内容)

关于 appium get_attribute 方法的坑的更多相关文章

  1. appium的get_attribute方法

    转http://blog.csdn.net/bear_w/article/details/50330753 问题描述 当使用类似下面的代码获取元素的 content-desc 属性时,会报 NoSuc ...

  2. 关于 appium get_attribute --获取对应属性值 API说明

    1.获取 content-desc 的方法为 get_attribute("name") ,而且还不能保证返回的一定是 content-desc (content-desc 为空时 ...

  3. 转载:appium踩过的坑

    原文地址:http://blog.csdn.net/wirelessqa/article/details/29188665 自己的操作:由于在window上安装appium时,报各种错误:所以选择在u ...

  4. JQ绑定事件的叠加和解决,index()方法的坑

    JQ绑定事件的叠加和解决,index()方法的坑 前言 在做过几个不大不小的项目后,发现技术这种东西,必须要多多实践,才能发现各种问题,理论的知识掌握的再好终究是纸上谈兵. 因此目前感觉有两点是必须要 ...

  5. SFTP 连接服务器下载文件方法采坑说明

    本篇博客主要记录请求SFTP服务器的一些方法采坑情况. 采坑的方法说明: 1. cd():这个方法用于进入某个目录下. 默认情况,当连接SFTP服务器成功后直接进入用户目录,比如我连接自己本机SFTP ...

  6. appium 等待方法 转

    前些日子,配置好了appium测试环境,至于环境怎么搭建,参考:http://www.cnblogs.com/tobecrazy/p/4562199.html   知乎Android客户端登陆:htt ...

  7. appium简明教程(5)——appium client方法一览

    appium client扩展了原生的webdriver client方法 下面以java代码为例,简单过一下appium client提供的适合移动端使用的新方法 resetApp() getApp ...

  8. appium定位方法

    1.id定位 driver.find_element_by_id("这里是resource-id") 2.name定位 (新版本的appium 1.7 已经没有这个定位方法了) d ...

  9. python appium增加方法

    1.测试过程中发现python client没有拨打电话的方法,因此去添加该方法 1.1查看源码 appium-base-driver/blob/master/lib/protocol/routes. ...

随机推荐

  1. my bug of VG algorithm

    def visibility_graph(series): g = nx.Graph() # convert list of magnitudes into list of tuples that h ...

  2. goto语句的本质

    除非跳出多个循环嵌套和远程注入技术,否则尽量少用goto goto会降低程序的可读性,让代码难以调试 利用递归也可以实现循环结构和do while类似 #define _CRT_SECURE_NO_W ...

  3. mysql update某个字段替换成某个值

    UPDATE xc_admin_vehicle SET brandid= REPLACE(brandid, 19, 54) UPDATE xc_admin_models SET bid= REPLAC ...

  4. mysql查询速度慢的分析和解决

    一.定位执行慢的sql,如2秒内没执行完的抽取出来 show engines;查看慢查询时间show variables like 'slow%';查看设置多久是慢查询show variables l ...

  5. IntelliJ IDEA 2017.3尚硅谷-----断点调试

  6. Jquery拖拽,拖动排序插件

    上github搜jquery-sortable <!-- jq拖拽排序 --> <script src="${contextPath}/static/excelTable/ ...

  7. 【StarUML】 活动图

    StarUML中的活动图本质上是流程图,活动图相对来说,更加专业,它有对信号的处理,对状态动作.数据区别表示,使得更清晰地了解控制流的走向. 1.基本元素 a.活动状态图(Activity).动作状态 ...

  8. 三维数据曲面图 season绘图 panda绘图

    三维数据曲面图 season绘图 panda绘图 待办 enter description here 转化成网格坐标 season可以让绘图更美观 panda绘图可以直接根据panda数据绘制图直接p ...

  9. [前端] html限制input输入数字和小数

    限制input只能输入数字和小数 html代码 <input type="text" style="width:50px" name="widt ...

  10. HTML学习(1)简介

    HTML---HyperText Markup Language,超文本标记语言,是一种用于创建网页的标准标记语言. 注意:对于中文网页需要使用 <meta charset="utf- ...