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,一经查实,立即删除!

相关文章

Lyapunov-Krasovskii泛函三重积分项求导_原理

Lyapunov-Krasovskii泛函三重积分项求导_原理 1 Lyapunov-Krasovskii泛函三重积分项举例2 Lyapunov-Krasovskii泛函三重积分项求导3 基于辅助函数的一重积分不等式4 基于辅助函数的二重积分不等式 本人为研二小白,在看论文的过程中记录一下自己的学习过程和想法。 在…

ORACLE同步数据(dblink+物化视图)

1.创建dblink create public database link xirEvalDBlink connect to "XIR_TRD" identified by "xpar" USING (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST 191.168.0.11)(PORT 1521)) (CONNECT_DATA (SERVER DEDICATED) (SERVICE_NAME orcl) ) )…

nginx 配置页面重定向,并携带链接和参数

期望 将 ip:port//oldPrefix/pages?a1 重定向到ip:port//oldPrefix/targetPrefix?a1 nginx 配置 # 原始前缀 # permanent 重定向 location /oldPrefix/ {rewrite ^/oldPrefix/(.*)$ /targetPrefix/$1 permanent; }# 目标前缀 location /targetPrefix/ {# 相关配置 }

echarts实现堆叠图加折线混合图

vue组件实现代码: <template><div :id="chartId" style="width: 100%; height: 300px"></div> </template><script>import * as echarts from "echarts";export default {name: "doubleStackLine", /…

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

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

pg_rewind实现原理简单分析

pg_rewind的功能是在主备切换后回退旧主库上多余的事务变更&#xff0c;以便可以作为新主的备机和新主建立复制关系。通过pg_rewind可以在故障切换后快速恢复旧主&#xff0c;避免整库重建。对于大库&#xff0c;整库重建会很耗时间。 如何识别旧主上多余的变更&#xff1f; 这…

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

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

K8S Pod常见状态

这是自己所遇到 Pod 常见状态及可能原因&#xff0c;持续更新。 如有其他的错误状态&#xff0c;可私我更新 1. ImagePullBackOff 问题分析&#xff1a; 镜像拉取失败。 可能原因&#xff1a; 可能是网络问题导致&#xff0c;检查Pod所在节点是否能够正常访问网络; 镜…

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

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

electron本地运行请求端口

本地运行&#xff1a; npm run electron:start 运行后项目请求地址为&#xff1a; http://localhost:5173/api/xxxx const {protocol } require(electron); app.commandLine.appendSwitch(--ignore-certificate-errors, true); // Scheme must be registered before the app…

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

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

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

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

云仓是如何发展起来的?

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

速盾:cdn动态加速上传

CDN&#xff08;Content Delivery Network&#xff0c;内容分发网络&#xff09;是一种通过在全球范围内分布的服务器群组来提供高速、可靠内容传递的技术。CDN在网络上广泛应用&#xff0c;可以加速网站中的静态内容和动态内容的传输&#xff0c;并提高用户的访问速度和体验。…

Nuxt 的路由结构系统(七)

基本路由配置 在 Nuxt.js 中&#xff0c;每个 .vue 文件在 pages/ 目录下都会自动成为一个路由。文件名决定了路由的路径。例如&#xff1a; pages/ |-- index.vue # 映射到根路径 / |-- about.vue # 映射到路径 /about |-- contact.vue # 映射到路径 /conta…

Git clone解释

git clone gitgithub.com:tancolo/MOOC.git 是一个 Git 命令&#xff0c;用于从远程 Git 仓库复制一个仓库到本地计算机。下面我将详细解释这个命令的各个部分及其作用&#xff1a; git clone&#xff1a; 这是一个 Git 命令&#xff0c;用于从远程仓库克隆&#xff08;复制&am…

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

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

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

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

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

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

GIS 已知当前经纬度,往东移动一公里,怎么计算移动后的经纬度

已知当前经纬度&#xff0c;往东移动一公里&#xff0c;怎么计算移动后的经纬度111km1 &#xff08;经纬度都适用&#xff09;不追求精度 1米等于0.00001