篇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. java深拷贝和浅拷贝

    1.概念 java里的clone分为: A:浅复制(浅克隆): 浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. b:深复制(深克隆):深复制把要复制的对象所引用的对象都复制了一遍. Java中对 ...

  2. SQL_Join 小总结

    原文出自 :http://www.nowamagic.net/librarys/veda/detail/936 对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多in ...

  3. css 超出隐藏显示...

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  4. 从Visual Studio看微软20年技术变迁

    前言 这个世界从来都不缺变革,从工业革命到晶体管和集成电路,从生活电器到物联网,从简陋人机到精致体验,我们在享受技术带来的便捷的同时,也在为复杂设计而带来的挑战和生产力下降而痛并快乐着.而迫切期盼的, ...

  5. C++ 头文件系列(string)----分析string初始化内存模型

    测大小 这里我们比较4种版本的basic_string模版类,分别是:string, wstring, u16string, u32string. 虽然他们是不同的字符串类型,但是其sizeof的结果 ...

  6. Spring Boot 注解的使用

    Spring Boot 优于Spring mvc ,SSM,SSH 的一个亮点就是他使用了好多的注解. 1. @Autowired 这个注解的作用是将其他的类,接口引入,类似于之前的类的初始化等,用这 ...

  7. java的特点跨平台原理以及JDK的安装

    终于开始了期待已久的java,了解java首先要了解下计算机语言的发展历史 机器语言--->汇编语言--->--->高级语言(面向过程的语言和面向对象的语言) 机器语言 每一个计算机 ...

  8. 较简单的用ajax修改和添加功能(链接数据库)

    修改和添加关于数据库的信息,可以用于任何的添加和修改 这些数据库和前面的随笔数据库是一样的 一.显示出数据库中的信息 (1)显示的效果也可以是用bootstrap的标签页显示(前面一定要引入boots ...

  9. 机器学习:python中如何使用朴素贝叶斯算法

    这里再重复一下标题为什么是"使用"而不是"实现": 首先,专业人士提供的算法比我们自己写的算法无论是效率还是正确率上都要高. 其次,对于数学不好的人来说,为了实 ...

  10. 关于Form表单一些基础知识

    1.两个重要属性: action:表单需要提交的服务器地址 method:表单提交数据使用的方法,get/post >>>get和post的区别 ①get传参使用URL传递,所有参数 ...