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 ...
随机推荐
- 【JeeSite】角色和权限的修改
@RequiresPermissions("sys:role:edit") @RequestMapping(value = "save") public Str ...
- ORA-01950:对表空间 'USERS' 无权限
在存储数据时出现ORA-01950:对表空间 'USERS' 无权限 错误,解决如下: 找到对象Users下的用户名,然后点编辑,角色权限添加dba 在oracle创建了一个新的表空间和一个新的用户, ...
- ubuntu16.04
原来安装的14.04快捷键冲突,又改不过来,还有就是每次从新启动,桌面就恢复原来的状态了.然后突然有一天桌面没了,我一气之下,从新安装.装好16.04还是没有桌面,我也是醉了,还好解决了.应该是我的集 ...
- oracle快速添加用户及授权
--Oracle使用的是用户管理模式--意味着,Oracle的数据使用用户来分割 --以后开发,我们需要每个项目都需要使用一个用户 --所以:一个数据文件是可以放多个用户的数据的.但是我们开发从数据的 ...
- 混合应用开发:Phonegap VS AppCan
混合应用开发:Phonegap VS AppCan 简介 Phonegap PhoneGap是一个用基于HTML,CSS和JavaScript的,创建移动跨平台移动应用程序的快速开发平台.它使开发者能 ...
- Angularjs基础(九)
AngularJS 应用应用程序讲解 实例: <html ng-app="myNoteApp"> <head> <meat charset=" ...
- VUE插件整理
转自:https://blog.csdn.net/miaozhenzhong/article/details/80138174 1.VsCode官方插件地址: https://marketplace. ...
- JS中常见算法问题
JS中常见算法问题 1. 阐述JS中的变量提升(声明提前) 答:将所有的变量提升当当前作用域的顶部,赋值留在原地.意味着我们可以在某个变量声明前就使用该变量. 虽然JS会进行变量提升,但并不会执行真正 ...
- MySql Connector/C++8事务处理Demo
#include <iostream> #include <exception> #include <vector> #include <unistd.h&g ...
- Java分享笔记:RandomAccessFile流 & 在文件指定位置插入内容
RandomAccessFile流:随机存取文件流,该类定义了一个记录指针,通过移动指针可以访问文件的任意位置,且对文件既可以读也可以写.使用该类的write方法对文件写入时,实际上是一种覆盖效果,即 ...