前言
Appium自动化测试中的常见模拟操作涵盖了多种用户交互行为,这些操作对于自动化测试框架来说至关重要,因为它们能够模拟真实用户的使用场景,从而验证应用程序的功能和稳定性。
以下是一些Appium自动化测试中常见的模拟操作:
基本操作
011、点击操作
示例: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 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
# 定义一个输入的封装方法
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 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
# 定义一个输入的封装方法
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()
下期更新滑动操作及高级手势操作,欢迎关注!
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。