简介

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

问题思考

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

MultiAction

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

  1. from appium.webdriver.common.multi_action import MultiAction
  2.  
  3. from appium.webdriver.common.touch_action import TouchAction

加载:

方法add(self, *touch_actions)将TouchAction对象添加到MultiAction中,稍后再执行。

参数:
  • touch_actions - 一个或多个TouchAction对象,描述一个手指要执行的动作链
用法
  1. a1 = TouchAction(driver)
  2.  
  3. a1.press(el1).move_to(el2).release()
  4.  
  5. a2 = TouchAction(driver)
  6.  
  7. a2.press(el2).move_to(el1).release()
  8.  
  9. MultiAction(driver).add(a1, a2)

执行

perform(self) 执行存储在对象中的操作。

用法
  1. a1 = TouchAction(driver)
  2.  
  3. a1.press(el1).move_to(el2).release()
  4.  
  5. a2 = TouchAction(driver)
  6.  
  7. a2.press(el2).move_to(el1).release()
  8.  
  9. 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-
  2. # .先设置编码,utf-8可支持中英文,如上,一般放在第一行
  3.  
  4. # .注释:包括记录创建时间,创建人,项目名称。
  5. '''
  6. Created on --
  7. @author: 北京-宏哥 QQ交流群:
  8. Project:学习和使用appium自动化测试-多点触控操作
  9. '''
  10. # .导入模块
  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()
  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*).move_to(x=x*).release()
  49. action2.press(x=x*).move_to(x=x*).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 * ).move_to(x=x * ).release()
  61. action2.press(x=x * ).move_to(x=x * ).release()
  62.  
  63. zoom_action.add(action1,action2)
  64. print("start zoom...")
  65. zoom_action.perform()
  66.  
  67. if __name__ == '__main__':
  68. ):
  69. pinch()
  70.  
  71. ):
  72. zoom()

合格开发的参考代码

  1. # coding=utf-
  2. # .先设置编码,utf-8可支持中英文,如上,一般放在第一行
  3.  
  4. # .注释:包括记录创建时间,创建人,项目名称。
  5. '''
  6. Created on --
  7. @author: 北京-宏哥 QQ交流群:
  8. Project:学习和使用appium自动化测试-多点触控操作
  9. '''
  10. # .导入模块
  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. #初始化
  17. desired_caps={}
  18. desired_caps['platformName']='Android'
  19. desired_caps['deviceName']='127.0.0.1:62001'
  20. desired_caps['platforVersion']='5.1.1'
  21.  
  22. desired_caps['app']=r'C:\Users\DELL\Downloads\base.apk'
  23. desired_caps['appPackage']='com.baidu.BaiduMap'
  24. desired_caps['appActivity']='com.baidu.baidumaps.WelcomeScreen'
  25.  
  26. driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)
  27. driver.implicitly_wait()
  28.  
  29. x=driver.get_window_size()['width']
  30. y=driver.get_window_size()['height']
  31. #点击同意
  32. driver.find_element_by_id('com.baidu.BaiduMap:id/ok_btn').click()
  33. #点击进入地图
  34. driver.find_element_by_id('com.baidu.BaiduMap:id/btn_enter_map').click()
  35.  
  36. #检测是否有活动页面弹窗,如果有就点击关闭(宏哥做的时候有个领红包的活动页面)
  37. try:
  38. closeBtn=driver.find_element_by_id('com.baidu.BaiduMap:id/guide_close')
  39. except NoSuchElementException:
  40. pass
  41. else:
  42. closeBtn.click()
  43.  
  44. #定义缩小函数
  45. def pinch():
  46. action1=TouchAction(driver) #第一个手势
  47. action2=TouchAction(driver) #第二个手势
  48. pinch_action=MultiAction(driver) #缩小手势
  49.  
  50. action1.press(x=x*).move_to(x=x*).release()
  51. action2.press(x=x*).move_to(x=x*).release()
  52.  
  53. pinch_action.add(action1,action2) #加载
  54. print('start pinch...')
  55. pinch_action.perform() #执行
  56.  
  57. #定义放大函数
  58. def zoom():
  59. action1 = TouchAction(driver) #第一个手势
  60. action2 = TouchAction(driver) #第二个手势
  61. zoom_action = MultiAction(driver) #放大手势
  62.  
  63. action1.press(x=x * ).move_to(x=x * ).release()
  64. action2.press(x=x * ).move_to(x=x * ).release()
  65.  
  66. zoom_action.add(action1,action2) #加载
  67. print("start zoom...")
  68. zoom_action.perform() #执行
  69.  
  70. #主函数调用子函数
  71.  
  72. #__name=’__main__’表示执行当前py文件;否则当前文件属于调用模块
  73. if __name__ == '__main__':
  74. ): #执行缩小函数3次,range()代表执行0,,2共3次
  75. pinch()
  76.  
  77. ): #执行放大函数3次,range()代表执行0,,2共3次
  78. zoom()

小结

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

您的肯定就是我进步的动力。如果你感觉还不错,就请鼓励一下吧!记得点波 推荐 哦!!!(点击右边的小球即可! :))

       个人公众号                                                             微信群 (微信群已满100,可以加宏哥的微信拉你进群,请备注:进群)          

                                                                 

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

  1. Appium+python自动化(三十一)- 元芳,你怎么看? - 日志收集-logging(超详解)

    简介 生活中的日志是记录你生活的点点滴滴,让它把你内心的世界表露出来,更好的诠释自己的内心世界,而电脑里的日志是有价值的信息宝库. 日志文件是专门用于记录系统操作事件的记录文件或文件集合,操作系统有操 ...

  2. Appium+python自动化(十九)- 猴哥失散多年的混血弟弟还是妹妹- Monkey(猴子)参数(超详解)

    简介 前边几篇介绍了Monkey以及Monkey的事件,今天就给小伙伴们介绍和分享一下Monkey的参数. 首先我们看一下这幅图来大致了解一下: 1.Monkey 命令 基本参数介绍 -p <允 ...

  3. Jmeter(二十九) - 从入门到精通 - Jmeter Http协议录制脚本工具-Badboy2(详解教程)

    1.简介 上一篇文中已经对Badboy做了一个基本上详细完整的介绍,这一篇宏哥带你们实战一下,这一篇主要讲解和分享:录制和运行脚本.参数化 首先让我们使用N模式录制一个脚本,测试用例编号为:1.1.1 ...

  4. Appium+python自动化(十八)- 你难道是猴哥失散多年的混血弟弟还是妹妹???- Monkey事件(超详解)

    操作事件简介 Monkey所执行的随机事件流中包含11大事件,分别是触摸事件.手势事件.二指缩放事件.轨迹事件.屏幕旋转事件.基本导航事件.主要导航事件.系统按键事件.启动Activity事件.键盘事 ...

  5. Appium+python自动化(十六)- ADB命令,知否知否,应是必知必会(超详解)

    简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态. adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或 ...

  6. Appium+python自动化(十)- 元素定位秘籍助你打通任督二脉 - 上卷(超详解)

    简介 你有道灵光从天灵盖喷出来你知道吗,年纪轻轻就有一身横练的筋骨,简直百年一见的练武奇才啊,如果有一天让你打通任督二脉,那还不飞龙上天啊.正所谓我不入地狱谁入地狱,警恶惩奸维护世界和平这个任务就交个 ...

  7. Appium+python自动化(十二)- Android UIAutomator终极定位凶“胸”器(七)(超详解)

    简介 乍眼一看,小伙伴们觉得这部分其实在异性兄弟那里就做过介绍和分享了,其实不然,上次介绍和分享的大哥是uiautomatorviewer,是一款定位工具.今天介绍的是一个java库,提供执行自动化测 ...

  8. 笨办法学Python(二十九)

    习题 29: 如果(if) 下面是你要写的作业,这段向你介绍了“if语句”.把这段输入进去,让它能正确执行.然后我们看看你是否有所收获. people = 20 cats = 30 dogs = 15 ...

  9. Appium+python自动化(十五)- Android 这些基础知识,你知多少???(超详解)

    简介 前边具体操作和实战已经讲解和分享了很多了,但是一些android的一些基础知识,你又知道多少了,你都掌握了吗?这篇就由宏哥给小伙伴们既是一个分享,又是对前边的一次总结.为什么要对这些做一个简单的 ...

随机推荐

  1. python 实现一个计算器功能

    #s = '1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )' #第 ...

  2. scrapy实战8关于数据异步写入mysql:

    环境:python3 爬取网址:腾讯社招(http://hr.tencent.com/position.php?keywords=&tid=0&start=0#a)总共2202条数据 ...

  3. 按行读取String类型

    BufferedReader br = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(content.getByt ...

  4. spring的context:exclude-filter 与 context:include-filter

    1 在主容器中(applicationContext.xml),将Controller的注解打消掉 <context:component-scan base-package="com& ...

  5. Excel中RATE函数的Java实现

    public class RATE { /** * calculateRate:类excel中的RATE函数,计算结果值为月利率,年华利率 需*12期. <br/> * rate = ca ...

  6. [1045] PDOException in Connection.php line 295

    tp5实现登录功能时报错 在使用tp5框架实现登录功能的时候,点击login出现了 [1045] PDOException in Connection.php line 295 这个问题, 报错是 S ...

  7. [记录]Linux下大批量添加用户的方法

    Linux系统提供了创建大量用户的工具,可以让您立即创建大量用户,方法如下: (1)先编辑一个文本用户文件. 每一列按照/etc/passwd密码文件的格式书写,要注意每个用户的用户名.UID.宿主目 ...

  8. bs4——BeautifulSoup模块:解析网页

    解析由requests模块请求到的网页 import requests from bs4 import BeautifulSoup headers = {'User-Agent': 'Mozilla/ ...

  9. java开发---关于ORA00604和ORA12705

    MyEclipse和oracle连接中出现的一个问题: 在使用工具连接orcale数据库时报了这两个异常  ORA-00604和ORA12705 ; 查找问题原因: 大概猜测是与字符集有关系 , 确认 ...

  10. android开发--使用webView加载tel协议不会打开拨号盘解决

    在加载url之前进行判断,url是否是tel协议开头,然后进行加载,即可打开拨号盘 mWebView.setWebViewClient(new WebViewClient() { @Override ...