篇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. 使用git部署服务器

    每回上传服务器是把我的web项目打包成war上传到服务器根目录下,总是觉得很麻烦,并且每次就算只添加或修改了一个文件,都要把整个服务器war包上传.于是我学着用git部署我的web项目 下面是详情: ...

  2. H5 Canvas vs. SVG

    HTML 5 Canvas vs. SVG HTML5 SVG HTML5 地理定位 Canvas 和 SVG 都允许您在浏览器中创建图形,但是它们在根本上是不同的. SVG SVG 是一种使用 XM ...

  3. gcc下c++的对象模型 (1)

    所有示例代码在如下环境中执行 ubuntu 16.04.4 (64位) gcc version 5.4.0 开启std11 gdb version 7.11.1 1. 空类的大小 定义一个空类A,实例 ...

  4. MyBatis极速入门开发手册(2017-2-6更新)

    前言: 本篇文章对我的学习内容做一个归纳梳理,同时也记录一些学习过程中遇上的问题及注意事项等等,可以帮助新入门的朋友们消除一些误区与盲区,希望能帮上一些正在学习的朋友们.在编写时会引用一些mybati ...

  5. 小梦windows phone 8.1开发:语音朗读

    使用SpeechSynthesizer类可以实现文本朗读功能,位于 Windows.Media.SpeechSynthesis命名空间.有了它我们就可以实现有声小说了,是不是很爽.下面给出一个将文本块 ...

  6. lsusb命令

    运行 yum install libusb usbutils

  7. 腾讯云报告——MySQL成勒索新目标,数据服务基线安全问题迫在眉睫

    推荐理由 大数据时代,人类产生的数据越来越多,但数据越多的情况下,也会带来数据的安全性问题,如MySQL数据库上的数据,越来越多的黑客盯上了它,今天推荐的这篇文章来自于腾讯云技术社区,主要是针对MyS ...

  8. Unity 3D Framework Designing(8)——使用ServiceLocator实现对象的注入

    对象的 『注入』 是企业级软件开发经常听到的术语.如果你是一个 Java 程序员,一定对注入有着深刻的映像.不管是SSH框架还是SSM框架,Spring 全家桶永远是绕不过去的弯.通过依赖注入,可以有 ...

  9. ABP入门系列(15)——创建微信公众号模块

    ABP入门系列目录--学习Abp框架之实操演练 源码路径:Github-LearningMpaAbp 1. 引言 现在的互联网已不在仅仅局限于网页应用,IOS.Android.平板.智能家居等平台正如 ...

  10. JDK中日期和时间的几个常用类浅析(五)

    LocalDateTime   LocalDateTime是JDK8中才引入的类,用来表示不包含时区信息的本地日期和时间.我们可以把LocalDateTime看作是LocalDate和LocalTim ...