APP自动化测试 ------ 滑动和拖拽事件操作!

1545 篇文章 61 订阅
1458 篇文章 54 订阅

前言

Appium自动化测试中的常见模拟操作涵盖了多种用户交互行为,这些操作对于自动化测试框架来说至关重要,因为它们能够模拟真实用户的使用场景,从而验证应用程序的功能和稳定性。

今天讲解滑动和拖拽事件操作:

1、swipe滑动事件

示例:driver.swipe(startx, starty, endx, endy, duration=None)

说明:duration用来降低滑屏的速度及惯性, 单位是ms

2、swipe滑动事件封装

# 定义一个封装滑屏操作的方法def slide_screen(driver, direction, count=1):    w = driver.get_window_size()["width"]  # 获取手机屏幕的宽度    h = driver.get_window_size()["height"] # 获取手机屏幕的高度    # w=1080  h=1920    if direction == "up":  # 往上滑        zb = (w/2, h*0.9, w/2, h*0.1)    elif direction == "down":  # 往下滑        zb = (w/2, h*0.1, w/2, h*0.9)    elif direction == 'left':  # 往左滑        zb = (w*0.9, h/2, w*0.1, h/2)    elif direction == 'right':   # 往右滑        zb = (w*0.1, h/2, w*0.9, h/2)    else:        print("无法识别滑动方向,请重新输入!")    for i in range(count):        driver.swipe(*zb, duration=1200)        time.sleep(1)

3、swipe边滑动边查找封装

目的:针对频道类的元素进行滑动选择对应的频道

# 封装一个边滑动边查找的方法def search_while_sliding(driver, element, element_info):    ele_size = element.size  # 获取元素大小    width = ele_size["width"]  # 获取元素的宽度    height = ele_size["height"]  # 获取元素的高度    # 获了element元素左上角点的坐标    ele_position = element.location    x = ele_position["x"]  # 获取左上角点的x坐标值    y = ele_position["y"]  # 获取左上角点的y坐标值
    start_x = x + width*0.9  # 获取的是起始点X的值    y = y + height*0.5  # 获取的是起始及终止点的Y的值    end_x = x + width*0.1   # 获取的是终止点X的值    while True:        page = driver.page_source  # 记录查找前的页面资源,通过对比页面资源来退出死循环        try:            driver.find_element(*element_info).click()  # 如果有找到对应的元素那么点击并返回            return True        except Exception as e:            print("没有找到该元素!")        driver.swipe(start_x, y, end_x, y, duration=1000)  # 没有找到元素,那么滑屏后再对比并重新查找        time.sleep(1)        if page == driver.page_source:            print("滑屏操作完成且没有找到元素信息")            return False

备注:

  • while True:创建一个无限循环。

  • page = driver.page_source:记录查找前的页面资源,用于后续对比以判断是否退出循环。

  • driver.find_element(*element_info).click():尝试查找并点击指定元素,如果找到则返回True。

  • except Exception as e:如果没有找到元素,打印提示信息。

  • driver.swipe(start_x, y, end_x, y, duration=1000):没有找到元素时,执行滑屏操作。

  • time.sleep(1):等待一段时间。

  • if page == driver.page_source:如果滑屏操作完成后页面资源没有变化,说明没有找到元素,打印相关提示并返回False.

4、scroll滑动事件

示例:

driver.scroll(source_element, target_element)

说明:scroll是通过元素来进行滑动的

  • source_element表示原元素;target_element表示目标元素,滑动原理是由原元素拖动到目标元素的位置

  • scroll无法设置滑动的持续时间,带有一定惯性。主要用于IOS中,android高版本系统可以使用。

import timefrom appium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom appium.options.android import UiAutomator2Optionsfrom selenium.webdriver.support import expected_conditions as EC  # 定义一个初始化APP的方法def start_app(app_package, app_activity):     # 定义desired_caps 字典,初始化app的配置信息    desired_caps = {        "platformName": "android",  # 表示的是android        "platformVersion": "10",  # 表示的是设备系统的版本号        "deviceName": "DWV6R19A10002101",  # 表示的是设备的ID名称        "appPackage": app_package,  # 表示的是app的包名        "appActivity": app_activity,  # 表示的是app的界面名        "newCommandTimeout": 100000,        "noReset": True,  # 用来记住app的session,如果有登陆或做过初始化的操作,为True时,后面不需要再操作        "resetKeyboard": True,  # 重置设备的输入键盘        "unicodeKeyboard": True  # 采用unicode编码输入    }    # 创建 Appium 驱动实例    options = UiAutomator2Options().load_capabilities(desired_caps)    driver = webdriver.Remote("http://localhost:4723/wd/hub", options=options)     # 启动应用程序    driver.wait_activity(desired_caps, 5)    return driver  # 定义一个获取元素的方法def get_element_new(driver, element):    element = WebDriverWait(driver, 10).until(EC.visibility_of_element_located(element))    return element  if __name__ == "__main__":    # 本次启动的应用程序包名和活动名(作业帮)    app_package_zyb = "com.baidu.homework"    app_activity_zyb = ".activity.index.IndexActivity"     # 启动应用程序    driver_zyb = start_app(app_package_zyb, app_activity_zyb)     # 进入「我的」tab    my_tab = (By.XPATH, '//android.widget.RelativeLayout[@resource-id="com.baidu.homework:id/tab_my_layout"]')    get_element_new(driver_zyb, my_tab).click()     # 找到「我的活动」元素    My_activities = (By.XPATH, '//android.widget.TextView[@resource-id='                               '"com.baidu.homework:id/user_item_title" and @text="我的活动"]')    my_activities = get_element_new(driver_zyb, My_activities)     # 找到「我的订单」元素    my_order = (By.ID, 'com.baidu.homework:id/user_item_title')    my_order_element = get_element_new(driver_zyb, my_order)     # 滑动    driver_zyb.scroll(my_activities, my_order_element)     # 关闭驱动    time.sleep(3)    print("代码执行完毕")    driver_zyb.quit()

5、drag_and_drop拖拽事件

原理:从一个元素滑动到另外一个元素的位置, 同时也能实现将一个元素拖动另一个元素当中。

示例:

driver.drag_and_drop(source_element, target_element)

说明:

  • source_element 表示的是被拖动的元素对象

  • target_element 表示的是目标元素对象

import timefrom appium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom appium.options.android import UiAutomator2Optionsfrom selenium.webdriver.support import expected_conditions as EC

# 定义一个初始化APP的方法def start_app(app_package, app_activity):
    # 定义desired_caps 字典,初始化app的配置信息    desired_caps = {        "platformName": "android",  # 表示的是android        "platformVersion": "10",  # 表示的是设备系统的版本号        "deviceName": "DWV6R19A10002101",  # 表示的是设备的ID名称        "appPackage": app_package,  # 表示的是app的包名        "appActivity": app_activity,  # 表示的是app的界面名        "newCommandTimeout": 100000,        "noReset": True,  # 用来记住app的session,如果有登陆或做过初始化的操作,为True时,后面不需要再操作        # "resetKeyboard": True,  # 重置设备的输入键盘 (连接虚拟机时使用)        # "unicodeKeyboard": True  # 采用unicode编码输入(连接虚拟机时使用)    }    # 创建 Appium 驱动实例    options = UiAutomator2Options().load_capabilities(desired_caps)    driver = webdriver.Remote("http://localhost:4723/wd/hub", options=options)
    # 启动应用程序    driver.wait_activity(desired_caps, 5)    return driver

# 定义一个获取元素的方法def get_element_new(driver, element):    element = WebDriverWait(driver, 10).until(EC.visibility_of_element_located(element))    return element

if __name__ == "__main__":    # 本次启动的应用程序包名和活动名(作业帮)    app_package_zyb = "com.baidu.homework"    app_activity_zyb = ".activity.index.IndexActivity"
    # 启动应用程序    driver_zyb = start_app(app_package_zyb, app_activity_zyb)
    # 进入「我的」tab    my_tab = (By.XPATH, '//android.widget.RelativeLayout[@resource-id="com.baidu.homework:id/tab_my_layout"]')    get_element_new(driver_zyb, my_tab).click()
    # 找到「我的活动」元素    My_activities = (By.XPATH, '//android.widget.TextView[@resource-id='                               '"com.baidu.homework:id/user_item_title" and @text="我的活动"]')    my_activities = get_element_new(driver_zyb, My_activities)
    # 找到「我的订单」元素    my_order = (By.ID, 'com.baidu.homework:id/user_item_title')    my_order_element = get_element_new(driver_zyb, my_order)
    # 通过拖动来实现滑屏操作    driver_zyb.drag_and_drop(my_activities,  my_order_element)
    # 关闭驱动    time.sleep(3)    print("代码执行完毕")    driver_zyb.quit()

下期分享:高级手势操作&toast操作,欢迎关注!

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值