在网页中我们经常使用缩放操作来便利的查看具体的信息,在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中,稍后再执行。
用法
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里面的多线程和多进程的使用。
安装启动百度地图Android app 进入地图后分别进行放大缩小操作
放大(Zoom):则手指分别从B>A,C>D同时向外移动放大页面
缩小(pinch):则手指分别从A>B,D>C同时向中间移动缩小页面
想法与思路
安装启动百度地图APP
启动后代码实现点击“同意”,然后接着点击“进入地图”
进入地图由于最近刚过完七夕,有个抢红包的活动,将其关闭
执行缩小函数3次,将地图缩小三次;紧接着执行放大函数,将地图放大三次。
代码实现
(1)安装启动百度地图
(2)点击“同意”,然后接着点击“进入地图
活动关闭定位
代码实现:
# coding=utf-8
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()