太原网站制作建设,农商1号的网站建设费,专做网站公司,基于asp.net网站开发滑动屏幕方法swipe一般用于对页面进行上下左右滑动操作#xff0c;但自动化过程中还会遇到其他情况#xff0c;如对控件元素进行滑动、拖拽操作#xff0c;九宫格解锁#xff0c;手势操作#xff0c;地图的放大与缩小等。这些需要针对控件元素的滑动操作#xff0c;或者点…滑动屏幕方法swipe一般用于对页面进行上下左右滑动操作但自动化过程中还会遇到其他情况如对控件元素进行滑动、拖拽操作九宫格解锁手势操作地图的放大与缩小等。这些需要针对控件元素的滑动操作或者点至点、元素至元素之间的滑动操作使用swipe方法显然不是很方便这时候就可以用到appium里提供TouchAction类和MultiAction类。一TouchAction类1TouchAction类由webdriver库提供提供以下方法tap(self, elementNone, xNone, yNone, count1)点击点击元素el或坐标点(x, y) 1次press(self, elNone, xNone, yNone, pressureNone)短按按压元素el或坐标点(x, y)long_press(self, elNone, xNone, yNone, duration1000)长按长按元素el或坐标点(x, y)duration为按压时间默认1000mswait(self, ms0)暂停时间默认为0move_to(self, elNone, xNone, yNone)移动到滑动至目标元素el位置或目标坐标点(x, y)release(self)释放将指针提离屏幕结束操作perform(self)执行将命令发送到要操作的服务器来执行该操作注意坐标x、y为int型示例如下sslanguage-python# author: 给你一页白纸 from appium import webdriver # 需要导入模块TouchAction from appium.webdriver.common.touch_action import TouchAction desired_caps { platformName: Android, platformVersion: 10, deviceName: PCT_AL10, appPackage: com.ss.android.article.news, appActivity: .activity.MainActivity, automationName: uiautomator2, unicodeKeyboard: True, resetKeyboard: True, noReset: False, } # 启动app driver webdriver.Remote(http://127.0.0.1:4723/wd/hub, desired_caps) # 构造TouchAction实例对象 action TouchAction(driver) 按住点(x1, y1)等待1000ms滑动至点(x2, y2)释放 action.press(xx1, yy1).wait(1000).move_to(xx2, yy2).release() # 执行操作 action.perform()2tap点击# 点击元素的中心点 tap(elementele1) # 点击坐标(x1, y1) tap(xx1, yy1) # 以元素ele1左上角的x坐标向右移动x2单位y坐标向下移动y2单位在点(xx2, yy2)上点击 tap(elementele1, xx2, yy2)3press短按# 按压元素 press(elele1) # 按压坐标 press(xx1, yy1) # 以元素ele1左上角的x坐标向右移动x2单位y坐标向下移动y2单位在点(xx2, yy2)上按压 press(elele1, xx2, yy2)4long_press长按# 按压元素默认1000ms long_press(elele1) # 按压坐标500ms long_press(xx1, yy1, duration500) # 以元素ele1左上角的x坐标向右移动x2单位y坐标向下移动y2单位在点(xx2, yy2)上按压 long_press(elele1, xx2, yy2)5move_to移动至目标点# 该方法需要与press()、long_press()结合使用 # 从另一个点移动至目标元素ele1 move_to(elele1) # 从另一个点移动至点(x1, y1) move_to(xx1, yy1) # 从另一个点移动至点(xx2, yy2), (x, y)为元素ele1左上角的坐标 move_to(elele1, xx2, yy2)6wait等待# 等待如等待500ms wait(500)7release释放# 释放操作与按压、长按结合使用 release()8perform执行# 将动作命令发送至服务器来执行该动作如 action TouchAction(driver).press(xx1, yy1).move_to(xx2, yy2).release() 执行滑动操作 action.perform()二多点触控MultiAction类1MultiAction类中提供以下方法add(self,touch_actions)参数touch_actions为触摸操作集合将一个或多个触摸操作添加至当前的多点触控实例中perform(self)执行多点触控操作使用场景如页面的放大、缩小等2示例sslanguage-python# author: 给你一页白纸 from appium import webdriver from appium.webdriver.common.touch_action import TouchAction # 需要导入模块MultiAction from appium.webdriver.common.multi_action import MultiAction desired_caps { platformName: Android, platformVersion: 10, deviceName: PCT_AL10, appPackage: com.ss.android.article.news, appActivity: .activity.MainActivity, automationName: uiautomator2, unicodeKeyboard: True, resetKeyboard: True, noReset: False, } # 启动app driver webdriver.Remote(http://127.0.0.1:4723/wd/hub, desired_caps # 创建两个触摸事件 action TouchAction(driver) action1 action.press(ele1).move_to(ele2).release() action2 action.press(x50, y50).move_to(x100, y200).release() # 创建MultiAction实例对象 multi_action MultiAction(driver) # 将触摸事件加入TouchAction对象 multi_action.add(action1, action2) # 执行事件 multi_action.perform()三使用场景1TouchAction使用场景–控件元素滑动今日头条顶部菜单栏向左滑动思路长按视频元素滑动至关注元素位置然后释放# 关注按钮元素 concern_ele driver.find_element_by_xpath(//*[content-desc关注]) # 视频按钮元素 video_ele driver.find_element_by_xpath(//*[content-desc视频]) action TouchAction(driver) 长按视频元素滑动至关注元素位置然后释放 action.long_press(video_ele).move_to(concern_ele).release().perform()还有下面这种形式通过对滑动控件元素来选择时间思路通过向上滑动选择年月日。以日期选择控件为例按压日期元素滑动至【确定】按钮即可滚动日期由于元素属性的原因这里不能选择精确的日期# 日期元素 day_ele driver.find_element_by_id(resource-id) # 视频按钮元素 sure_ele driver.find_element_by_xpath(//*[text确定]) action TouchAction(driver) # 长按日期元素滑动至确定按钮元素位置然后释放 action.long_press(day_ele).move_to(sure_ele).release().perform()2TouchAction使用场景–九宫格解锁# author: 给你一页白纸 from appium.webdriver.common.touch_action import TouchAction class NineSquUnlock(object): 九宫格解锁九宫格中每个点的坐标可以通过uiautomatorviewer获取以下仅为示例 def __init__(self, driver): self.driver driver self.pwd 1235789 # 解锁密码 self.unit_location [ (300, 300), (300, 600), (300, 900), (600, 200), (600, 600), (600, 900), (900, 200), (900, 600), (900, 900) ] def unlock(self): # 将密码转换为对应坐标点的索引获取密码对应的坐标点 pwd_loc [] for i in self.pwd: unit_index self.unit_location[int(i)] pwd_loc.append(unit_index) action TouchAction(self.driver) # 按压起点 action.press(*pwd_loc[0]).wait(200) # 根据坐标点滑动 for i in range(1, len(pwd_loc)): action.move_to(*pwd_loc[i]).wait(200) # 释放动作并执行 action.release().perform() if __name__ __main__: # 调试构造的driver仅为示例 from appium import webdriver driver webdriver.Remote() NineSquUnlock(driver).unlock()3MultiAction使用场景app中地图的放大、缩小app中图片的放大、缩小。如下图中A、B、C、D四个坐标点1所示滑动操作则放大图片2所示滑动操作则缩小照片。代码参考第二步中示例。最后作为一位过来人也是希望大家少走一些弯路在这里我给大家分享一些软件测试的学习资料和我花了3个月整理的软件测试自学全栈这些资料希望能给你前进的路上带来帮助。视频文档获取方式这份文档和视频资料对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴我走过了最艰难的路程希望也能帮助到你以上均可以分享点下方小卡片即可自行领取。