1. 定位工具

前言,在环境搭建已经安装anroid-sdk,里面就自带有元素定位的工具。找到uiautomatorviewer.bat文件,位置在D:\android-sdk-windows\tools里。可以选择快捷发送到桌面,这样就方便随时使用了。

连接上手机,打开uiautomatorviewer.bat文件,出现这2个按钮:

第一个图标是获取设备截屏,可以获取元素完整的层级关系,所以我们一般使用这个。
第二个图标是获取压缩后的设备截屏,包含各个元素的属性,无法获得完整的层级路径。
ps:工具只能获取手机当前的界面截图,而不是实时同步的显示手机界面

2. 定位方法

  • 通过ID进行定位
driver.findElementsById("cn.etouch.ecalendar:id/img_edit")

需要注意的是取值一定要唯一,如果不是唯一,可以选择resource-id、name、text、accessibility id其他方法进行定位

  • 通过class定位
driver.findElementsByClassName("android.widget.ImageButton")

class是一个类属性,一般重复性会很高,所以很少直接使用,这里讲class属性是由于在xpath中会频繁用到class属性

  • 通过xpath进行定位

xpath是一种特殊的定位方法,理论上xpath可以定位到所有元素

xpath有2种写法,一种绝对路径,一种相对路径。

绝对路径:
元素的全路径,包含了全部节点。这种方法首先一看就觉得太长写起来好累,如果层级再多那写起来简直无休无止了;另一方面由于涉及到太多层,一旦中间任何一层有变动,那元素就定位不到了,例如:

/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.view.ViewGroup/android.widget.ImageButton

相对路径:
1.如果当前class内存在唯一text可以定位元素,直接用当前class+text,例如:

//android.widget.TextView[@text='123']

2.如果当前class内存在唯一content-desc可以定位元素,直接用当前class+content-desc,例如:

//android.widget.TextView[@content-desc='123']

3.如果当前class内,resource-id、text、content-desc三者取其二或者取其三能唯一定位元素,直接用当前class+两者/三者并列,例如:

//android.widget.TextView[@resource-id='com.space.grid.debug:id/text' and @text='123']

4.如果当前class内,text、content-desc中的文本内容不是完全符合,但能匹配部分内容,可用当前class+模糊定位contains,例如:

//android.widget.TextView[contains(@text,'123')]

5.如果在当前class内无法通过以上4种办法定位元素,则向上寻找元素的父节点或者祖父节点通过以上4种办法定位,总之是找到能唯一定位且离元素最近的一个上层节点,例如:

//android.widget.RelativeLayout[@resource-id='com.space.grid.debug:id/address']/android.widget.ImageView[2]

ps:xpath的下标是从1开始的,不是0

  • 坐标定位

如果在uiautomatorviewer.bat工具里找不到元素,就只能使用坐标进行定位了。但是有很大的问题,每个手机的分辨率是不一致的,坐标可能只当前手机可用,如果需要这种操作,还要加上手机识别判断。

python+appium手机APP自动化基础篇3-找元素定位(anroid)相关推荐

  1. appium手机APP自动化定位元素

    目录 1 什么事手机app自动化,作用和特点 2 自动化原理: 3 定位元素 根据ID 根据CLASS NAME 根据ACCESSIBILITY ID Xpath 1 什么事手机app自动化,作用和特 ...

  2. Appium 手机 App 自动化代码说明_启动微信app

    #coding=utf-8 from appium import webdriver desired_caps = { 'platformName': 'Android', 'platformVers ...

  3. python教程app攻略_一篇清晰易懂的Python操控手机APP攻略!

    阅读全文大概需要 9 分钟. 最近由于一直处于在家远程办公状态,新的一年,很多公司.部门事情要处理,比较忙,公号原创文的创作速度明显减慢!亲爱的读者们,你们都等着急了吧. 最近经常看到许多公号在推一些 ...

  4. 手机APP自动化 Appium教程

    Appium原理与安装 Appium 是一个移动 App (手机应用)自动化工具. 手机APP 自动化有什么用? 自动化完成一些重复性的任务 比如微信客服机器人 爬虫 自动化测试 Appium 自动化 ...

  5. Python 操控手机 APP

    From:https://www.cnblogs.com/7758520lzy/p/11994776.html Python 控制雷电模拟器:https://blog.csdn.net/zerglur ...

  6. python手机版怎么用-如何用Python操控手机APP攻略!建议收藏!很全面

    最近经常看到用Python操作手机APP的项目,例如抖音.闲鱼之类的,看完后发现这些项目无一例外需要部署ADB环境.至于什么是ADB,很多大神都讲过,只是写得比较专业,我等菜鸟看完还是云里雾里. 为了 ...

  7. 用Python操控手机APP攻略一

    [转自https://mp.weixin.qq.com/s/m5NVrayleQWztpJNbZ7mEA为了防止文章失效特此备份] 史上最全的用Python操控手机APP攻略!建议收藏! 原创 大刘  ...

  8. 如何用Python操控手机APP攻略!建议收藏!很全面

    最近经常看到用Python操作手机APP的项目,例如抖音.闲鱼之类的,看完后发现这些项目无一例外需要部署ADB环境.至于什么是ADB,很多大神都讲过,只是写得比较专业,我等菜鸟看完还是云里雾里. 为了 ...

  9. 史上最全的用Python操控手机APP攻略!建议收藏!

    最近经常看到用Python操作手机APP的项目,例如抖音.闲鱼之类的,看完后发现这些项目无一例外需要部署ADB环境.至于什么是ADB,很多大神都讲过,只是写得比较专业,我等菜鸟看完还是云里雾里. 为了 ...

最新文章

  1. SpringMVC源码分析(4)剖析DispatcherServlet重要组件
  2. JAVA与.NET的相互调用——通过Web服务实现相互调用
  3. leetcode刷题 66 67
  4. 使用注解版AOP解决事务问题
  5. 技术沙龙之液晶监视器和显示器
  6. 一个程序员的一些想法(二)
  7. windows下安装ta-lib的方法
  8. Flutter基础—常用控件之容器
  9. 蓝桥杯 ALGO-31算法训练 开心的金明(01背包,动态规划)
  10. sudo apt-get update 与upgrade的用法
  11. vue 方法回调通知执行下一个方法
  12. 苹果:我们从未向中国政府透露源代码
  13. win10有源信号分辨率怎么调_示波器高灵敏度小信号测量的注意事项
  14. adobe animate2022动画制作软件
  15. 二阶无源低通滤波器幅频特性曲线_低通无源滤波器设计-详细
  16. 常用的项目团队管理方法
  17. lanyu 激活idea2018.3.5
  18. 云分享YFX软件合集-开车不是儿戏!这些坏习惯,时时刻刻威胁着你的生命安全
  19. Linux的userdel和deluser命令
  20. flash与PHP的交互技巧

热门文章

  1. javascript 正则 判断电话号码格式
  2. 创新不止,南卡Runner Pro4S骨传导耳机享舒适畅听,硬核实力配置拉满
  3. 20179311《网络攻防实践》第二周作业
  4. 防火墙 Hillstone Networks SA-2005
  5. 聊一聊系列之:面对秒杀
  6. 你的孤独是既希望有人关心又不希望有人打扰
  7. 二十多岁该做些什么,将来才不会后悔?
  8. 互联网开发搞手游创作5-策略性设计
  9. 同为科技(TOWE)新国标16A三孔+10A五孔桌面PDU插排插座
  10. 代理、转发等多种场景下,如何获取用户真实IP?