6.1 python+appium元素定位方式(登录app)
1.0.0 :常见的十种元素定位方式
.driver.find_element_by_id() #id定位
.driver.find_element_by_name() #name定位(已经凉了,不支持)
.driver.find_element_by_xpath() #xpath定位
.find_element_by_class_name #class_name定位
.driver.find_element_by_css_selector() #css定位
.driver.find_element_by_link_text() #link定位
.driver.find_element_by_tag_name() #tag定位
.driver.find_element_by_partial_link_text() #partial定位
.driver.find_element_by_accessibility_id() #accessibility_id定位
.driver.find_element_by_android_uiautomator() #原生定位
其中1、2、3、4、9、10这五种是用的最多的!本章介绍1.2.3.4,下章介绍9.10

下面来实例操作一边各种方式的定位技巧,启动app的脚本仍然是之前的脚本,我们接着操作(目前的内容没有使用unittest行为框架,后续会逐步加入框架,万丈高楼平地起,基础很重要!)
准备工作:
a. 之前的环境仍然是ok的
b. 手机链接电脑,adb devices,保证设备正常链接
c. 打开 uiautomatorviewer
d. 手机以及安装好了我们需要测试的app
e. 建议先注册一个账号,我们这里使用手机号码+密码登陆
(如果想使用手机号码+手机验证码完成登陆,后续会讲到)
1. id定位:driver.find_element_by_id()

脚本写了之后报错:An element could not be located on the page using the given search parameters ,通过给定参数没有找到元素—大概这个意思------这里是新同学最容易犯的一个错误,就是页面跳转是需要时间的,但是代码执行是很快的,这里没有找到元素是因为,在获取【收入手机号码】id时,手机页面还没有进入到登陆页面,所以在页面上找不到元素
所以记下笔记:几乎在所有页面跳转的时候,我们都需要判断页面是否正常跳转,否则会报错
所以在启动app的时候加一个隐性等待:driver.implicitly_wait(10)
这个东西是什么意思呢: 比如老王和小张吃完饭约好去按摩,小张说要去尿个尿,老王对小张说,就等你十秒,如果这十秒你还没有来,我就先去了,以后咱两绝交,如果这十秒内你来了,咱两就一起去,还是好朋友
放在这个页面上说,就是 如果app启动后,等待十秒,如果十秒后下一个页面没有加载出来,那就报错, 如果十秒内加载出来了就仍然可以正常执行!
但是呢这种隐性等待仍然有弊端,比如一个页面存在多个接口请求,部分元素使用的请求不一样,导致页面只加载一半,还是可能报错--(这里纯属个人理解,看看就好)一般我不太爱用这个,我个人比较喜欢显性等待!
那么我脚本叫上隐性等待,结果执行发现还是报错,

原因:app启动之后会出现一个中间加载页,他还是找不到元素!…所以报错! 如果我们在这里加上一个 强制等待:time.sleep(3) 等待三秒试一下或者用WebDriverWait获取登录界面元素进行显示等待!

结果发现通过id定位手机已经输入了 手机号码和密码!

2.name定位:driver.find_element_by_name() ——不支持

3.xpath 定位:driver.find_element_by_xpath()
a.绝对路径定位点击登录

driver.find_element_by_xpath('//android.widget.RelativeLayout/android.widget.RelativeLayout[2]/android.widget.Button').click()
#‘注意看上图三种颜色标示,记住xpath 索引是从1 开始!为什么第二个要取[2]android.widget.RelativeLayout[2],因为图中有两个android.widget.RelativeLayout ,
我们需要取第二个,所以就这样!
b.相对路径,这种的定位方式就比较多了!

#Xpath-text:实际上就是class+text的组合
#完整的text定位元素 ‘登录‘
driver.find_element_by_xpath('//android.widget.Button[@text="登录"]').click() #或者:
driver.find_element_by_xpath('//*[@text="登录"]').click()
#备注:整个页面 登录这个text是唯一 ,如果存在 【账号登录】 登录这个词汇仍然是唯一的!【*】在这里代表所有的class #关键词定位‘登‘或者’录‘
driver.find_element_by_xpath('//android.widget.Button[contains(@text,"登")]').click() #或者
driver.find_element_by_xpath('//*[contains(@text,"录")]').click()
#发现点击的不是我们想要的,所以关键字和全局搜索定位 不能不推荐同时使用,因为整个页面中是存在很多个【录】这个字的,所以全局加关键字可能定位不到 #xpath-id:
driver.find_element_by_xpath('//android.widget.Button[@resource-id="com.yce.deerstewardphone:id/btn_submit"]').click()
#备注:同样的道理,这样定位元素需要保证class(android.widget.Button)中,这个id是唯一的,不然他会取第一个id点击! #同理另一种写法全局定位:
driver.find_element_by_xpath('//*[@resource-id="com.yce.deerstewardphone:id/btn_submit"]').click() #xpath-index:
driver.find_element_by_xpath('//android.widget.Button[@index="2"]').click() #或者
driver.find_element_by_xpath('//*[@class="android.widget.Button" and @index="2"]').click() ##等等xpath定位方式,花里胡哨很多种,写多了自己就可以随手就来,到最后你会发现下面讲的这些你可能整个项目下来用的定位方式就那么几个! #class_name定位:find_element_by_class_name class唯一直接用就可以了,简单
driver.find_element_by_class_name('android.widget.Button').click()
py文件网盘地址:
链接:https://pan.baidu.com/s/1rSIJHmv2pwq2VSPChV5EIw 密码:9u4v
推荐搭建跟着教程敲,然后自己做笔记!
6.1 python+appium元素定位方式(登录app)的更多相关文章
- Python Appium 元素定位方法简单介绍
Python Appium 元素定位 常用的八种定位方法(与selenium通用) # id定位 driver.find_element_by_id() # name定位 driver.find_ ...
- APP 自动化之appium元素定位(三)
APP自动化测试关键环节--元素定位,以下我们来了解appium提供的元素定位方法! 1. id定位,id一个控件的唯一标识,由开发人员在项目中指定,如果一个元素有对应的resource-id,我们就 ...
- 技术分享 | app自动化测试(Android)--元素定位方式与隐式等待
原文链接 元素定位是 UI 自动化测试中最关键的一步,假如没有定位到元素,也就无法完成对页面的操作.那么在页面中如何定位到想要的元素,本小节讨论 Appium 元素定位方式. Appium的元素定位方 ...
- Appium自动化(10) - appium高级元素定位方式之 UI Automator API 的详解
如果你还想从头学起Appium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1693896.html 前言 前面介绍过根据id,clas ...
- 【python+selenium的web自动化】- 8种元素定位方式详解
我们在做WEB自动化时,最根本的就是操作页面上的各种元素,而操作的基础便是元素的定位,只有准确地定位到唯一元素才能进行后续的自动化控制,下面将对各种元素定位方式进行总结归纳. 说明:以下操作统 ...
- App自动化《元素定位方式、元素操作、混合应用、分层设计、代码方式执行Pytest 命令》
坚持原创输出,点击蓝字关注我吧 作者:清菡 博客:oschina.云+社区.知乎等各大平台都有. 目录 一.App 元素定位方式 二.元素操作 三.测试混合应用 四.以代码的方式执行 Pytest 命 ...
- 七 APPIUM Android 定位方式
1.定位元素应用元素 1.1通过id定位元素 Android里面定位的id一般为resrouce-id: 代码可以这样写: WebElement element = driver.findElem ...
- APPIUM Android 定位方式
原文地址https://www.cnblogs.com/sundalian/p/5629500.html 1.定位元素应用元素 1.1通过id定位元素 Android里面定位的id一般为resrouc ...
- 六 APPIUM Android 定位方式
文本转自:http://www.cnblogs.com/sundalian/p/5629500.html APPIUM Android 定位方式 1.定位元素应用元素 1.1通过id定位元素 An ...
随机推荐
- scope的四种作用域的使用
如何使用spring的作用域: <bean id="role" class="spring.chapter2.maryGame.Role" scope=& ...
- 【洛谷P1196】[NOI2002]银河英雄传说
银河英雄传说 题目链接 并查集时记录下以i为首的队列的长度(如果存在这个队列)num[i],便于合并, 和点i到队首的距离front[i],便于查询(在find时维护) #include<ios ...
- TIDB4 —— 三篇文章了解 TiDB 技术内幕 - 谈调度
原文地址:https://pingcap.com/blog-cn/tidb-internal-3/ 为什么要进行调度 先回忆一下第一篇文章提到的一些信息,TiKV 集群是 TiDB 数据库的分布式 K ...
- Hibernate学习第一天
Hibernate框架第一天 今天任务 1. 使用Hibernate框架完成对客户的增删改查的操作 教学导航 1. 能够说出Hibernate的执行流程 2. 能够独立使用Hibernate框架完成增 ...
- PP: 混合生产方式(MTO与MTS为例)(转)
http://blog.sina.com.cn/s/blog_4c01b7650100yf1d.html PP: 混合生产方式(MTO与MTS为例) 一.业务概览某公司生产的同一种产品正常情况下客户无 ...
- Oracle VM VirtualBox 安装XP、Win 7
测试要求 为了少写点lr脚本(其实是不会写),看到fiddler的saz格式文件可以由loadrunner 12读取,本机安装了lr 11,打算虚拟机安装lr 12.通过共享文件夹把文件传过去,生成脚 ...
- TcpServer 使用简介
1.简介 1) Poco 的 TcpServer 是一个多线程的 Tcp 服务器. 服务器使用 ServerSocket(Poco 的一个用于初始化服务器的socket的类) 来接收链接.Server ...
- mongodb导入全栈商城的goods和users数据
> show dbsshow dbsadmin 0.000GBconfig 0.000GBlocal 0.000GB> use dumalluse dumallswitched to db ...
- CentOS7.2中安装MongoDB
MongoDB是由C++编写的NoSQL的分布式文件数据库,用的json格式的k-value存储方式. MongoDB官网 https://www.mongodb.com 一.下载和安装 下载完后文件 ...
- MySQL5.7版本安装
安装方式一: ZIP压缩包安装 >>>首先,到MYSQL官网下载.zip格式的MySQL Server的压缩包,根据需要选择x86或x64版. >>>下载需要登录o ...