我们继续来介绍Appium元素定位方法,有些人做过selenium自动化测试,对xpath元素定位很熟悉。他突然想用xpath来定义手机app页面元素,那么这个是否可以呢?我们在IDE环境输入driver.,后面就自动弹出各种方法,也看到了确实有xpath元素定位。本篇就来介绍xpath元素定位,一般来说,元素定位选择第一是ID,第二是class,如果class没有重复,第三是by uiautomator,第四,可能就是xpath。前面三种方法都无法定位元素的时候,xpath就闪亮登场。我们通过xpath定位手机百度底部菜单栏中的我的模块来演示xpath的写法。

1.打开UI Automator Viewer,抓取我的 元素信息。

通过这个软件,我们发现底部这一排菜单都是同一个class,唯一不同就是界面上图标不同,和index不同,这里index是索引的意思。但是这个主意哈,当前我的索引是4,底部一共有5个按钮,说明索引是从0开始算。本篇我们要学习xpath定位,但是xpath索引是从1开始计算的。利用xpath定位的思路是:先根据class定位到五个元素,然后根据索引5来精确定位到“我的”模块。

2. Python+Appium脚本实现过程。

import osimport time
from appium import webdriverapk_path = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))  # 获取当前项目的根路径desired_caps ={}
desired_caps['platformName'] = 'Android' #设备系统
desired_caps['platformVersion'] = '6.0.1' #设备系统版本
desired_caps['deviceName'] = 'KIW-AL10' #设备名称# 测试apk包的路径
desired_caps['app'] = apk_path + '\\app\\shoujibaidu.apk'
# 不需要每次都安装apk
desired_caps['noReset'] = True
# 应用程序的包名
desired_caps['appPackage'] = 'com.baidu.searchbox'
desired_caps['appActivity'] = 'com.baidu.searchbox.SplashActivity'driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)#启动app
time.sleep(5) #app启动后等待5秒,方便元素加载完成
# 根据元素xpath来定位
# 点击“我的”
my_home = driver.find_element_by_xpath("//*[@class='android.widget.FrameLayout'][5]").click()
time.sleep(2)

通过运行发现,确定定位到了我的模块,看手机效果可以证明XPATH表达式定位是成功的。为了练习xpath,我们再次用xpath来定位搜索输入框元素。你可以修改下索引数字,来点击底部其余4个主菜单。

我们来试试,利用ui automator viewer给出的index的值来定位,发现有些定位不准,定位到我的模块是没问题的。

import osimport time
from appium import webdriverapk_path = os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))  # 获取当前项目的根路径desired_caps ={}
desired_caps['platformName'] = 'Android' #设备系统
desired_caps['platformVersion'] = '6.0.1' #设备系统版本
desired_caps['deviceName'] = 'KIW-AL10' #设备名称# 测试apk包的路径
desired_caps['app'] = apk_path + '\\app\\shoujibaidu.apk'
# 不需要每次都安装apk
desired_caps['noReset'] = True
# 应用程序的包名
desired_caps['appPackage'] = 'com.baidu.searchbox'
desired_caps['appActivity'] = 'com.baidu.searchbox.SplashActivity'driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)#启动app
time.sleep(3) #app启动后等待3秒,方便元素加载完成
# 根据元素xpath来定位
# 点击“我的”
driver.find_element_by_xpath("//*[@class='android.widget.FrameLayout' and @index='4']").click()
time.sleep(2)
# 点击“我的关注“
driver.find_element_by_xpath("//*[@class='android.widget.FrameLayout' and @index='3']").click()
time.sleep(2)
# 点击“麦克风“
driver.find_element_by_xpath("//*[@class='android.widget.FrameLayout' and @index='2']").click()
time.sleep(2)
# 点击““视频
driver.find_element_by_xpath("//*[@class='android.widget.FrameLayout' and @index='1']").click()
time.sleep(2)
# 点击“默认主页“
driver.find_element_by_xpath("//*[@class='android.widget.FrameLayout' and @index='0']").click()
time.sleep(2)

这样来回切换点击是运行不成功,如果每次只点击一个,发现点击麦克风的index是1,但是ui automator viewer给出的是index是2,这个地方是有问题的。

总结:

很多人都说xpath运行很慢,不建议使用,这个观点我基本同意,因为如果id class都定位不了,我们可以考虑用xpath来解决。

Appium基础篇9-元素定位之by_xpath相关推荐

  1. python+appium手机APP自动化基础篇3-找元素定位(anroid)

    1. 定位工具 前言,在环境搭建已经安装anroid-sdk,里面就自带有元素定位的工具.找到uiautomatorviewer.bat文件,位置在D:\android-sdk-windows\too ...

  2. Appium基础篇10-元素定位之by_accessibility_id

    本篇来介绍另外一种元素定位方式,叫by_accessibility_id,它是一个什么鬼呢?因为我们在UI Automator Viewer界面上并没有找到这个字段,我可以告诉你,这个对应的字段是co ...

  3. Appium基础篇5-抓元素工具之UI Automator Viewer

    在开始介绍元素定位之前,我们需要介绍一个工具,这个工具是Android SDK 自带的工具,叫UI Automator Viewer,可以在SDK\tools下找到这个工具并启动它,本篇,来介绍下这个 ...

  4. Appium基础篇11-元素操作之点击和输入

    本篇开始介绍元素操作,先来看看元素点击和元素输入行为.前面我们已经知道了元素点击的方法是click(),我们直接在前面代码基础上,用send_keys()方法给输入框输入文字.结果,我这边报错了. 1 ...

  5. Appium基础篇15-模拟手指点击tap方法

    本篇来学习下,appium中模拟手指点击方法,叫tap,有两个参数,元素位置和点击持续时间.一般语法是这样的tap((x1,y1),(x2,y2)],100), 我们通过手机百度中,利用tap方法来点 ...

  6. Appium 自动化测试 H5页面元素定位

    简介   在现在的移动端App中,由于开发效率.需求频繁变更的需求情况下,经常有相关的运营需求,经常要进行更新,如果全部采用原生开发,需要的成本比较高,后来就出现了内嵌的H5页面.那么这些H5页面元素 ...

  7. Appium基础篇16-appium截图方法

    这篇介绍一个截图方法,在自动化测试过程中,出现问题,自动截图是很有必要的.在appium中同样有好几种截图方法(其实就是selenium方法).我们这里介绍一个常用截图方法,该方法叫get_scree ...

  8. Appium基础篇14-上下左右滑屏操作swipe方法

    本篇来学习webdriver.py下一个滑屏操作,这个方法叫swipe,这个方法只是手机端appium的方法,不是selenium3的方法.在介绍滑屏操作之前,你需要了解如何得到屏幕的高和宽,因为每个 ...

  9. 开源EDR(OSSEC)基础篇- 01 -设计定位与能力输出

    前言 介绍OSSEC之前,不得不提到当前比较热门的技术EDR,近几年随着大数据SIEM系统的发展,EDR(端点威胁检测与响应)技术成为了安全界万众宠爱的骄子,广泛用于威胁检测.攻击溯源和响应处理的安全 ...

最新文章

  1. java旅游网站毕业论文,基于JAVA技术的旅游网站的开发.doc
  2. RCP中product文件的用法
  3. Android消息推送完美解决方案全析
  4. Redhat Linux网卡配置与绑定
  5. 使用object detection训练并识别自己的模型
  6. kong组件_Kong插件开发工具包
  7. Perfect Permutation
  8. 建议收藏 | 全面解析 50+条 SQL 语句性能优化策略
  9. 文科生能学懂python吗_文科生也能学得懂的Python入门视频
  10. Java基础-控制流程-5. 中断控制流程语句
  11. 在windows中用 netsh 命令修改ip地址网关和DNS等
  12. 【渝粤教育】国家开放大学2019年春季 3818-22T燃气工程施工 参考试题
  13. css中绝对定位和浮动的异同
  14. R 大数值型数据转换
  15. 阿里云oss 回调失败 203 Non-Authoritative Information
  16. 出国常用必备英语口语
  17. html编辑器的回车换行问题解决方案
  18. linux 内核更改,linux_kernel修改、编译、加载
  19. 奔驰S400商务型升级前排通风座椅系统,夏天必备的功能
  20. C#将ip地址转换成长整形数字的代码

热门文章

  1. 《网页制作与网站建设从入门到精通》答案
  2. 基于web的人才招聘信息系统的设计与实现
  3. 数据库日常管理常用sql脚本
  4. matlab实现sobel边缘检测图像,基于Sobel算子图像边缘检测的MATLAB实现
  5. java post xml数据_Java发HTTP POST请求(内容为xml格式)
  6. 装机联盟优略势分析,百度有钱装机联盟,360装机联盟
  7. SAP FICO 财务成本知识
  8. 怎么设置计算机桌面一键关机,Windows7电脑怎么设置自动关机?
  9. 马云:信用卡是为富人设计的,手机支付就是为穷人设计的
  10. 这可能是目前世界上最全的流媒体知识科普文章