Appium自动化测试中的常见模拟操作涵盖了多种用户交互行为,这些操作对于自动化测试框架来说至关重要,因为它们能够模拟真实用户的使用场景,从而验证应用程序的功能和稳定性。
以下是一些Appium自动化测试中常见的模拟操作:
基本操作
01
1、点击操作
示例:element.click() 针对元素进行点击操作
2、初始化:输入中文的处理
说明:如果连接的是虚拟机(真机无需加这两个参数,加上可能会影响手工输入),在初始化配置中增加两个参数:
-
"resetKeyboard": True, # 重置设备的输入键盘
-
"unicodeKeyboard": True # 采用unicode编码输入
"resetKeyboard": True, # 重置设备的输入键盘"unicodeKeyboard": True # 采用unicode编码输入
3、清空和输入操作
element.clear() 针对元素进行清空操作
element.send_keys("value") 针对元素进行输入操作
输入的封装:
def input_text(element, text): # 清除元素中的文本内容(为了保证代码的健壮性,在输入内容之前需要做一次清除操作。) element.clear() # 输入文本内容 element.send_keys(text)
4、获取元素的信息
获取元素的文本内容(获取的是元素text属性的内容)
element.text
获取元素的位置
element.location 返回的值是一个字典,字典中包含x和y , x和y表示的是元素在手机屏幕左上角的点的坐标
获取取元素的大小
element.size 返回值是一个字典,字典中会包含 width和height, width表示的宽度,height表示的高度
获取元素的属性值
element.get_attribute("attribute") # attribute表示的是属性名称
获取ID值时, attribute= "resourceId"
获取的是class的值 , attribute="className"
如果attribute = "name"时,获取的是text或者content-desc(text优先,找不到text值,再去找content-desc的值)
代码示例:
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 # 定义一个输入的封装方法def input_text(element, text): # 清除元素中的文本内容(为了保证代码的健壮性,在输入内容之前需要做一次清除操作。) element.clear() # 输入文本内容 element.send_keys(text) 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) # 定位到首页顶部搜索框并点击 element = (By.ID, 'com.baidu.homework:id/tv_homepage_search_item') search_element = get_element_new(driver_zyb, element) search_element.click() # 定位到输入框并输入"英语学习" element = (By.ID, 'com.baidu.homework:id/index_search_et_search_text') input_element = get_element_new(driver_zyb, element) input_text(input_element, '英语学习') # 获取元素的文本内容(获取的是元素text属性的内容) print(f"输入框元素的文本信息是: {input_element.text}") # 获取元素的位置(返回的值是一个字典,字典中包含x和y , x和y表示的是元素在手机屏幕左上角的点的坐标) print(f"输入框的元素的位置坐标是: {input_element.location}") # 获取取元素的大小 print(f"输入框元素的文本信息是: {input_element.size}") ''' 获取元素的属性值 element.get_attribute("attribute") # attribute表示的是属性名称 获取ID值时, attribute = "resourceId" 获取的是class的值, attribute = "className" 如果attribute = "name" 时,获取的是text或者content - desc(text优先,找不到text值,再去找content - desc的值) ''' print(f"输入框元素的ID属性信息是: {input_element.get_attribute('resourceId')}") print(f"输入框元素的class属性信息是: {input_element.get_attribute('className')}") print(f"输入框元素的name属性信息是: {input_element.get_attribute('name')}") # 关闭驱动 time.sleep(3) print("代码执行完毕") driver_zyb.quit()
2、获取手机操作
1、获取手机分辨率
目的:保证脚本在不同机型上都能实现滑屏的操作。
示例:driver.get_window_size()
说明:返回的值是字典类型, 包含 height 和 width 高度和宽度的值
2、获取手机截图
示例:driver.get_screenshot_as_file(filename)
说明:filename:1、路径必须手动创建 2、文件名称必须是以PNG结尾
3、设置/获取手机网络
目的:主要是为了实现视频类的app中,视频播放过程中网络切换时会有提示信息的操作。
示例:
-
driver.set_network_connection(connectionType) # connectionType 网络类型的值
-
driver.network_connection 获取手机网络
在 Appium 中,网络类型通过
driver.set_network_connection(connection type)
方法进行设置。其中,connection type参数表示需要被设置的网络类型,常用的网络类型有以下几种:
-
飞行模式:1
-
WiFi 流量:2
-
数据流量:4
-
数据和 WiFi 全部打开:6
4、模拟键盘操作
示例:driver.press_keycode(键值)
说明:常用的三个键值:3 HOME键, 4 返回键 , 66 回车键
5、手机通知栏操作
示例:driver.open_notifications()
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 # 定义一个输入的封装方法def input_text(element, text): # 清除元素中的文本内容(为了保证代码的健壮性,在输入内容之前需要做一次清除操作。) element.clear() # 输入文本内容 element.send_keys(text) 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) # 获取手机分辨率 print(driver_zyb.get_window_size()) # 获取手机截图 """ 1、路径必须手动创建 2、文件名称必须是以PNG结尾""" current_time_file = "/error"+str(time.time()) # 通过文件名拼接当前时间戳的方式构造唯一文件名 filename = "/Users/work_related/image" + current_time_file + ".png" # 需要设置正确的路径 driver_zyb.get_screenshot_as_file(filename) # 设置手机网络为Wi-Fi,然后获取当前手机的网络类型 """飞行模式:1 WiFi 流量:2 数据流量:4 数据和 WiFi 全部打开:6""" driver_zyb.set_network_connection(2) # 设置手机网络为Wi-Fi print(f"当前手机的网络类型是:{driver_zyb.network_connection}") # 获取当前手机的网络类型 # 模拟键盘操作 '''常用的三个键值:3 HOME键, 4 返回键 , 66 回车键''' # 定位到首页顶部搜索框并点击 element = (By.ID, 'com.baidu.homework:id/tv_homepage_search_item') search_element = get_element_new(driver_zyb, element) search_element.click() # 定位到输入框并输入"英语学习" element = (By.ID, 'com.baidu.homework:id/index_search_et_search_text') input_element = get_element_new(driver_zyb, element) input_text(input_element, '英语学习') # 返回到上一页 driver_zyb.press_keycode(4) time.sleep(3) # home键返回 driver_zyb.press_keycode(3) time.sleep(3) # 打开手机通知栏 driver_zyb.open_notifications() # 关闭驱动 time.sleep(3) print("代码执行完毕") driver_zyb.quit()
下期更新滑动操作及高级手势操作,欢迎关注!
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。