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里演示一下。

appium 手势的更多相关文章

  1. Appium手势密码滑动之Z字形走势(java篇)

    1.直接使用负的偏移量appium会报错,在后面加上moveto(1,1)就行了 2.直接看图说话 废话少说看代码如: List<AndroidElement> element = dri ...

  2. Appium(九):Appium API(三) 滑动和拖拽、高级手势、手机操作

    1. 滑动和拖拽 我们在做自动化测试的时候,有些按钮是需要滑动几次屏幕后才会出现,此时,我们需要使用代码来模拟手指的滑动,也就是接下来要学的滑动和拖拽了. 1.1 swipe滑动事件 从一个坐标位置滑 ...

  3. Appium连接夜神模拟器,模拟手势点击(tap)

    # -*- coding:utf-8 -*- from appium import webdriver from time import sleep desired_caps ={ 'platform ...

  4. Python+Appium自动化测试(10)-TouchAction类与MultiAction类(控件元素的滑动、拖动,九宫格解锁,手势操作等)

    滑动屏幕方法swipe一般用于对页面进行上下左右滑动操作,但自动化过程中还会遇到其他情况,如对控件元素进行滑动.拖拽操作,九宫格解锁,手势操作,地图的放大与缩小等.这些需要针对控件元素的滑动操作,或者 ...

  5. APP 自动化之手势操作appium提供API详解(四)

    一.手势操作1.上下左右滑屏 swipe---滑动 java-client 4.x 是有swipe方法的,可以通过传递坐标信息就可以完成滑动androidDriver.swipe(startx, st ...

  6. 『与善仁』Appium基础 — 25、APP模拟手势高级操作

    目录 1.手指轻敲操作 2.手指按下和抬起操作 3.等待操作 4.手指长按操作 5.手指移动操作 6.综合练习 APP模拟手势的动作都被封装在TouchAction类中,TouchAction是App ...

  7. 『与善仁』Appium基础 — 27、模拟手势点击坐标

    目录 1.模拟手势点击坐标 2.tap()用法 3.练习 4.弊端 1.模拟手势点击坐标 在定位元素的时候,你使出了十八班武艺还是定位不到,怎么办呢?(面试经常会问) 那就拿出绝招:点击元素所在位置的 ...

  8. appium点击屏幕(手势)

    在android测试过程中,会遇到要点击一下屏幕的需求. 在appium旧版本使用下面代码点击android屏幕,没有报错.Map tap = new HashMap(); tap.put(" ...

  9. Appium 解决手势密码 java

    if(driver.getPageSource().contains("绘制解锁图案")){//检测是否是有手势密码出现 List<AndroidElement> el ...

随机推荐

  1. 20165221 Linux安装及命令入门学习

    安装过程 按照图文教程,进行操作,遇到如下问题. 1.安装ubuntu时从官网下载不成功. 最后在同学的帮助下,通过中文版网址入口进入,完成下载. 2.BIOS未恢复出厂设置,导致不能选择64-bit ...

  2. Workbook导出excel封装的工具类

    在实际中导出excel非常常见,于是自己封装了一个导出数据到excel的工具类,先附上代码,最后会写出实例和解释.支持03和07两个版本的 excel. HSSF导出的是xls的excel,XSSF导 ...

  3. [Jenkins]CentOS7下Jenkins搭建

    最近在倒腾Kubernetes的一些东西,这次需要用到Jenkins来实现自动化构建.来讲一讲搭建的整个过程. Jenkins是什么 Jenkins提供了软件开发的持续集成服务.它运行在Servlet ...

  4. np.nonzero()函数用法

    返回数组中不为0的元素的下标. 数组中元素可为布尔.整型和浮点型,返回值为元祖 一.一维数组 1.数组元素为布尔类型 a=np.array([True,False,True,False]) b=np. ...

  5. 使用vmstat和iostat命令进行Linux性能监控【转】

    转自:https://linux.cn/article-4024-1.html 这是我们正在进行的Linux命令和性能监控系列的一部分.vmstat和iostat两个命令都适用于所有主要的类unix系 ...

  6. liunx本地网卡流量监控

    作者:邓聪聪 公司网络异常,由于可监控设备有限,无法快速读取网络异常的设备,所以找到了这个办法,部署在服务端用以解决网络突发异常流量故障的查找! 环境:CentOS release 6.8 Linux ...

  7. 【转】Java并发编程:并发容器之CopyOnWriteArrayList

    Copy-On-Write简称COW,是一种用于程序设计中的优化策略.其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改, ...

  8. Chromium Embedded Framework (CEF)_3.2171.2069_v20170606_x86.tar.xz

    CEF 为观看各个直播平台而特此修改的浏览器 可以单独提取 Flash 视频, 并可以修改视频的大小等功能 [增加了960x90% 和 1280x90%] 这次修改是主要针对 YY web 直播平台 ...

  9. FTP登录提示Can't open data connection for transfer of "/"

    服务器: 系统:windows server 2008 R2 standard 是否开启防火墙:是 FTP客户端:Filezilla server 本地: FTP服务端:winscp 使用winscp ...

  10. MybatisGenerator生成的mapper 少了识别主键的方法 byPrimaryKey()

    生成的文件缺少红线标注的类似方法 添加 <property name="useInformationSchema" value="true"/>即可 ...