python+Appium自动化测试应用教程及实例(APP测试)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

篇1 安卓app自动化测试-appium环境篇
1.1概要
本篇主旨是介绍安卓app自动化测试,就不在这里扯些无关的废话,有机会再在以后的文章中慢慢阐述一些理论的东西。

有关智能机(Android/IOS)上app的自动化测试原理一句话:通过python脚本利用appium第三方库实现。

(另:多说一句,其他语言或其他工具同样能够做,这里不做优劣,好坏评判。

我讲的是python)我后面一系列的文章都会有个主基调—实战为主。

1.2 环境篇—环境准备
操作系统windows10 64位,本篇只涉及windows的环境安装,至于MAC的系统会在以后的文章中涉及(毕竟你想要做ios的app自动化测试必须要在苹果机上装环境,而MAC 的环境安装可以说是噩梦!)所以大家在准备环境时,一定要看清楚自己的电脑是64位还是32位,因为有些软件的安装要按照自身的系统选择版本!涉及到时候我会提醒大家。

准备及安装步骤:
python的安装
有关python的安装(已经有环境的筒子略过),目前可供选择的版本Python
3.6.0 - Python 2.7.13。

简单说2.7比较成熟老套,3.0以后就是比较时尚。

至于
选择安装哪个版本自行决断。

我的是2.7 的版本。

提醒:python的安装是傻瓜式的,一步步next就好,别瞎去改安装路径,最后
记得勾选配置环境变量(也就是说安装的时候就自动把环境变量给你配置好,
省的自己再去配置)
完成安装后,运行—cmd—输入python
看到这个没报错,显示以上信息表示python的运行环境ok了。

简单点输入
print 1+1回车,结果应该是命令窗返回2
(1)node.js的安装
从这里开始就是有关appium运行环境的准备了。

第一步安装node.js。

提醒:注意!!!下载对应自己操作系统的版本
鉴于我的操作系统是win10 64位,所以我下载的是第一个条目的64-bit的版本。

安装过程无需赘述。

安装完成后,同样的在运行—cmd—输入npm -v
显示以上内容表示node也装好了!
(2).NET Framework 4.5的安装
提醒:去官网下载最新的就是了,目前是4.5。

(3)AppiumForWindows的安装
这个就是我们的主角了,appium真身
这个是安装好后的运行起来的模样。

提醒:选择windows版本,如AppiumForWindows_1_4_16_1.zip这个目前是最新版本了。

解压后直接运行appium-installer.exe安装即可。

具体的操作方法在后面的章节再提及。

(4)JDK的安装
由于本章是介绍安卓的自动化实现,当然缺少不了安卓环境的准备。

提醒:我下载的是jre-8u111-windows-x64.exe,windows 64位版本。

安装即可。

完成后就是在系统环境变量中将java的环境变量并添加到CLASSPATH中具体操作步骤:
1.
新建JAVA_HOME
路径为C:\Program Files (x86)\Java\jdk1.6.0_39
2.
在CLASSPATH 变量中加入路径
;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
3.
在Path 变量中加入路径
%JAVA_HOME%\bin 和%JAVA_HOME%\jre\bin
安装配置完成后,运行—cmd—输入java –version。

有版本返回表示java环境ok了。

(5)Android SDK的安装
由于大家都懂的原因国内是无法直接访问google的链接地址,所以不能直接在
google的官方链接下载(怀念流畅用google的年代)
提醒:上面的链接是国内的一个android开发者网站,在里边可以找到Android SDK Tools的安装包。

下载安装windows版本即可。

同样环境变量要配置一下。

具体操作步骤:
1.
新建ANDROID_HOME
路径为C:\Program Files (x86)\Android\android-sdk\
2.
在Path 变量中加入路径
%ANDROID_HOME%\platform-tools 和%ANDROID_HOME%\tools
(6)SDK Platform-Tools的安装
在上面提供的网站里,接下来就是下载相应需要的文件
SDK Platform-Tools,build-tools下载下来后放到我们的sdk文件夹下面。

首先
我们先看一下我们的sdk路径下的文件结构(因为这块还是需要仔细点的)。

保证你的环境中如此一致,最后单说platforms这个文件夹,这是Android开发所需的sdk,按道理我们是可以点开SDK Manager.exe直接去下载需要的sdk 版本,单都懂的原因,此路不通。

所以可以直接在网站中直接下载一个对应的sdk版本并解压放到platforms文件夹下,我下载的是android-4.2.2。

在本步骤中涉及到的所有操作都可以在提供的网站里找到,注意!
(7)Appium Client的安装
筒子们革命成功最后一步,回到我们的python开发环境了,就是安装我们的Appium Client。

这里推荐去官网下载安装,如果你在运行环境去通过pip2 install Appium-Python-Client命令直接安装,本身来说是最方便,简单的。

但是由于网络的原因经常会下载报错。

提醒:我下载的是Appium-Python-Client-0.23.tar.gz。

最新0.24了。

解压后,
在命令行中输入pip2 install 文件解压路径setup回车。

如果遇到报错可自行在
网上查找python tar包的安装方法!
1.3 环境篇—结束
至此,我们的测试环境就安装完了。

这一篇的环境篇也就要结束了。

下一篇,我们将从appium的相关配置谈起,到连接真机,最后实现一个python小demo。

最后放个卫星,appium的自动化测试文章结束后,还会着手selenium在web端的文章。

环境准备是个引子,很多时候大家就败在这里,而真正重要的还是脚本代码的编写,如何构思一个自动化的测试框架。

篇2 安卓app自动化测试-初识python调用appium
1.1概要
本篇就类似于编程的第一课HelloWorld。

如何用python连接到appium,实现在手机上对app的操作呢?一切还是以实战为主,今天我将对今日头条这个app做样例,实现一个demo。

1.2 真机连接
在我们的环境准备好后,此刻电脑桌面必有一个Appium的程序图标吧,先别着急点开,欲速则不达。

由于是在真机上操作,当然要先把我们的手机准备好吧,啥?你的是苹果机,那你可以有多远那啥多远了。

好了手机准备好将其与电脑连上,至于什么打开开发模式之类blabla的话我就不多说了。

连接好之后运行-cmd,输入命令adb devices回车(adb后面有空格)
结果返回如上,有一串数字字母混合的设备编号,表示手机连接正常,然后把这串编号复制一下后面会用到。

1.3 Appium配置连接
将真机成功连上电脑后,打开我们桌面的Appium,如下图
没有什么多余的配置,保持默认就好。

如点开齿轮图标,进到设置界面,检查Server Address 的地址是127.0.0.1 Port端口为4723(这些都是默认的)。

然后点开android机器人图标,这里需要我们设置的内容也不多,看到Capabilities里4个配置项里Platform Name:Android;Automation Name : Appium;PlatformVersion:选择之前我们下载的sdk版本是几点几的,上一篇我们下载的是4.2的这里就选4.2就好了。

不过我这里选了4.4(貌似不影响运行)。

最后是Device Name填写的就是我们刚才通过adb devices命令得到的设备id号。

其他的配置项忽略!
这些配置好后,点击界面右上角的三角运行图标,等待服务调起来,如下图。

如果环境安装的有问题会报错,或在后面的python脚本运行后会报错,对于具体的报错要看具体的报错信息是什么。

Ok步骤到这里,就要开始我们的python脚本编写了。

打开我们的python脚本,我用的是PyCharm。

1.4 第一个python脚本
新建python脚本文件后,这里也可以提前把我们要测试的app准备好了。

今天我们用今日头条这款app做讲解。

虽然我们可以用python脚本直接安装app,但其实在实战里边我们更多的是调取已经安装好的app进行测试(一切以实战为主),当然文章中我会提及在
脚本中如何安装app这样的方法。

好,运行-cmd 输入adb install app所在目录(手机没断开与电脑的连接吧,用adb devices检查一下)。

提醒一下在win10操作系统下,不用手动去打apk的路径,直接将文件拖到窗口里就行了。

回车安装apk
等待安装的过程,我们打开python脚本,脚本内容如下:
# -*-coding:utf8-*-
from appium import webdriver
device='4d0041b1be98b01f' #此处设备号
pack='com.ss.android.article.news' #此处是我们app的package名称
activity='com.ss.android.article.news.activity.SplashActivity'#此处是我们的app的主activity #下面的按照我的脚本内容填写即可,里边内容的意思也很清晰吧
PATH=lambda p:os.path.abspath(os.path.join(os.path.dirname(__file__),p))
desired_caps={}
desired_caps['device'] = 'android'
desired_caps['platformName']='Android'
desired_caps['browserName']=''
desired_caps['Version']='4.4.4'
desired_caps['deviceName']=device
#desired_caps['app']=PATH('D:\\jr.apk')
desired_caps['appPackage'] = pack
desired_caps['appActivity'] = activity
driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)
接下来重点讲讲我们脚本里几个参数的意思,pack和activity注释里也说了各自的含义,这里主要讲讲如何找到某个app的package和activity的名称。

方法有很多,我这里介绍一种相对来说简单容易的,找到我们下载的app的安装包如:jinritoutiao_605.apk,将后缀改成rar压缩文件,然后右键点击打开,找到里边的AndroidManifest.xml文件,点击rar工具的查看按钮,将其打开,然后搜索‘manifest’,紧跟其后的就是我们要用的package名称,搜索‘activity’,同样紧跟其后的就是我们的activity名称。

当然其他的查找方法比如,在运行里adb logcat在日志里去查找(相对麻烦)。

或者暴力点找开发人员去问,当然只适合自己公司的产品。

毕竟求人不如求己。

接下来替换脚本里你找到的要测试app的package和activity,就可以直接运行我们的脚本文件了。

提醒一下,手机要连上电脑,Appium程序要是运行状态,前面的操作提到了。

脚本运行起来后,如果程序,环境都正常手机上会将今日头条启动起来,我们的脚本内容也就是到此为止,因为脚本中没有加任何操作,只是到启动app。

如果有报错,查看Appium 里的日志,分析报错原因。

好了,脚本运行成功后可以查看我们的手机界面,会多了两个程序,Appium Settings和Unlock。

不用管他们,也不要不明所以紧张的删掉这两个程序。

讲到这里虽然我们没有在脚本里做任何操作,但是我们离app的自动化测试已经很近了,可以说走过了很大很大的一步。

Give me five,祝贺一下!好了回到我们的脚本里,上文提到了如何将app安装在手机上并通过python脚本将其打开的方法,那么如何在手机上通过脚本直接安装一个app呢?看到脚本里注释掉的那句吧“#desired_caps['app']=PATH('D:\\jr.apk')”Path里放置apk的安装包,这句话就是执行直接安装apk。

写到这里本文也差不多了,不过我们的python的demo还没完,毕竟还要去在app上操作点啥才算完美吧。

首先啰嗦几句,python在实现操作点击我们手机上的app都是通过操作app界面上的各个元素,所以第一步当然是怎么找到界面上的元素的问题了。

导入appium的webdriver给我提供了比较丰富的查找元素的方法,下一篇我们再具体讲解这些
方法及使用。

今天我们只实现一个小demo,首先观察一下今日头条的主界面,我们可以做
哪些事情呢?比如说切换标题到热点,然后再点击搜索框进入搜索页面,输入搜索文字,点击搜索按钮,等待搜索结果,直接运行如下脚本。

# -*-coding:utf8-*-
from appium import webdriver
from time import sleep
device='4d0041b1be98b01f' #此处设备号
pack='com.ss.android.article.news' #此处是我们app的package名称
activity='com.ss.android.article.news.activity.SplashActivity'#此处是我们的app的主activity #下面的按照我的脚本内容填写即可,里边内容的意思也很清晰吧
PATH=lambda p:os.path.abspath(os.path.join(os.path.dirname(__file__),p))
desired_caps={}
desired_caps['device'] = 'android'
desired_caps['platformName']='Android'
desired_caps['browserName']=''
desired_caps['Version']='4.4.4'
desired_caps['deviceName']=device
#desired_caps['app']=PATH('D:\\jr.apk')
desired_caps['appPackage'] = pack
desired_caps['appActivity'] = activity
driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)
while 1:
if driver.current_activity=='.activity.MainActivity':
break
els=driver.find_elements_by_id('el')
news_t1=els[0].text
print 'news1_title:',news_t1
els=driver.find_elements_by_id('p_')
els[1].click()
while 1:
els=driver.find_elements_by_id('el')
news_t2=els[0].text
print 'news2_title:',news_t2
if news_t2!=news_t1:
break
driver.find_element_by_id('ab0').click()
while 1:
if driver.current_activity=='com.ss.android.article.base.feature.search.SearchActivity': break
driver.find_element_by_id('ll').send_keys('lamecho')
driver.find_element_by_id('o9').click()
sleep(10)
driver.quit()
怎么样运行效果和我们前面说的操作步骤应该是一致的吧!
至此,我们的app自动化第二篇也要结束了。

最后的小demo也体现了python实现自动化运行app的基本逻辑,大家如果在本篇按照我的操作一路走下来也算是在自动化测试上入门了。

下一篇,我们将展开app元素这块,可能理论会更多,从如何查找定位元素,到脚本如何实现预设的执行步骤谈起,中间也会穿插一些我的心得体会,让大家对python 在实现自动化测试这块少走一些弯路。

最后感谢大家耐心读完本篇文章,我是lamecho,辣么丑。

篇3 安卓app自动化测试-搞定界面元素
1.1概要
本篇将对和界面元素相关的内容做讲解,比如,查找元素的几种常见方法,上一篇我们看到的driver.find_elements_by_id('el')就属于一种;还将介绍如何查看app界面上的元素去做定位,最后还将新手经常遇到的问题做个简单的回答。

1.2 查找app界面元素的工具
我们先来看看如何找到app界面上的元素,以及它有哪些特点需要我们关注的。

首先进入我们的android的sdk文件夹,目录为C:\Program Files (x86)\Android\android-sdk\tools 在tools文件夹下有个uiautomatorviewer.bat批处理文件,点开会运行一个叫UI Automator Viewer的工具。

如图
接下来将我们的手机连接上电脑,启动手机的app,这里我们继续以今题头条为例子,打开今日头条,然后点击工具左上角的绿色手机图标,等待几秒,结果会出现下图的样子
当我们的鼠标点击到‘推荐’上时,看右侧的信息。

主要关注resource-id,class这两个标识内容将会是我们后面在脚本里定位元素的主要信息。

大家可以先自己熟悉一下这个工具,鼠标在不同的元素上切换看看效果。

还记得我们在上一篇脚本中的操作步骤吗?第一步是点击我们的‘热点’按钮将app显示内容切换到热点板块,而脚本里是这样实现的
els=driver.find_elements_by_id('p_')
els[1].click()
大家看一下我们‘热点’按键的resource-id是什么,同样也是com.ss.android.article.news:id/p_和‘推荐’的id一样,同理后面并排的一系列id都是一样的。

如果简单来说,我们找到了元素并获取到元素的id后,我们在脚本里只需要这样写就好了
driver.find_element_by_id('p_')
如果要操作点击
driver.find_element_by_id('p_').click()
但是,我们的实战碰到的情况是什么呢,今日头条的顶部各个模块的元素id都是一样的,这样我们就要根据这个情况,去找id都是'p_'的一个集合,当然集合里的第一个元素就是我们的‘推荐’模块,第二个元素就是‘热点’模块,以此类推。

所以我们的脚本就要这样去写了els=driver.find_elements_by_id('p_') #通过find_elements_by_id注意是加s的
els[1].click()#对els集合的第二个元素进行点击操作。

1.3 python中查找元素的方法
工欲善其事必先利其器,这里先推荐大家一个好用的IDE—PyCharm。

它的智能补全代码功能非常好用,如下图
好了接下来我们来看看appium几个常用的找元素的方法:
1. find_element_by_id() / find_elements_by_id()
2. find_element_by_class_name() / find_elements_by_class_name()
你没看错,不是我漏写了,就这两种。

有些童鞋可能要问了,find开头的方法不是有很多吗?是啊从上面的截图也能看出来,什么by_tag_name、by_name、by_xpath,by_blabla…。

我在这里强调的是常用,好用,实战里用到出现频率最多的就是这两种了。

当然在我的下个系列里(学习selenium文章),在web端查找页面元素的方法就会丰富许多。

前面提到的UI Automator Viewer让大家注意的两个地方就是id和class了。

在平时在做培训时,经常会遇到这样的问题,很多人会觉得的找元素好难。

当每次结束培训后大家会了解难得不是找元素,而是怎么通过编程的思路去在合适的时间找到对应的元素。

因为find方法是死的,就这几种,为什么别人能找到而我找不到?其实这里展现的问题就是很多人忽略掉的问题本质,你要找的页面元素在你的程序执行所在的界面位置吗?
举个简单的例子,来阐述这个问题的含义:比如app的操作是在点击某个界面的一个元素A后进入下一个界面,我们要对下一个界面的某个元素B再进行点击操作。

这时我们的脚本可能是这样写的
driver.find_element_by_id(A).click()
driver.find_element_by_id(B).click()
大家来看看,这样写我们在执行python脚本后会顺利执行吗?答案只有一个Maybe。

也许可能不会出错,但多数情况下会报错,返回无法找到元素B。

这时看出原因的童鞋就要说了在driver.find_element_by_id(B).click()加上一句driver.implicitly_wait(10)或是sleep,脚本就变成这样
driver.find_element_by_id(A).click()
driver.implicitly_wait(10)
driver.find_element_by_id(B).click()
好了,这里先解释一下driver.implicitly_wait(10)这句的含义(给初识的筒子普及一下)这句的含义是程序等待,等待什么呢?就是等待它的下一句里要找的元素B,直到B被找到为止,当然要加一个期限一万年,呵呵开句玩笑,直到10秒超时。

也就是说在10秒内什么时候B出现了程序就会开始继续往下执行。

当然这里的超时时间可以任意指定,一般我们指定在10秒是个比较适合的时间。

它被称作“智能等待”,思维活络的童鞋可能就要问了,难道还有非智能的等待吗?当然有了,那就是我们的time.sleep()方法,在import 我们的time包后,time.sleep(10)就是实实在在的让程序等上10秒才继续往下执行代码。

好,
到这里说出智能等待的童鞋脸上会露出得意的笑啊,得意的笑…我这时也要问了这样写我们在执行python脚本后会顺利执行吗?答案也只有一个,可以,肯定,必须能顺利执行。

但是这里要反转了,虽然脚本能够顺利执行,但是最后执行的结果一定是我们想的哪样吗?答案只有一个Maybe。

为什么?Why?我们不是做了等待吗,脚本不是也顺利找到B元素了吗?好了公布答案,回到我们的app里,两个界面,A元素在前一个界面,B元素在下一个界面,我们脚本里通过id找到了B,那如果说A元素所在的界面也有一个和B元素同样id 的元素呢?最后我们脚本的执行结果就是在第一个界面点击A后紧接着又点击了当前界面的另一个“B”元素。

大家仔细回味一下这个情况,而且此情况会在实战里经常碰到。

好了回过头我们看看上一篇我们的那个对今日头条的操作的demo
driver.find_element_by_id('ab0').click()
while 1:
if driver.current_activity=='com.ss.android.article.base.feature.search.SearchActivity': break
driver.find_element_by_id('ll').send_keys('lamecho')
driver.find_element_by_id('o9').click()
情况是不是很像,逐条分析一下这几行。

在进首页点击了'ab0'后,我们在while循环里对当前的界面activity做判断,如果获取到当前的activity是查找界面的名称,那么我们break 退出循环,再去找'll'并给他输入“lamecho”字符串,最后点击'o9'搜索。

花这么长的篇幅来说明这个情况,就是要说刚才的那句话“难得不是找元素,而是怎么通过编程的思路去在合适的时间找到对应的元素”。

这个时间就是我们在以后的自动化实现上需要去关注和考虑的问题,而找元素那只是自动化必须要有的一个步骤而已。

接下来我们再对find_elements_by_id()和find_elements_by_class_name()做个简要的说明。

细心的童鞋可能发现了element变成了复数的形式。

所以通过这种方法找出来的元素必定是一个集合,即返回给我们的是个数组(python的叫法是个list)。

如果我们的脚本中出现这样的写法你是不能直接使用send_keys()和click()的,因为在python程序里你不能对一个list集合做输入和点击。

比如我们这样写:
els= driver.find_elements_by_id('ll')
els[0].send_keys(‘lamecho’)
对找到的els里的第一个元素做输入,第二个就是els[1],以此类推。

注意下标开始是从0开始的。

好了,我们的app自动化测试第三篇-搞定界面元素也要结束了。

希望大家把文中偏于理论的东西分析理解,自己上手再实现一些demo。

下一篇,我们将更多的介绍一下appium 中有用的一些方法函数,比如说怎么做界面的滑动,怎么做界面坐标位置的点击,锁屏界面的解锁是如何实现的等等。

篇4 安卓app自动化测试-Appium API进阶
1.1概要
本篇不去纠结如何去找界面元素(不明白的同学移步到我的上一篇学习)而是主要根据手机app的特性,介绍有关的操作方法,比如如何锁屏如何在锁屏后点亮屏幕并做手势解锁等等类似的操作实现。

1.2 appium玩转安卓手机
智能手机发展到今天,形成了一整套有关手势操作的操作习惯,如手指左右上下滑动,及双指缩放,还有手指的滑动解锁,摇晃手机等动作。

那么我们怎么在python中利用appium 实现这些复杂的动作呢?接下来我将对大家感兴趣的一些操作,一步步认识我们强大的Appium。

1.屏幕滑动—swipe
还记得我们在使用今日头条的实战中,切换热点标签是通过点击动作实现的吧。

当然我们平时在使用手机时最多的还是利用android系统的特点,一般是通过手指的左右滑动屏幕来实现切换的。

那么我们来看看脚本中是如何写的。

……
w=driver.get_window_size()['width']
h=driver.get_window_size()['height']
driver.swipe(int(w*0.25),int(h*0.5),int(w*0.75),int(h*0.5),1000)
sleep(2)
driver.swipe(int(w*0.5),int(h*0.75),int(w*0.5),int(h*0.25) ,1000)
大家应该直到屏幕的滑动分为四种,上划,下划,左划和右划。

所以我们在利用swipe 方法时通过变化里边的参数值来实现。

首先我们看看swipe方法的API文档介绍Swipe from one point to another point, for an optional duration.
:Args:
- start_x - x-coordinate at which to start
- start_y - y-coordinate at which to start
- end_x - x-coordinate at which to stop
- end_y - y-coordinate at which to stop
- duration - (optional) time to take the swipe, in ms.
:Usage:
driver.swipe(100, 100, 100, 400,1000)
swipe方法包含5个参数,起始点的坐标,终点的坐标及移动的时长。

而这里我们确定坐标不采用绝对值,而是通过屏幕的相对值坐标位置去操作滑动,这样的好处就是不需要考虑不同分辨率带来的影响,让你的脚本在不同分辨率的手机上都可以顺利执行。

所以这里我们先通过get_window_size()方法获取到当前手机的长,宽,然后再通过长宽上的不同比例来实现两个点的定位。

driver.swipe(int(w*0.25),int(h*0.5),int(w*0.75),int(h*0.5),1000)实现的是屏幕的左划;driver.swipe(int(w*0.5),int(h*0.75),int(w*0.5),int(h*0.25) ,1000)实现的是屏幕的上划操作。

大家可以把脚本加到我们的今日头条的demo脚本中,去看看实现效果,左划一次做页面的切换,上划浏览今日头条下面的文章。

这里注意我们的左后一个参数时间,当我们的时间设置的很短,带来的效果是对应我们滑动的速率很快,拿上划来说你将浏览更多的文章。

具体的效果大家可以自行体验一下。

2.屏幕点击—tap
driver.tap()方法是模拟手指多点点击的,即我们常说的多点触控。

我们拿两点触控来说就是两根手指点击屏幕
driver.tap([(398,1864),(703,1852),],3000)
我们将其加到代码中,实现这两个坐标点的同时点击3秒。

这里要介绍一下,如何快速的查看到当前屏幕的坐标,在手机的设置-开发者选项中有一个“显示触摸位置”和“显示指针位置”
的选项,打开即可看到屏幕的最上方就会显示坐标了。

另外多点触控最多支持5个点位的同时点击。

3. pinch和zoom缩放
这两个方法pinch是实现屏幕上元素的缩小,常用于图片的缩小;那么zoom就是元素的放大了。

pinch(self, element=None, percent=200, steps=50)
zoom(self, element=None, percent=200, steps=50)
比如找到我们要进行缩放的元素element,缩放比例percent200就是2倍的比率,steps是步长。

比如我们在进入头条点开一个图片后,对图片进行放大操作
els=driver.find_elements_by_class_name('android.widget.ImageView')
sleep(3)
driver.zoom(els[0],200,50)
4. 锁屏及手势解锁
在模拟手势解锁屏幕上,我们需要导入appium的TouchAction模块其实这个模块的功用类似selenium里的ActionChain,用法也都类似。

在使用TouchAction时我们可以在一行的语句中实现连续的动作执行,思考一下手势解锁的操作流程:点击第一个位置然后移动到第二个位置,再移动到第三个位置,以此类推最后手指移开。

那么大家看看这样一些的动作我们使用TouchAction怎么来完成。

TouchAction(driver).press(x=159,y=749).move_to(x=206,y=0).move_to(x=206,y=0).move_to( x=0,y=201).move_to(x=0,y=201).release().perform()
这里需要注意的一点是,在move_to里填写的必须是相对坐标。

好了,解锁会了,那怎么使用屏幕锁屏呢?这个就很简单了执行
driver.lock(3)
driver.keyevent(26)
第一行就是我们的锁屏命令,里边的参数标识锁屏时间,不过实际执行中并没有起到时间的作用。

第二行这里大家也要注意一下,它是keyevent表示我们执行一些手机键盘指令动作,26表示的是电源键。

具体还有哪些,大家自行搜索网上有很多,我就不在这里列出来了。

这样的动作就是锁屏然后操作电源键点亮屏幕,接下来就是执行我们的解锁动作就可以了。

5. 拖拽—drag_and_drop
这个动作也很好理解,比如在qq消息中当接收到新消息后在消息列表右边会出现一个表示消息数的小圆圈,我们手指拖动它后会将其取消掉。

那么这样的操作在appium里怎么实现呢?那就用到drag_and_drop方法了,我们看看具体的脚本,由于今日头条没有这样的操作,我就在qq中去执行了,脚本如下:
els_title=driver.find_elements_by_id('icon')
els_unmsg=driver.find_elements_by_id('unreadmsg')
driver.drag_and_drop(els_unmsg[0],els_title[0])
找到我们要拖拽的元素els_unmsg,然后拖拽到另一个元素els_title位置,这样就实现了这个动作。

大家可以在qq的app里演示一下。

6. 摇一摇—shake
摇晃手机,高大上了有没有。

但是很遗憾的是这个方法appium还没有实现,运行会报错。

还有很多方法我就不在文章里一一介绍了,我只是捡了几个比较重要,大家遇到问题最多的的几个命令来做讲解。

好了,我们的《app自动化测试第四篇- Appium API进阶》也要结束了。

希望大家把文章中涉及的方法自己都去找个APP实现一下,这样加深理解。

在写app自动化测试的系列的空挡中我同时写了两篇关于python接口测试的文章《book-python-auto-test-番外篇--接口》希望大家关注学习。

篇5 python自动化测试应用-Selenium环境篇
1.1概要
从本篇开始我将开始介绍python如何通过selenium来进行web页面自动化测试,我的一贯原则实战,有什么坑我会替大家埋上。

为什么是selenium?
记得最早接触web自动化测试,大家一定会想到QTP,在学着录制完订机票的网站后也算初步认识了什么是网页的自动化测试实现。

基本的思路也就是模拟点击,然后对脚本回放。

而selenium是什么呢,看看官网的定义:Selenium automates browsers。

其实也是万变不离其宗,本身selenium有自己的ide,大家直接下载当作一个工具来学习使用类似QTP。

相关文档
最新文档