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次,将地图缩小三次;紧接着执行放大函数,将地图放大三次

 

代码运行结果

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

参考代码

 1 # coding=utf-8
 2 # 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
 3 
 4 # 2.注释:包括记录创建时间,创建人,项目名称。
 5 '''
 6 Created on 2019-8-08
 7 @author: 北京-宏哥   QQ交流群:707699217
 8 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()

小结

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PPT怎么录制视频?这里有你想要的答案!

“有人知道ppt怎么录制视频吗?我正在准备一个关于新产品功能介绍的演示文稿,希望能将我的ppt转化为一个专业且生动的视频讲解。我尝试了一些方法,但不知道从哪里开始。有没有哪位朋友能分享一下自己录制ppt视频的经验吗?” 在数字…

问题解决:python安装依赖时网络问题报错

进行 pip install 时,安装轮子访问过慢而造成安装失败,有时候配置镜像源仍会出现莫名其妙的问题,包括网络代理问题等。看了一些解决方案,找出了一个最适合的方式,如下所示: pip install -i https://pypi.t…

React小记(五)_Hooks入门到进阶

React 16.8 版本 类组件 和 函数组件 两种组件共存,到目前 React 18 版本,官方已经不在推荐使用类组件,在函数组件中 hooks 是必不可少的,它允许我们函数组件像类组件一样可以使用组件的状态,并模拟组件的生命周期等一…

Eclipse代码编辑器自主配色

1. 打开 Eclipse 的设置 - Java - Editor - Syntax Coloring 2. 自定义各种类型的颜色,例如: 1. Interface 勾选,设置为紫色 2. Class 勾选,设置为淡蓝色 3. Abstract classes 勾选,有自己默认的颜色 …

数据分析ClickHouse学习笔记

一、ClickHouse基础 1.1 ClickHouse介绍 ClickHouse是一个用于联机分析(OLAP)的列式DBMS。 简单来说,相比MySQL等行式数据库,数据存储方式是: Rowidis_deltitlesexcreateAt#021a12024/2/18 5:19#130b12024/2/18 8:10#241c12024/2/18 7:38…

开源了!免费合规国内可用的 OpenAI-API 来了

你还在烦恼不能自主构建和调试AI模型吗?你还在为自己的AI项目寻找合适的工具和框架吗?如果你已有一定的AI和python基础,我有一个好消息要告诉你:lang2openai已经开源了!这个开源项目让你可以按照openai的方式使用所有模…

【合作ACM出版,稳定EI、Scopus稳定检索】第五届城市工程与管理科学国际会议(ICUEMS 2024,8月2-4)

第五届城市工程与管理科学国际会议(ICUEMS 2024)将于2024年8月2-4日在天津举行。 会议的目的是为从事城市工程、管理科学相关领域的专家、学者、工程师和技术研究人员提供一个平台,分享科研成果和前沿技术,了解学术发展趋势&…

图象去噪1-使用中值滤波与均值滤波

1、中值滤波 使用中值滤波去除图像的异常像素点,使用cv2.cv2.medianBlur(img, 3)表示再图像在中值滤波窗口3*3的范围内,从下到大排序,将当前值替换为排序中值(如下图所示)将56替换为(56,66,90,…

智慧海洋灾害监测预警系统解决方案

一、概述 近年来,我国海洋经济持续增长,为我国综合国力带来了新机遇。但是,每年由于海洋灾害带来的损失也不可忽略,这些灾害包括:风暴潮、海浪、海冰、海啸动力环境灾害、赤潮、绿潮等等。针对目前海洋监管力量薄弱&am…

Vite: 插件开发

概述 说到自定义的能力,肯定很容易想到 插件机制 ,利用一个个插件来扩展构建工具自身的能力虽然 Vite 的插件机制是基于 Rollup 来设计的,但实际上 Vite 的插件机制也包含了自己独有的一部分,与Rollup 的各个插件 Hook 并非完全兼…

2024年6月京东睡眠呼吸暂停和低通气事件检测赛题-baseline

赛题地址:DC竞赛-大数据竞赛平台 (datacastle.cn) 一、数据集介绍 train_x训练数据集特征描述,其样本分布不均匀,0样本29808,1样本3221,2样本4520,共计37549条样本 第一维度:60 位受试样本数总…

数据恢复篇:如何在Android上恢复删除的短信

如果您不小心删除了Android设备上的短信并想要检索它们,则可以尝试以下方法: 如何在Android上恢复删除的短信 检查您的备份: 如果您之前备份了Android设备,则可以从备份中恢复已删除的短信。检查您设备的内部存储空间或 Google 云…

CentOS停止维护,如何应对?

一、事件背景 2020年12月08日,CentOS官方宣布了停止维护CentOS Linux的计划,并推出了CentOS Stream项目。 更多信息,请参见CentOS官方公告。 版本变化说明CentOS 9不再支持新的软件和补丁更新CentOS 82021年12月31日停止维护服务CentOS 720…

goLang小案例-获取从控制台输入的信息

goLang小案例-获取从控制台输入的信息 1. 案例代码展示 package mainimport ("bufio""fmt""log""os" )var pl fmt.Printlnfunc main() {//控制台输出欢迎提示pl("Hello Go")fmt.Print("what is your name? ")…

20240627优雅草新产品取得原始软件著作权授权

https://doc.youyacao.com/22/2153 20240627优雅草新产品取得原始软件著作权授权 介绍 历程消息:优雅草2024年新产品最新取得原始著作权两份,2款产品将在近期完成为商业授权产品在蜻蜓松鼠官网售卖,本两款产品是智慧园区能源监测管理系统解…

Harris角点检测原理及其在python-opencv的调用

文章目录 原理测试 原理 Harris 角点检测的基本思路如下:考虑一个局部的区域,将其作为一个窗口四处移动,若窗口灰度发生了较大的变化,那么,就认为窗口内存在角点,否则窗口内就不存在角点。 对于图像 I ( …

HBase与Hive数据交互

一、hbase数据导入hive hive通过建立外部表和普通表加载hbase表数据到hive表中。 两种方式加载hbase中的表到hive中,一是hive创建外部表关联hbase表数据,是hive创建普通表将hbase的数据加载到本地。 1.创建外部表 hbase中创建test表,且插入…

没有思考过 Embedding,不足以谈 AI

在当今的人工智能(AI)领域,Embedding 是一个不可或缺的概念。如果你没有深入理解过 Embedding,那么就无法真正掌握 AI 的精髓。接下来,我们将深入探讨 Embedding 的基本概念。 1. Embedding的基本概念 1.1 什么是 Emb…

ET实现游戏中邮件系统逻辑思路(服务端)

ET是一个游戏框架,用的编程语言是C#,游戏引擎是Unity,框架作者:熊猫 ET社区 在游戏中我们通常都会看到有邮件系统,邮件系统的作用有给玩家通知、发放奖励等 下面小编使用ET框架带大家看一下邮件系统的一种实现方…

远程过程调用RPC实现原理

Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥💥个人主页:奋斗的小羊 💥💥所属专栏:C语言 🚀本系列文章为个人学习…