我们在使用APP过程中,经常有一些操作需要放大或者缩小,如浏览图片、查看地图等等,那么在自动化测试过程中怎么样实现这些操作呢?Appium 中webdriver提供了MultiAction(多点触控类)来模拟用户的多点操作。
MultiAction中常用方法:
add(self, * touch_action) 加载方法
将 touch_action 创建的对象通过 add() 方法添加到 MultiAction 中再执行,*touch_action 指的是一个或多个TouchAction 对象,指一个手指要执行的一连串的动作。
perform(self) 执行方法
将执行的操作发送到服务器的命令操作。
请参考官方链接:Appium Multitouch:移动手势的自动化
测试场景:
启动百度地图实现放大和缩小操作。
from appium import webdriver
from appium.webdriver.common.multi_action import MultiAction
from appium.webdriver.common.touch_action import TouchAction
desired_caps={
'platformName':'Android',
'platformVersion':'6.0.1',
'deviceName':'127.0.0.1:21503',
'appPackage':'com.baidu.BaiduMap',
'appActivity':'com.baidu.baidumaps.WelcomeScreen',
'noReset':True
}
driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
driver.implicitly_wait(30)
class multi_action:
def __init__(self):
self.screenX=driver.get_window_size()['width']
self.screenY=driver.get_window_size()['height']
#放大操作
def screen_pinch(self):
fisrtFinger = TouchAction(driver)
sencordFinger = TouchAction(driver)
zoomFinger = MultiAction(driver)
fisrtFinger.press(x=self.screenX*0.4,y=self.screenY*0.4).wait(1000).move_to(x=self.screenX*0.2,y=self.screenY*0.2).wait(1000).release()
sencordFinger.press(x=self.screenX*0.6,y=self.screenY*0.6).wait(1000).move_to(x=self.screenX*0.8,y=self.screenY*0.8).release()
zoomFinger.add(self.fisrtFinger,self.sencordFinger)
zoomFinger.perform()
#缩小操作
def screen_zoom(self):
fisrtFinger = TouchAction(driver)
sencordFinger = TouchAction(driver)
zoomFinger = MultiAction(driver)
fisrtFinger.press(x=self.screenX * 0.2, y=self.screenY * 0.2).wait(1000).move_to(x=self.screenX * 0.4, y=self.screenY * 0.4).wait( 1000).release()
sencordFinger.press(x=self.screenX*0.8,y=self.screenY*0.8).wait(1000).move_to(x=self.screenX*0.6,y=self.screenY*0.6).wait(1000).release()
zoomFinger.add(self.fisrtFinger,self.sencordFinger)
zoomFinger.perform()
if __name__ == '__main__':
ma=multi_action()
import time
time.sleep(5)
for i in range(3):
ma.screen_pinch()
for i in range(4):
ma.screen_zoom()