appium 手势
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 手势的更多相关文章
- Appium手势密码滑动之Z字形走势(java篇)
1.直接使用负的偏移量appium会报错,在后面加上moveto(1,1)就行了 2.直接看图说话 废话少说看代码如: List<AndroidElement> element = dri ...
- Appium(九):Appium API(三) 滑动和拖拽、高级手势、手机操作
1. 滑动和拖拽 我们在做自动化测试的时候,有些按钮是需要滑动几次屏幕后才会出现,此时,我们需要使用代码来模拟手指的滑动,也就是接下来要学的滑动和拖拽了. 1.1 swipe滑动事件 从一个坐标位置滑 ...
- Appium连接夜神模拟器,模拟手势点击(tap)
# -*- coding:utf-8 -*- from appium import webdriver from time import sleep desired_caps ={ 'platform ...
- Python+Appium自动化测试(10)-TouchAction类与MultiAction类(控件元素的滑动、拖动,九宫格解锁,手势操作等)
滑动屏幕方法swipe一般用于对页面进行上下左右滑动操作,但自动化过程中还会遇到其他情况,如对控件元素进行滑动.拖拽操作,九宫格解锁,手势操作,地图的放大与缩小等.这些需要针对控件元素的滑动操作,或者 ...
- APP 自动化之手势操作appium提供API详解(四)
一.手势操作1.上下左右滑屏 swipe---滑动 java-client 4.x 是有swipe方法的,可以通过传递坐标信息就可以完成滑动androidDriver.swipe(startx, st ...
- 『与善仁』Appium基础 — 25、APP模拟手势高级操作
目录 1.手指轻敲操作 2.手指按下和抬起操作 3.等待操作 4.手指长按操作 5.手指移动操作 6.综合练习 APP模拟手势的动作都被封装在TouchAction类中,TouchAction是App ...
- 『与善仁』Appium基础 — 27、模拟手势点击坐标
目录 1.模拟手势点击坐标 2.tap()用法 3.练习 4.弊端 1.模拟手势点击坐标 在定位元素的时候,你使出了十八班武艺还是定位不到,怎么办呢?(面试经常会问) 那就拿出绝招:点击元素所在位置的 ...
- appium点击屏幕(手势)
在android测试过程中,会遇到要点击一下屏幕的需求. 在appium旧版本使用下面代码点击android屏幕,没有报错.Map tap = new HashMap(); tap.put(" ...
- Appium 解决手势密码 java
if(driver.getPageSource().contains("绘制解锁图案")){//检测是否是有手势密码出现 List<AndroidElement> el ...
随机推荐
- SQL攻击-预编译--缓存
PreparedStatement l 它是Statement接口的子接口: l 强大之处: 防SQL攻击: 提高代码的可读性.可维护性: 提高效率! l 学习PreparedStatement的用法 ...
- Python 标准异常总结
AssertionError 断言语句(assert) AttributeError 尝试访问未知的对象属性 EOFError 用户输入文件末尾标志EOF(Ctrl+d) FloatingPointE ...
- [转]python中的正则表达式(re模块)
转自:https://www.cnblogs.com/tina-python/p/5508402.html 一.简介 正则表达式本身是一种小型的.高度专业化的编程语言,而在python中,通过内嵌集成 ...
- 记录一段QQ关于 UNIGUI 的Session 时间设定
记录一段QQ关于 UNIGUI 的Session 时间设定,来自[台中]cmj(31365722): [重點說明] 1.UniGUI的Session就是UniMainModule. 2.Sess ...
- MFC不可不会
这些可能会很抽象,你既然学MFC,给你几个不可少的技术点 1.Dynamic Creation2.Runtime Type Imformation3.Persistence4.Message Mapp ...
- mysql数据库基于linux的安装步骤及数据库操作
一.数据库安装 Ubuntu上安装MySQL非常简单只需要几条命令就可以完成. sudo apt-get install mysql-server sudo apt-get isntall mysql ...
- $Django 站点:样式--文章--分类文章--文章详情--文章评论点赞--文章评论点赞统计(数据库优化)
<h3>个人站点下的</h3> 知识点 url (r'(?P<username>\w+)/p/(?P<id>\d+)', xiangxi,name='x ...
- 前端跨域问题的总结&&nodejs 中间层的路由转发
前后端交互的时候,跨域是避不开的问题. 总结就是如下: 1.Cors 我在做前后端分离的时候,会采用cors 的方法:便于其他源的调用接口,这个可以设置成任意的源头,也可以允许指定的源头. 下面的是n ...
- zabbix常用的python类api
zabbix自带api #!/usr/bin/python #coding:utf-8 import requests import json url = "http://192.168.9 ...
- 持续集成①安装部署jenkins从git获取代码
持续集成①安装部署jenkins从git获取代码 一:持续集成的概念: 1.1:总体的概括 持续集成Continuous Integration 持续交付Continuous Delivery 持续部 ...