欢迎光临
我们一直在努力

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

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 time
from appium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from appium.options.android import UiAutomator2Options
from 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 time
from appium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from appium.options.android import UiAutomator2Options
from 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()

赞(0)
未经允许不得转载:171主机测评 » APP自动化测试|滑动和拖拽事件操作
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址