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

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

发布时间:2019-08-08 16:30,

浏览次数:621

, 标签:

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 webdriver12 from selenium.common.exceptions import NoSuchElementException

13 from appium.webdriver.common.touch_action import TouchAction 14 from

appium.webdriver.common.multi_action import MultiAction15 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 on2019-8-08 @author: 北京-宏哥 QQ交流群:707699217 Project:学习和使用appium自动化测试-

多点触控操作''' # 3.导入模块 from appium import webdriver from selenium.common.exceptions

import NoSuchElementExceptionfrom appium.webdriver.common.touch_action import

TouchActionfrom 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()

小结

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

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

个人公众号                                                             微信群

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值