python+Appium自动化:各种元素定位方法
name定位

driver.find_element_by_name('飞利浦净水').click()
测试结果报错:selenium.common.exceptions.InvalidSelectorException: Message: Locator Strategy 'name' is not supported for this session
一开始以为写错了,后面通过搜索资料才知道,name这个定位方法,appium从1.5版本后就已经抛弃了。。。
所以可以通过其他定位方式来完成。
classname定位

driver.find_element_by_class_name('android.widget.TextView').click()
这种定位方式也是有弊端的,如果当界面class元素是唯一的时候是可以用的,但是如果页面有多个class是一样的,这时候就可能只操作页面元素的第一个。
相对定位
先找到元素的父元素节点,再通过父元素进行元素定位
root_element=driver.find_element_by_id('id')
root_element.find_element_by_class_name('android.widget.TextView').click()
Xpath定位

通过id
driver.find_element_by_xpath('//*[@resource-id="com.taobao.taobao:id/home_searchedit"]').click()
通过text
driver.find_element_by_xpath('//*[@text="XXXX"]').click()
通过class,两种写法
driver.find_element_by_xpath('//android.widget.TextView’).click()
driver.find_element_by_xpath('//[class="android.widget.TextView"]').click()
通过组合
driver.find_element_by_xpath('//android.widget.TextView[@text="XXXX"]’).click()
driver.find_element_by_xpath('//*[@text="XXXX" and @index="num"]').click()
List定位
主要使用find_elements_by_XXX来获取一组相同class属性的元素,然后通过数组下标来控制的定位。

比如如上截图,定位到飞利浦标签的时候,有很多个相同的TextView,这时候可以这样来定位,先用xpath定位到此元素,再用数据
d=driver.find_elements_by_xpath('//android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.view.View/android.support.v7.widget.RecyclerView/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.TextView')
d[0].click() #定位到飞利浦净水
d[1].click() #定位到行李箱
UIautomator定位
是Android系统原生支持的定位方式,和xpath类似,且支持元素的所有属性定位,Appium元素定位也是基于Uiautomator进行封装的,so定位也是很强大。
使用到方法是find_element_by_android_uiautomator(),还有UiSelector()
定位搜索框为例子:
#id定位
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("com.taobao.taobao:id/home_searchedit")').click()
#text定位
driver.find_element_by_android_uiautomator('new UiSelector().text("超滤净水器 家用")').click()
#classname定位(如果有多个class元素则定位第一个)
driver.find_element_by_android_uiautomator('new UiSelector().className("android.widget.TextView")').click()
python+Appium自动化:各种元素定位方法的更多相关文章
- [python爬虫] Selenium常见元素定位方法和操作的学习介绍(转载)
转载地址:[python爬虫] Selenium常见元素定位方法和操作的学习介绍 一. 定位元素方法 官网地址:http://selenium-python.readthedocs.org/locat ...
- Python+Appium自动化测试(6)-元素等待方法与重新封装元素定位方法
在appium自动化测试脚本运行的过程中,因为网络不稳定.测试机或模拟器卡顿等原因,有时候会出现页面元素加载超时元素定位失败的情况,但实际这又不是bug,只是元素加载较慢,这个时候我们就会使用元素等待 ...
- 基于appium的常用元素定位方法
一.元素定位工具 app应用的元素使用的是控件定位,不同于web网页,web网页定位元素通常使用的是F12工具,那么在app当中我们则要借助其它的工具来辅助定位. 1.uiautomatorviewe ...
- python+appium 自动化2--元素定位uiautomatorviewer
出处:https://www.cnblogs.com/yoyoketang/p/6128741.html 前言: 可以打开手机上的app了,下一步元素定位uiautomatorviewer,通过定位到 ...
- Robotframework + Appium 之常用元素定位方法
任何自动化测试,其实手动测试也是一样的,元素定位(目标定位)是首要任务,这是最直接的测试对象呀! 好了,废话不多说,又到了元素定位啦,之前我们已经介绍过selenium及appium常用的定位方法,下 ...
- 关于UI自动化IOS元素定位方法说明
1. 元素属性介绍 下图是通过weditor定位的微博的"我的钱包",各属性如下图: className:元素类型,如:XCUIElementTypeButton isEnable ...
- python3+Appium自动化12-H5元素定位环境搭建
前言 在混合开发的App中,经常会有内嵌的H5页面.那么这些H5页面元素该如何进行定位操作呢? 针对这种场景直接使用前面所讲的方法来进行定位是行不通的,因为前面的都是基于Andriod原生控件进行元素 ...
- [python爬虫] Selenium常见元素定位方法和操作的学习介绍
这篇文章主要Selenium+Python自动测试或爬虫中的常见定位方法.鼠标操作.键盘操作介绍,希望该篇基础性文章对你有所帮助,如果有错误或不足之处,请海涵~同时CSDN总是屏蔽这篇文章,再加上最近 ...
- python ui自动化之元素定位和常用操作
做ui自动化的最基础的就是页面元素定位了,如果连页面元素都定位不到,自动化从何谈起呢?接下来我们就看看页面元素定位的方法吧!(这里就用百度页面来进行演示) 一.最通用的几种定位方式: 1.通过id定位 ...
- selenium python (二) 元素定位方法
定位的原则就是:id name class 优先,强烈建议和前端哥哥搞好关系.定位就不是问题:实在不行就xpath和css大部分偶可以定位到. webdriver定位的方法是通过一个By类,By类中有 ...
随机推荐
- centos超详细搭建jumpserver跳板机
一.官网 https://docs.jumpserver.org/zh/master/ 二.一站式.分布式安装文档 三.选择最新版 四.在线安装文档 五.按文档部署(4G.二核.50G硬盘) 六 ...
- rest_framework 学习笔记(一)
rest_framework [TOC] 简介 Django REST框架是一个功能强大且灵活的工具包,用于构建Web API. 官方网站:https://www.django-rest-framew ...
- 解析Health端点数据获取异常数据
问题: 由于健康节点响应类型是Health类,并且由于需要执行的健康状态类不固定,返回的类型数据的字段不是固定的,所以使用了@JsonAngGetter 注解,照成了解析这个JSON 结构非常不方便. ...
- 【VS开发】【编程开发】【C/C++开发】结构体中的数组与指针的内存分配情况说明
[VS开发][编程开发][C/C++开发]结构体中的数组与指针的内存分配情况说明 标签:[VS开发] [编程开发] 主要是疑惑在结构体定义的数组的内存空间与指针动态分配的内存空间,在地址上连续性.以及 ...
- 论文阅读 | Universal Adversarial Triggers for Attacking and Analyzing NLP
[code] [blog] 主要思想和贡献 以前,NLP中的对抗攻击一般都是针对特定输入的,那么他们对任意的输入是否有效呢? 本文搜索通用的对抗性触发器:与输入无关的令牌序列,当连接到来自数据集的任何 ...
- vue 事件中的 .native
vue组件添加事件@click.native native是什么? .native - 监听组件根元素的原生事件. 主要是给自定义的组件添加原生事件. 官网的解释: 你可能想在某个组件的根元素上监听一 ...
- IDEA中便捷更新Git项目最新代码
更新:IDEA中直接点击Gir后面的第一个图标 会出现一个这样的弹框,点击OK,就可以将GitLab中最新的代码更新到IDEA中(本地)
- apache tika检测文件是否损坏
Apache Tika用于文件类型检测和从各种格式的文件内容提取的库. 将上传文件至服务器,进行解析文件时,经常需要判断文件是否损坏.我们可以使用tika来检测文件是否损坏 maven引入如下: &l ...
- Python学习笔记:流程控制
单分支: if 条件: 满足条件后执行的代码 程序举例: leiyu=28if leiyu > 22: print("You can find girl friend..." ...
- 小白学习django第一站-环境配置
Django简单来说就是用Python开发的一个免费开源的Web框架 使用Django,使你能够以最小的代价构建和维护高质量的Web应用. 开搞!!! 工具准备: linux(ubuntu) + py ...