Appium+python自动化(二十九)- 模拟手指在手机上多线多点作战 - 多点触控(超详解)
简介
在网页中我们经常使用缩放操作来便利的查看具体的信息,在appium中使用MultiAction多点触控的类来实现。MultiAction是多点触控的类,可以模拟用户多点操作。主要包含加载add()和执行perform()两个方法.
问题思考
在使用地图App中,我们经常需要对界面进行缩放操作来更加便利的查看位置。那么在Appium中怎样去模拟这类操作呢?
MultiAction
MultiAction 是多点触控的类,可以模拟用户多点操作。主要包含 add() 和 perform() 两个方法, MultiAction可以结合前面所学的 ActionTouch可以模拟出用户的多个手指滑动的操作效果; MultiAction一般和TouchAction结合使用,故需要导入以下模块:
from appium.webdriver.common.multi_action import MultiAction from appium.webdriver.common.touch_action import TouchAction
加载:
方法add(self, *touch_actions)将TouchAction对象添加到MultiAction中,稍后再执行。
参数:
- touch_actions - 一个或多个TouchAction对象,描述一个手指要执行的动作链
用法
a1 = TouchAction(driver) a1.press(el1).move_to(el2).release() a2 = TouchAction(driver) a2.press(el2).move_to(el1).release() MultiAction(driver).add(a1, a2)
执行
perform(self) 执行存储在对象中的操作。
用法
a1 = TouchAction(driver) a1.press(el1).move_to(el2).release() a2 = TouchAction(driver) a2.press(el2).move_to(el1).release() MultiAction(driver).add(a1, a2).perform()
Ps:是不是有点类似Python里面的多线程和多进程的使用。
多点触控操作实践——地图App缩放
测试场景
安装启动百度地图Android app 进入地图后分别进行放大缩小操作
测试环境
1.宏哥的系统环境是Windows 10版本 64位系统
2.宏哥的dk版本:"1.8.0_181"
3.宏哥的appium版本:1.4.16
4.selenium:3.141.0
安装selenium:
输入指令pip install selenium
验证安装成功:pip show selenium
5.测试设备:Android 5.1.1 (不能低于5.0版本)
6.Python:3.7.2
命令:python -V ,回车即可。
7.百度地图Android版 V10.6.5
滑动原理图解
放大(Zoom):则手指分别从B>A,C>D同时向外移动放大页面
缩小(pinch):则手指分别从A>B,D>C同时向中间移动缩小页面
想法与思路
- 安装启动百度地图APP
- 启动后代码实现点击“同意”,然后接着点击“进入地图”
- 进入地图由于最近刚过完七夕,有个抢红包的活动,将其关闭
- 执行缩小函数3次,将地图缩小三次;紧接着执行放大函数,将地图放大三次。
代码实现
(1)安装启动百度地图
(2)点击“同意”,然后接着点击“进入地图
(3)进入地图由于最近刚过完七夕,有个抢红包的活动,将其关闭
活动关闭定位
代码实现
(4)执行缩小函数3次,将地图缩小三次;紧接着执行放大函数,将地图放大三次
代码运行结果
运行代码夜神模拟器自动化操作
参考代码
# coding=utf- # .先设置编码,utf-8可支持中英文,如上,一般放在第一行 # .注释:包括记录创建时间,创建人,项目名称。 ''' Created on -- @author: 北京-宏哥 QQ交流群: Project:学习和使用appium自动化测试-多点触控操作 ''' # .导入模块 from appium import webdriver from selenium.common.exceptions import NoSuchElementException from appium.webdriver.common.touch_action import TouchAction from appium.webdriver.common.multi_action import MultiAction desired_caps={} desired_caps['platformName']='Android' desired_caps['deviceName']='127.0.0.1:62001' desired_caps['platforVersion']='5.1.1' desired_caps['app']=r'C:\Users\DELL\Downloads\base.apk' desired_caps['appPackage']='com.baidu.BaiduMap' desired_caps['appActivity']='com.baidu.baidumaps.WelcomeScreen' driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps) driver.implicitly_wait() x=driver.get_window_size()['width'] y=driver.get_window_size()['height'] #点击同意 driver.find_element_by_id('com.baidu.BaiduMap:id/ok_btn').click() #点击进入地图 driver.find_element_by_id('com.baidu.BaiduMap:id/btn_enter_map').click() #检测是否有活动页面弹窗,如果有就点击关闭(宏哥做的时候有个领红包的活动页面) try: closeBtn=driver.find_element_by_id('com.baidu.BaiduMap:id/guide_close') except NoSuchElementException: pass else: closeBtn.click() def pinch(): action1=TouchAction(driver) action2=TouchAction(driver) pinch_action=MultiAction(driver) action1.press(x=x*).move_to(x=x*).release() action2.press(x=x*).move_to(x=x*).release() pinch_action.add(action1,action2) print('start pinch...') pinch_action.perform() def zoom(): action1 = TouchAction(driver) action2 = TouchAction(driver) zoom_action = MultiAction(driver) action1.press(x=x * ).move_to(x=x * ).release() action2.press(x=x * ).move_to(x=x * ).release() zoom_action.add(action1,action2) print("start zoom...") zoom_action.perform() if __name__ == '__main__': ): pinch() ): zoom()
合格开发的参考代码
# coding=utf- # .先设置编码,utf-8可支持中英文,如上,一般放在第一行 # .注释:包括记录创建时间,创建人,项目名称。 ''' Created on -- @author: 北京-宏哥 QQ交流群: Project:学习和使用appium自动化测试-多点触控操作 ''' # .导入模块 from appium import webdriver from selenium.common.exceptions import NoSuchElementException from appium.webdriver.common.touch_action import TouchAction from appium.webdriver.common.multi_action import MultiAction #初始化 desired_caps={} desired_caps['platformName']='Android' desired_caps['deviceName']='127.0.0.1:62001' desired_caps['platforVersion']='5.1.1' desired_caps['app']=r'C:\Users\DELL\Downloads\base.apk' desired_caps['appPackage']='com.baidu.BaiduMap' desired_caps['appActivity']='com.baidu.baidumaps.WelcomeScreen' driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps) driver.implicitly_wait() x=driver.get_window_size()['width'] y=driver.get_window_size()['height'] #点击同意 driver.find_element_by_id('com.baidu.BaiduMap:id/ok_btn').click() #点击进入地图 driver.find_element_by_id('com.baidu.BaiduMap:id/btn_enter_map').click() #检测是否有活动页面弹窗,如果有就点击关闭(宏哥做的时候有个领红包的活动页面) try: closeBtn=driver.find_element_by_id('com.baidu.BaiduMap:id/guide_close') except NoSuchElementException: pass else: closeBtn.click() #定义缩小函数 def pinch(): action1=TouchAction(driver) #第一个手势 action2=TouchAction(driver) #第二个手势 pinch_action=MultiAction(driver) #缩小手势 action1.press(x=x*).move_to(x=x*).release() action2.press(x=x*).move_to(x=x*).release() pinch_action.add(action1,action2) #加载 print('start pinch...') pinch_action.perform() #执行 #定义放大函数 def zoom(): action1 = TouchAction(driver) #第一个手势 action2 = TouchAction(driver) #第二个手势 zoom_action = MultiAction(driver) #放大手势 action1.press(x=x * ).move_to(x=x * ).release() action2.press(x=x * ).move_to(x=x * ).release() zoom_action.add(action1,action2) #加载 print("start zoom...") zoom_action.perform() #执行 #主函数调用子函数 #__name=’__main__’表示执行当前py文件;否则当前文件属于调用模块 if __name__ == '__main__': ): #执行缩小函数3次,range()代表执行0,,2共3次 pinch() ): #执行放大函数3次,range()代表执行0,,2共3次 zoom()
小结
好了,时间不早了,关于多点触控宏哥就简单的介绍到这里,大家晚安!!!
您的肯定就是我进步的动力。如果你感觉还不错,就请鼓励一下吧!记得点波 推荐 哦!!!(点击右边的小球即可! :))
个人公众号 微信群 (微信群已满100,可以加宏哥的微信拉你进群,请备注:进群)
Appium+python自动化(二十九)- 模拟手指在手机上多线多点作战 - 多点触控(超详解)的更多相关文章
- Appium+python自动化(三十一)- 元芳,你怎么看? - 日志收集-logging(超详解)
简介 生活中的日志是记录你生活的点点滴滴,让它把你内心的世界表露出来,更好的诠释自己的内心世界,而电脑里的日志是有价值的信息宝库. 日志文件是专门用于记录系统操作事件的记录文件或文件集合,操作系统有操 ...
- Appium+python自动化(十九)- 猴哥失散多年的混血弟弟还是妹妹- Monkey(猴子)参数(超详解)
简介 前边几篇介绍了Monkey以及Monkey的事件,今天就给小伙伴们介绍和分享一下Monkey的参数. 首先我们看一下这幅图来大致了解一下: 1.Monkey 命令 基本参数介绍 -p <允 ...
- Jmeter(二十九) - 从入门到精通 - Jmeter Http协议录制脚本工具-Badboy2(详解教程)
1.简介 上一篇文中已经对Badboy做了一个基本上详细完整的介绍,这一篇宏哥带你们实战一下,这一篇主要讲解和分享:录制和运行脚本.参数化 首先让我们使用N模式录制一个脚本,测试用例编号为:1.1.1 ...
- Appium+python自动化(十八)- 你难道是猴哥失散多年的混血弟弟还是妹妹???- Monkey事件(超详解)
操作事件简介 Monkey所执行的随机事件流中包含11大事件,分别是触摸事件.手势事件.二指缩放事件.轨迹事件.屏幕旋转事件.基本导航事件.主要导航事件.系统按键事件.启动Activity事件.键盘事 ...
- Appium+python自动化(十六)- ADB命令,知否知否,应是必知必会(超详解)
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态. adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或 ...
- Appium+python自动化(十)- 元素定位秘籍助你打通任督二脉 - 上卷(超详解)
简介 你有道灵光从天灵盖喷出来你知道吗,年纪轻轻就有一身横练的筋骨,简直百年一见的练武奇才啊,如果有一天让你打通任督二脉,那还不飞龙上天啊.正所谓我不入地狱谁入地狱,警恶惩奸维护世界和平这个任务就交个 ...
- Appium+python自动化(十二)- Android UIAutomator终极定位凶“胸”器(七)(超详解)
简介 乍眼一看,小伙伴们觉得这部分其实在异性兄弟那里就做过介绍和分享了,其实不然,上次介绍和分享的大哥是uiautomatorviewer,是一款定位工具.今天介绍的是一个java库,提供执行自动化测 ...
- 笨办法学Python(二十九)
习题 29: 如果(if) 下面是你要写的作业,这段向你介绍了“if语句”.把这段输入进去,让它能正确执行.然后我们看看你是否有所收获. people = 20 cats = 30 dogs = 15 ...
- Appium+python自动化(十五)- Android 这些基础知识,你知多少???(超详解)
简介 前边具体操作和实战已经讲解和分享了很多了,但是一些android的一些基础知识,你又知道多少了,你都掌握了吗?这篇就由宏哥给小伙伴们既是一个分享,又是对前边的一次总结.为什么要对这些做一个简单的 ...
随机推荐
- Wannafly挑战赛1:Treepath(DFS统计)
题目链接 题意 给出一棵树,问长度为偶数的路径数有多少. 思路 记录路径长度为奇数的数目和为偶数的数目,然后 n * (n-1) / 2 求和即可. #include <bits/stdc++. ...
- Python之Pandas库学习(一):简介
官方文档 1. 安装Pandas windos下cmd:pip install pandas 导入pandas包:import pandas as pd 2. Series对象 带索引的一维数组 创建 ...
- Nginx Location匹配顺序
理论部分 文字释义匹配规则如下: 略述: 1.nginx服务器首先在server块的多个location块中搜索是否有标准的uri和请求字符串匹配.如果有多个标准uri可以匹配,就匹配其中匹配度最高的 ...
- c++学习书籍推荐《C++ Templates》下载
详细讲解C++模板语言的概念. 使用C++模板的常用设计技巧. 应用例证(其中一些是“高 级”应用). 百度云及其他网盘下载地址:点我 名人推荐 如果今年你只打算买一本C++的书,那就选<C++ ...
- Cookie起源与发展
上一篇我们在讲优酷弹幕爬虫的时候,引入了一个新的知识点:Cookie,由于篇幅有限当时只是简单的给大家介绍了一下它的作用,今天我们就来全面了解一下Cookie(小饼干)以及相关的知识! 相信很多同学肯 ...
- Shiro authentication for Apache Zeppelin
Overview Apache Shiro is a powerful and easy-to-use Java security framework that performs authentica ...
- spring mvc 拦截器的使用
Spring MVC 拦截器的使用 拦截器简介 Spring MVC 中的拦截器(Interceptor)类似于 Servler 中的过滤器(Filter).用于对处理器进行预处理和后处理.常用于日志 ...
- 用了三星Dex,我已经快一个月回家没开过电脑了
其实比较早就知道手机使用显示屏扩展的功能,但是以前的技术可能受性能影响体验还不太好.后来让我期待的是Linux On Dex这个项目知道了手机已经如此强大了,可惜只能是是特定机器,因此在618之际乘着 ...
- exe崩溃用windbgattach后有宝贵现场,可看程序退出线程等,千万不要清屏
exe崩溃用windbgattach后有宝贵现场,可看程序退出线程等,千万不要清屏
- HDU - 1232 畅通工程【并查集】
畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...