Appium(四)常用的8种元素定位方式之 xpath、List、UIAutomator 定位
接上一篇:https://blog.csdn.net/xiao66guo/article/details/98736536
5、xpath 定位
xpath 定位其实就是一中路径定位方式,它主要是依赖于元素的绝对路径或者一些相关属性来进行定位的,但是绝对路径 xpath 的执行效率比较低(尤其是当元素路径比较深的时候),一般使用的比较少。通常使用的是 xpath 的相对路径和属性定位。
在xpath中,有 7 中类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档节点(或成为根节点)。
5.1 xpath 的路径表达式
表达式 | 描述 |
/ | 从根节点选取 |
// | 从匹配选择的当前节点选择文档中的节点,而不用考虑它们的位置 |
. | 选取当前节点 |
.. | 选取当前节点的父节点 |
nodename | 选取此节点的所有子节点 |
@ | 选取属性 |
5.2 xpath 通配符
通配符 | 描述 |
* | 匹配任何元素节点 |
@* | 匹配任何属性节点 |
node() | 匹配任何类型的节点 |
5.3 xpath 语法参考
5.4 xpath 案例:
使用 xpath 定位元素来进行登录操作
[code]from capability import * driver.find_element_by_xpath('//android.widget.EditText[@text="手机号/email"]').clear() driver.find_element_by_xpath('//android.widget.EditText[@text="手机号/email"]').send_keys('手机号/邮箱') driver.find_element_by_xpath('//*[@class="android.widget.EditText" and @index="1"]').send_keys('密码') driver.find_element_by_xpath('//*[@class="android.widget.CheckBox"]').click() driver.find_element_by_xpath('//*[@class="android.widget.TextView" and @index="2"]').click()
6、List 定位
List 定位首先是使用 find_elements_by_XX 来获取一组相同的class属性的元素,而后在使用数组下标来区分表级不同元素进行相关的操作。
-
List 定位综合案例
启动 豌豆荚app ,进入登录页面输入用户名和密码后进行用户头像更新
- 测试场景
- 启动豌豆荚app
- 点击左上角主菜单导航—>管理—>右上角 设置
- 点击登录,进入到登录页面
- 输入用户名、密码并点击页面下方同意复选框,点击登录
- 点击头像—>账号管理—>再次点击头像—>修改个人资料
- 点击头像—>选择 从图库中选择—>进入图库—>选择头像
- 点击保存按钮进行保存操作
- wdj_list.py
[code]// capability 的文件内容可以看上一篇文章哈 from capability import driver // 登录 def login(): // 点击左上角的主菜单导航按钮 driver.find_element_by_id('com.wandoujia.phoenix2:id/w4').click() driver.implicitly_wait(1) // 点击 driver.find_element_by_id('com.wandoujia.phoenix2:id/pp_item_setting').click() // 点击又上角的设置按钮 driver.find_element_by_id('com.wandoujia.phoenix2:id/ow').click() // xpath 定位 driver.find_element_by_id('com.wandoujia.phoenix2:id/l_').clear() driver.find_element_by_xpath('//android.widget.EditText[@text="手机号/email"]').send_keys('2932104943@qq.com') driver.find_element_by_xpath('//*[@class="android.widget.EditText" and @index="1"]').send_keys('2932104943qq') driver.find_element_by_xpath('//*[@class="android.widget.CheckBox"]').click() driver.find_element_by_xpath('//*[@class="android.widget.TextView" and @index="2"]').click() // 更换头像 def revise_user_photo(): // 点击头像——>账号管理 driver.find_element_by_id("com.wandoujia.phoenix2:id/nr").click() // 点击头像——>修改个人资料 driver.find_element_by_id("com.wandoujia.phoenix2:id/ll").click() // 点击头像——>选择头像列表 driver.find_element_by_id("com.wandoujia.phoenix2:id/ll").click() // 点击从图片库中选择 driver.find_element_by_xpath('//*[@class="android.widget.TextView" and @index="1"]').click() /* 在图库中选择图片 List定位: 一定注意,这里选择是的 find_elements_by_id ,element 后面有一个 s 代表有多个的意思 */ items_list = driver.find_elements_by_id('com.android.documentsui:id/icon_thumb') items_list[0].click() driver.implicitly_wait(1) // 点击保存 driver.find_element_by_class_name('android.widget.Button').click() if __name__ == '__main__': login() revise_user_photo()
-
List 定位综合案例效果图
-
遇到的问题
[code]selenium.common.exceptions.NoSuchElementException: Message: An element could not be located on the page using the given search parameters. # 解决方法,就是检查下元素的 id 值有没有写错
7、UIAutomator 定位
UIAutomator 元素定位就是 Android 系统原生的定位方式,看起来和 xpath 很类似,但比起它更加好用,且还支持元素全部属性定位,它的这个定位是通过 Android 自带的 Android uiatuomator 的类库去查找元素的。Appium 元素定位的方法其实也是基于 UIAutomator 来进行封装的。
使用的方法: find_element_by_android_uiautomator() 可以运用UIAutomator 元素定位。
-
UIAutomator 定位的方式:
- id 定位
- text 定位
- class name 定位
① id 定位:是根据元素的 resource-id 属性来进行定位的,使用 UiSelector().resourceId() 这个方法即可实现
[code]from capability import * /* 使用UIAutomator中的 id 定位方式 */ driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.wandoujia.phoenix2:id/w5")').click() driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.wandoujia.phoenix2:id/pp_item_setting")').click() driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.wandoujia.phoenix2:id/ow")').click()
② text 定位:是根据元素的 text 属性值来进行定位的,使用 new UiSelector() 即可实现
[code]/* 使用UIAutomator中的 id 定位方式,先清除输入框中内容 */ driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.wandoujia.phoenix2:id/l_")').clear() /* 使用UIAutomator中的 text 定位方式 */ driver.find_element_by_android_uiautomator('new UiSelector().text("手机号/email")').send_keys('手机号或者邮箱')
③ class name 定位:与 Appium class 定位方式一样,都是根据元素的 class 属性值来进行定位的
[code]driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.wandoujia.phoenix2:id/la")').send_keys('2932104943qq') /* 使用UIAutomator中的 class name 定位方式 */ driver.find_element_by_android_uiautomator('new UiSelector().className("android.widget.CheckBox")').click() driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.wandoujia.phoenix2:id/mf")').click()
8、H5元素定位需要等下哈
- 点赞 2
- 收藏
- 分享
- 文章举报
- 5-appium定位元素5种常用方式
- 常用的8种定位元素的方式
- appium 常用5种元素定位方式
- Selenium Webdriver元素定位的八种常用方式
- Appium基础篇9-元素定位之by_xpath
- Selenium Webdriver元素定位的八种常用方式
- Selenium3+webdriver学习笔记3(xpath方式元素定位)
- 【appium】根据UIAutomator定位元素等等资料
- Selenium Webdriver元素定位的八种常用方式
- Selenium Webdriver元素定位的八种常用方式
- Selenium Webdriver元素定位的八种常用方式
- Selenium Webdriver元素定位的八种常用方式
- Appium基础篇9-元素定位之by_xpath
- Selenium Webdriver元素定位的八种常用方式
- Selenium Webdriver元素定位的八种常用方式
- Appium 关于 appium 的原生控件的 xpath 定位问题及常用方法
- XPath常用定位节点元素语句总结
- Selenium Webdriver元素定位的八种常用方式
- Selenium Webdriver元素定位的八种常用方式
- appium -- Xpath定位元素