前言
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=1920if 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.locationx = 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 Trueexcept 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 elementif __name__ == "__main__":# 本次启动的应用程序包名和活动名(作业帮)app_package_zyb = "com.baidu.homework"app_activity_zyb = ".activity.index.IndexActivity"# 启动应用程序driver_zyb = start_app(app_package_zyb, app_activity_zyb)# 进入「我的」tabmy_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 elementif __name__ == "__main__":# 本次启动的应用程序包名和活动名(作业帮)app_package_zyb = "com.baidu.homework"app_activity_zyb = ".activity.index.IndexActivity"# 启动应用程序driver_zyb = start_app(app_package_zyb, app_activity_zyb)# 进入「我的」tabmy_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操作,欢迎关注!
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

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


1万+

被折叠的 条评论
为什么被折叠?



