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)的更多相关文章

  1. Python Appium 元素定位方法简单介绍

    Python  Appium  元素定位 常用的八种定位方法(与selenium通用) # id定位 driver.find_element_by_id() # name定位 driver.find_ ...

  2. APP 自动化之appium元素定位(三)

    APP自动化测试关键环节--元素定位,以下我们来了解appium提供的元素定位方法! 1. id定位,id一个控件的唯一标识,由开发人员在项目中指定,如果一个元素有对应的resource-id,我们就 ...

  3. 技术分享 | app自动化测试(Android)--元素定位方式与隐式等待

    原文链接 元素定位是 UI 自动化测试中最关键的一步,假如没有定位到元素,也就无法完成对页面的操作.那么在页面中如何定位到想要的元素,本小节讨论 Appium 元素定位方式. Appium的元素定位方 ...

  4. Appium自动化(10) - appium高级元素定位方式之 UI Automator API 的详解

    如果你还想从头学起Appium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1693896.html 前言 前面介绍过根据id,clas ...

  5. 【python+selenium的web自动化】- 8种元素定位方式详解

    ​ 我们在做WEB自动化时,最根本的就是操作页面上的各种元素,而操作的基础便是元素的定位,只有准确地定位到唯一元素才能进行后续的自动化控制,下面将对各种元素定位方式进行总结归纳. ​ 说明:以下操作统 ...

  6. App自动化《元素定位方式、元素操作、混合应用、分层设计、代码方式执行Pytest 命令》

    坚持原创输出,点击蓝字关注我吧 作者:清菡 博客:oschina.云+社区.知乎等各大平台都有. 目录 一.App 元素定位方式 二.元素操作 三.测试混合应用 四.以代码的方式执行 Pytest 命 ...

  7. 七 APPIUM Android 定位方式

    1.定位元素应用元素   1.1通过id定位元素 Android里面定位的id一般为resrouce-id: 代码可以这样写: WebElement element = driver.findElem ...

  8. APPIUM Android 定位方式

    原文地址https://www.cnblogs.com/sundalian/p/5629500.html 1.定位元素应用元素 1.1通过id定位元素 Android里面定位的id一般为resrouc ...

  9. 六 APPIUM Android 定位方式

    文本转自:http://www.cnblogs.com/sundalian/p/5629500.html APPIUM Android 定位方式   1.定位元素应用元素 1.1通过id定位元素 An ...

随机推荐

  1. 【转】一看你就懂,超详细java中的ClassLoader详解

    http://blog.csdn.net/briblue/article/details/54973413 ClassLoader翻译过来就是类加载器,普通的java开发者其实用到的不多,但对于某些框 ...

  2. qbxt Day3 其余题

    例题1 noiopenjudge9277 给出在最底层的木头的个数,问有多少种堆放木头的方式,当然你的堆放方式不能让木头掉下来. 在堆放的时候木头必须互相挨着在一起. 设dp[i]表示多少个log(原 ...

  3. Python程序的执行原理(转)

    1. 过程概述 Python先把代码(.py文件)编译成字节码,交给字节码虚拟机,然后虚拟机一条一条执行字节码指令,从而完成程序的执行. 2. 字节码 字节码在Python虚拟机程序里对应的是PyCo ...

  4. Centos安装VMware

    转载:http://www.mamicode.com/info-detail-2171464.html

  5. C#基础 一(方法详解)

    需要知道:类和方法的关系 方法和参数修饰符 自定义方法可以有或没有参数,也可以有或没有返回值.可以被各种关键字(static.virtual.public.new等)修饰以限制其行为. C#参数修饰符 ...

  6. ABAP术语-Database Rollback

    Database Rollback 原文:http://www.cnblogs.com/qiangsheng/archive/2008/01/24/1051238.html Operation tha ...

  7. DbUtils: JDBC Utility Component Examples翻译

    DbUtils:JDBC实用组件实例 这一页提供了一些展示如何使用DbUtils的示例. 基本用法 DbUtils是一个非常小的类库,因此浏览完所有类的javadoc不会花费很长时间.DbUtils的 ...

  8. sencha inspector(调试工具)

    Sencha Inspector 一:安装sencha inspector 使用Sencha Inspector下载Ext JS试用版(可在此处获得). 下载后,双击下载的文件以启动安装程序,然后按照 ...

  9. 使用docker安装和运行常用的数据库和中间件

    mysql: docker pull mysql: docker run --name mysql -p : -v /usr/share/zoneinfo/Asia/Shanghai:/etc/loc ...

  10. Linux 用户 和 组 快速了解

    1用户 (Linux中“只有超级管理员”才有权限操作 用户 和组) 1.1添加用户 useradd 命令 例如 :useradd hly //添加了一个新账户 hly 用户添加后 会存放在一个文件中, ...