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 ...
随机推荐
- application配置和profile隔离配置
前言 github: https://github.com/vergilyn/SpringBootDemo 说明:我代码的结构是用profile来区分/激活要加载的配置,从而在一个project中写各 ...
- Android onMeasure 方法的测量规范MeasureSpec
一个MeasureSpec封装了父布局传递给子布局的布局要求,每个MeasureSpec代表了一组宽度和高度的要求.一个MeasureSpec由大小和模式组成.它有三种模式:UNSPECIFIED(未 ...
- php中的变量作用域
<?php include_once $_SERVER['DOCUMENT_ROOT'].'/includes/db.inc.php'; function totalJokes() { try{ ...
- input上传图片并显示
html: <div id="click"><img> </div><!--照片预览的div --> <div class=& ...
- App 分辨率相关 - iOS
针对现有 Apple 设备分辨率小归总,方便日常查看; 顺便推荐一款图片生成工具,个人感觉挺方便好用,放置一张高分辨率大图可自动生成一套配图,软件名称(App Icon Gear). 具体设备分辨率如 ...
- #leetcode刷题之路29- 两数相除
给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符.返回被除数 dividend 除以除数 divisor 得到的商. 示例 1:输入: ...
- 商城项目:商品列表ajax加载,ajax加入购物车--五张表的联合查询
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ProductLists.a ...
- ruby 数据类型Symbol
一.符号创建 符号是Symbol类的实例,使用冒号加一个标识符即可创建符号 :a :"This is a symno" 二.符号字符串相互转换 p :symbol.to_s #=& ...
- Linux命令备忘录:mount用于加载文件系统到指定的加载点
mount命令用于加载文件系统到指定的加载点.此命令的最常用于挂载cdrom,使我们可以访问cdrom中的数据,因为你将光盘插入cdrom中,Linux并不会自动挂载,必须使用Linux mount命 ...
- ESP32 学习笔记 - 环境搭建
打开终端 输入命令 sudo apt-get install gcc git wget make libncurses-dev flex bison gperf python python-seria ...