篇4                 安卓app自动化测试-Appium API进阶

--lamecho辣么丑

1.1概要

大家好! 我是lamecho(辣么丑),今天是《安卓app自动化测试》的第四篇,可以说是使用appium的进阶,本篇不去纠结如何去找界面元素(不明白的同学移步到我的上一篇学习)而是主要根据手机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-番外篇--接口》希望大家关注学习。最后感谢大家耐心读完本篇文章,我是lamecho,辣么丑。

篇4 安卓app自动化测试-Appium API进阶的更多相关文章

  1. 篇2 安卓app自动化测试-初识python调用appium

    篇2              安卓app自动化测试-初识python调用appium --lamecho辣么丑 1.1概要 大家好!我是lamecho(辣么丑),上一篇也是<安卓app自动化测 ...

  2. 篇3 安卓app自动化测试-搞定界面元素

    篇3                 安卓app自动化测试-搞定界面元素 --lamecho辣么丑 1.1概要 大家好! 我是lamecho(辣么丑),今天是<安卓app自动化测试>的第三 ...

  3. sikuli+eclipse对于安卓app自动化测试的应用(第一次写博客,有些语言还不太专业,望海涵)

    Sikuli是什么? 下面是来自于官网的介绍:Sikuli is a visual technology to automate and test graphical user interfaces ...

  4. app自动化测试Appium+python

    一.node.js安装 https://nodejs.org/en/download/ ##一直下一步 ###cmd查看 二.  .NET Framework安装 https://www.micros ...

  5. app自动化测试-appium

    一.环境准备(windows) 1.安装Microsoft .NET Framework 4.5 双击运行如下文件:net4.5.1.exe 2.安装node-v6.11.4-x64.msi 双击运行 ...

  6. 安卓App自动化测试环境

    一.appium安装 1.nodejs依赖 2..net framework 3.Appium桌面程序安装 3.1.安装包获取 3.2.安装过程 二.Java_ jdk安装 1.Java_jdk版本说 ...

  7. app 自动化测试 Appium+python可以运行的代码

    Appium

  8. app 自动化测试 Appium+Java可以运行的代码

    地址:http://www.cnblogs.com/sunny-sl/p/6520465.html

  9. 移动app自动化测试

    原文出处https://www.toutiao.com/i6473606106970063374/ 原文作者是今日头条的:一个字头的诞生 在此感谢原文作者的无私分享! 移动App自动化测试(一) 目前 ...

随机推荐

  1. 使用JSON.parse(),JSON.stringify()实现对对象的深拷贝

    根据不包含引用对象的普通数组深拷贝得到启发,不拷贝引用对象,拷贝一个字符串会新辟一个新的存储地址,这样就切断了引用对象的指针联系. 测试例子: var test={ a:"ss", ...

  2. 【转】JavaScript 之arguments、caller 和 callee 介绍

    1.前言 arguments, caller ,   callee 是什么? 在JavaScript 中有什么样的作用?本篇会对于此做一些基本介绍. 本文转载自:http://blog.csdn.ne ...

  3. mysql技术内幕InnoDB存储引擎-阅读笔记

    mysql技术内幕InnoDB存储引擎这本书断断续续看了近10天左右,应该说作者有比较丰富的开发水平,在源码级别上分析的比较透彻.如果结合高可用mysql和高性能mysql来看或许效果会更好,可惜书太 ...

  4. 配置linux实现路由功能

    说明: 主机1是内网的数据存储服务器,只有一块网卡10.0.0.2: 主机2是web服务器,有两块网卡,一块面向内网10.0.0.3,一块面向外网192.168.220.136: (因为是在虚拟机的环 ...

  5. 【C语言】printf()函数详解

    printf函数称为格式输出函数,其关键字最末一个字母f即为"格式"(format)之意.其功能是按用户指定的格式,把指定的数据显示到显示器屏幕上.在前面的例题中我们已多次使用过这 ...

  6. response.setHeader("Content-disposition","attachment;filename="+fileName) 下载时文件名中存在空格错误

    最近在进行文件下载时发现一个问题,就是下面语句运行时,下载某些文件正常,下载某些文件异常,后来发现文件名中有空格的文件火狐浏览器是默认将文件名截断了的 response.setHeader(" ...

  7. sql server 重命名列(字段)

    调用系统存储过程sp_rename,直接看代码: EXEC  sp_rename  'myTable.oldName','newName','COLUMN' 如果重命名表,则: EXEC  sp_re ...

  8. C++ Primer 5 CH7 类

    7.1 定义抽象数据类型 定义和声明成员函数的方式与普通函数差不多,成员函数的声明必须在类的内部,定义可以在类的内部或外部.作为接口组成部分的非成员函数的声明和定义都在类的外部. 定义在类内部的函数是 ...

  9. div背景图片或颜色不显示的解决办法

    背景图片不显示的原因: 1. css没有被调用 2. css图片地址不对 3. div的高度没有固定,是auto.没有设值或者高度不够 4. div被嵌套 5. div代码不规范 解决办法: (1)D ...

  10. 老李分享:《Linux Shell脚本攻略》 要点(一)

    老李分享:<Linux Shell脚本攻略> 要点(一)   第一章:Shell起步基础 1.变量:在bash中,每一个变量的值都是字符串.无论你给变量赋值时,有没有使用引号,值都会以字符 ...