Appium+python自动化(二十九)- 模拟手指在手机上多线多点作战 - 多点触控(超详解)

简介

在网页中我们经常使用缩放操作来便利的查看具体的信息,在appium中使用MultiAction多点触控的类来实现。MultiAction是多点触控的类,可以模拟用户多点操作。主要包含加载add()和执行perform()两个方法.

问题思考

在使用地图App中,我们经常需要对界面进行缩放操作来更加便利的查看位置。那么在Appium中怎样去模拟这类操作呢?

MultiAction

MultiAction 是多点触控的类,可以模拟用户多点操作。主要包含 add() 和 perform() 两个方法, MultiAction可以结合前面所学的 ActionTouch可以模拟出用户的多个手指滑动的操作效果; MultiAction一般和TouchAction结合使用,故需要导入以下模块:

from appium.webdriver.common.multi_action import MultiActionfrom 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次,将地图缩小三次;紧接着执行放大函数,将地图放大三次

 

代码运行结果

运行代码夜神模拟器自动化操作

参考代码

 1 # coding=utf-82 # 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行3 4 # 2.注释:包括记录创建时间,创建人,项目名称。5 '''6 Created on 2019-8-087 @author: 北京-宏哥   QQ交流群:7076992178 Project:学习和使用appium自动化测试-多点触控操作9 '''
10 # 3.导入模块
11 from appium import webdriver
12 from selenium.common.exceptions import NoSuchElementException
13 from appium.webdriver.common.touch_action import TouchAction
14 from appium.webdriver.common.multi_action import MultiAction
15 
16 desired_caps={}
17 desired_caps['platformName']='Android'
18 desired_caps['deviceName']='127.0.0.1:62001'
19 desired_caps['platforVersion']='5.1.1'
20 
21 desired_caps['app']=r'C:\Users\DELL\Downloads\base.apk'
22 desired_caps['appPackage']='com.baidu.BaiduMap'
23 desired_caps['appActivity']='com.baidu.baidumaps.WelcomeScreen'
24 
25 driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)
26 driver.implicitly_wait(5)
27 
28 x=driver.get_window_size()['width']
29 y=driver.get_window_size()['height']
30 #点击同意
31 driver.find_element_by_id('com.baidu.BaiduMap:id/ok_btn').click()
32 #点击进入地图
33 driver.find_element_by_id('com.baidu.BaiduMap:id/btn_enter_map').click()
34 
35 #检测是否有活动页面弹窗,如果有就点击关闭(宏哥做的时候有个领红包的活动页面)
36 try:
37     closeBtn=driver.find_element_by_id('com.baidu.BaiduMap:id/guide_close')
38 except NoSuchElementException:
39     pass
40 else:
41     closeBtn.click()
42 
43 def pinch():
44     action1=TouchAction(driver)
45     action2=TouchAction(driver)
46     pinch_action=MultiAction(driver)
47 
48     action1.press(x=x*0.2,y=y*0.2).wait(1000).move_to(x=x*0.4,y=y*0.4).wait(1000).release()
49     action2.press(x=x*0.8,y=y*0.8).wait(1000).move_to(x=x*0.6,y=y*0.6).wait(1000).release()
50 
51     pinch_action.add(action1,action2)
52     print('start pinch...')
53     pinch_action.perform()
54 
55 def zoom():
56     action1 = TouchAction(driver)
57     action2 = TouchAction(driver)
58     zoom_action = MultiAction(driver)
59 
60     action1.press(x=x * 0.4, y=y * 0.4).wait(1000).move_to(x=x * 0.2, y=y * 0.2).wait(1000).release()
61     action2.press(x=x * 0.6, y=y * 0.6).wait(1000).move_to(x=x * 0.8, y=y * 0.8).wait(1000).release()
62 
63     zoom_action.add(action1,action2)
64     print("start zoom...")
65     zoom_action.perform()
66 
67 if __name__ == '__main__':
68     for i in range(3):
69         pinch()
70 
71     for i in range(3):
72         zoom()

合格开发的参考代码

# coding=utf-8
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2019-8-08
@author: 北京-宏哥   QQ交流群:707699217
Project:学习和使用appium自动化测试-多点触控操作
'''
# 3.导入模块
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(5)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*0.2,y=y*0.2).wait(1000).move_to(x=x*0.4,y=y*0.4).wait(1000).release()action2.press(x=x*0.8,y=y*0.8).wait(1000).move_to(x=x*0.6,y=y*0.6).wait(1000).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 * 0.4, y=y * 0.4).wait(1000).move_to(x=x * 0.2, y=y * 0.2).wait(1000).release()action2.press(x=x * 0.6, y=y * 0.6).wait(1000).move_to(x=x * 0.8, y=y * 0.8).wait(1000).release()zoom_action.add(action1,action2)  #加载print("start zoom...")zoom_action.perform()  #执行#主函数调用子函数#__name=’__main__’表示执行当前py文件;否则当前文件属于调用模块
if __name__ == '__main__':for i in range(3):     #执行缩小函数3次,range(3)代表执行0,1,2共3次pinch()for i in range(3):     #执行放大函数3次,range(3)代表执行0,1,2共3次zoom()

小结

   好了,时间不早了,关于多点触控宏哥就简单的介绍到这里,大家晚安!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/36874.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Embedding 、词嵌入、向量模型说的是一回事么?AI是如何理解世界?AI人不能不看的Embedding白话科普!

在AI理解世界的过程中,向量模型扮演着一个至关重要的角色,甚至可以说它是AI大模型用以构建和理解复杂数据的基础,也是对不同形态数据的一种标准化的“浓缩”。它能够将语言、图像、声音等多样化的信息,转化为一种通用的、数学化的…

基于51单片机的银行排队呼叫系统设计

一.硬件方案 本系统是以排队抽号顺序为核心,客户利用客户端抽号,工作人员利用叫号端叫号;通过显示器及时显示当前所叫号数,客户及时了解排队信息,通过合理的程序结构来执行排队抽号。电路主要由51单片机最小系统LCD12…

Vue-cli项目及Element UI 环境搭建 保姆级教程

一、Vue-cli介绍及其作用 什么是Vue-cli手脚架 vue-cli 官方提供的一个脚手架,用于快速生成一个 vue 的项目模板;预先定义 好的目录结构及基础代码,就好比咱们在创建 Maven 项目时可以选择创建一个 骨架项目,这个骨架项目就是脚…

手把手教你玩转AD9361数字调制解调系列(二) ----纯逻辑实现FSK信号的数字调制解调

因最近客户需求,用纯PL实现AD9361的数字信号调制解调,于是就把各种数字调制都在AD9361上都实现了一遍。优点就是:既可以在zynq系列上配置9361,也可以在纯FPGA系列配置9361。并且理解起来比较简单!!&#xf…

lidar3607.2 雷达点云数据处理软件功能介绍

LiDAR360 是北京数字绿土科技股份有限公司自主研发的点云后处理及行业应用软件。平台可处理 TB 级点云数据,并拥有 10 余种国际领先的点云处理及 AI 算法,推动激光雷达 的多行业应用。700 余项强大且灵活的功能,解决用户最后一公里的应用难题…

云仓是如何发展起来的?

1、电子商务的繁荣: 随着电商的兴起,对高效仓储和物流的需求越来越大。传统的仓储方式难以满足海量订单处理和快速配送的要求,因此需要一种更加灵活和高效的仓储解决方案。 ------------------------------------------------- 2、科技进步…

罗盘复杂网络教程—3步轻松构建社团检测任务

作为复杂网络领域中重要的课题之一,社团检测有助于揭示网络中存在的功能性模块或群集,旨在于仅利用网络中蕴含的来识别模块,并可能进而识别它们的层次组织。社团检测在各个领域具有重要的应用,可以帮助深入理解复杂系统潜在的模式…

一键进阶ComfyUI!懂AI的设计师现在都在用的节点式Stable Diffusion

前言 _ 万字教程!奶奶看了都会的 ComfyUI 入门教程 推荐阅读 一、川言川语 大家好,我是言川。 阅读文章 > ](https://www.uisdc.com/comfyui-3) 目前使用 Stable Diffusion 进行创作的工具主要有两个:WebUI 和 ComfyUI。而更晚出现的…

SceneXplain 图片叙事升级:如何让图片听得到

SceneXplain 是一个由多模态 AI 驱动的产品服务,它不仅 提供一流的图像和视频标注解决方案,还具备卓越的多模态视觉问答能力,为用户解锁视觉内容的全新维度。 在[《图像描述算法排位赛》中,我们探讨了图像描述(Image …

有兄弟对这类区域比较感兴趣,也引起我的好奇,我提取出来给大家看看

要说这类地区,亚洲泰国排第二估计没人敢说第一吧,所以我就提取泰国的数据给大家看看! 如图:这些特殊服务地区主要集中在曼谷和芭提雅地区,芭提雅最多!看来管理还是不错的,限制在一定范围&#x…

便携应急气象站设备—实时监测和记录气象数据

TH-BQX10便携应急气象站设备是一种高度集成、轻便易携的气象观测系统。它采用新型一体化结构设计,能够快速安装和拆卸,适用于各种复杂环境。通过集成多种气象传感器,该设备能够实时监测和记录温度、湿度、风向、风速、降雨量、气压等多种气象…

AMEYA360:广和通发布LTE Cat.1 bis模组MC610-GL,赋能全球漫游追踪器

广和通LTE Cat.1 bis模组MC610-GL搭载展锐8910平台,覆盖全球主流LTE频段,下行峰值速率达10.3Mbps,上行速率达5.1Mbps,满足全球终端对4G速率连接的需求;同时支持LTE和GSM双模通信,便于用户灵活切换网络。在尺寸封装上&a…

开放式耳机怎么选?五大2024年口碑销量爆棚机型力荐!

作为一名数码测评up主,今天来测评市面上的开放式耳机。开放式耳机它的设计非常的新颖,不管是舒适的佩戴,还是可以边听音乐,边听到周围的声音,给人更加安全的听感体验。长时间佩戴,不仅舒适度进一步的提升&a…

【机器学习】高斯混合模型(Gaussian Mixture Models, GMM)深度解析

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 高斯混合模型(Gaussian Mixture Models, GMM)深度解析引…

【uml期末复习】统一建模语言大纲

前言: 关于uml的期末复习的常考知识点,可能对你们有帮助😉 目录 第一部分 概念与基础 第一章 面向对象技术 第二章 统一软件过程 第三章 UML概述 第四章 用例图 第五章 类图 第六章 对象图 第七章 顺序图 第八章 协作图 第九章 状态…

Transformers 安装与基本使用

文章目录 Github文档推荐文章简介安装官方示例中文情感分析模型分词器 Tokenizer填充 Padding截断 Truncation google-t5/t5-small使用脚本进行训练Pytorch 机器翻译数据集下载数据集格式转换 Github https://github.com/huggingface/transformers 文档 https://huggingface…

Selenium时间控件的处理

我们经常在做web自动化测试过程中会遇到时间控件,那么对于时间控件如何处理,我们可以来分析下。 对于时间控件一般分为两种: 1、普通的时间控件 直接通过send_keys就可以解决 d.get("https://www.ctrip.com/?sid155952&alliancei…

自定义 vant 的 van-calendar 日历控件

最近在做 vue 微信公众号项目&#xff0c; 有个自定义日历控件展示的需求&#xff0c;经过查阅资料&#xff0c;最终实现了如图所示效果&#xff0c;这里做了总结&#xff0c;需要的小伙伴可以参考一下&#xff1a; HTML代码&#xff1a; <template><div class"…

I/O系统

1. I/O接口 接口可以看做两个系统或两个部件之间的交接部分&#xff0c;它既可以是两种硬设备之间的连接电路&#xff0c;也可以是两个软件之间的共同逻辑边界。 I/O接口通常是指主机与I/O设备之间设置的一个硬件电路及其相应的软件控制。 2. 程序查询方式 程序查询方式是一…

知乎正通过乱码来干扰必应/谷歌等爬虫,从而限制中文数据集被用于AI训练

有用户反馈称使用微软必应搜索和谷歌搜索发现存在不少知乎乱码内容&#xff0c;即搜索结果里知乎内容的标题和正文内容都可能是乱码的&#xff0c;但抓取的正文前面一些段落内容可以正常查看。考虑到此前知乎已经屏蔽除百度和搜狗以外的所有搜索引擎爬虫 (蜘蛛 / 机器人)&#…