一、基础操作
- 1、安装和配置:包括安装 Appium 服务器、设置环境变量等。
- 2、启动服务器:使用命令行或相关工具启动 Appium 服务器。
- 3、连接设备或模拟器:将测试设备或模拟器连接到计算机上。
- 4、识别应用程序:指定要测试的应用程序的相关信息,如包名和活动名。
上述1~4内容可以参考:
APP自动化测试-Appium Inspector入门操作指南-CSDN博客
- 5、进行元素定位:使用各种定位方法找到应用界面中的元素。
- 6、执行操作:例如点击、输入文本、滑动等。
本篇会进行5~6(元素定位与操作)的入门介绍
- 7、等待元素出现:在执行操作前等待特定元素的出现。
- 8、获取元素属性:获取元素的属性值,如文本、可见性等。
- 9、断言验证:验证应用的状态或元素的属性是否符合预期。
- 10、处理异常情况:处理可能出现的错误和异常。
- 11、编写测试用例:根据需求编写自动化测试用例。
- 12、运行测试用例:执行编写好的测试用例。
- 13、查看测试报告:查看测试结果和报告,分析测试的通过率和错误情况。
- 14、调试和优化:对出现问题的测试进行调试和优化。
- 15、持续集成:将 Appium 集成到持续集成环境中,实现自动化测试的持续运行
常用基本操作示例:
1、判断手机是否安装app
- 判断手机是否安装app driver.is_app_installed("包名")
返回值:True 有安装app ; False 没有安装app
2、获取包名和界面名
- driver.current_package 获取当前脚本运行中的app的包名
- driver.current_activity 获取当前脚本运行中的app的界面名
3、安装卸载app以及判断是否安装app
- 安装app driver.install _app(apk路径)
- 卸载app driver.remove_app(app包名)
4、将应用置于后台运行
- driver.background_app(seconds) # seconds 表示的是将app置于后台运行多少秒的时间
代码示例:
import time
from appium import webdriver
from appium.options.android import UiAutomator2Options
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
}
# 创建 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
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)
# 判断手机是否安装"CSDN"APP
Is_app = driver_zyb.is_app_installed("net.csdn.csdnplus")
print(f"手机是否安装CSDN:{Is_app}")
# 获取当前脚本运行中的app的包名
current_package = driver_zyb.current_package
print(f"当前脚本运行中的app的包名是:{current_package}")
# 获取当前脚本运行中的app的界面名
current_activity = driver_zyb.current_activity
print(f"当前脚本运行中的app的界面名是:{current_activity}")
# 把应用置于后台运行5秒
seconds = 5
driver_zyb.background_app(seconds)
# 停止应用程序,退出驱动
time.sleep(3)
driver_zyb.quit()
二、元素定位
元素定位的概念
Appium 元素定位是在 Appium 自动化测试中,确定应用程序界面中特定元素的过程。
以下是一些常见的 Appium 元素定位方法:
- 通过 ID 定位:元素具有唯一的 ID 属性。
- 通过文本定位:根据元素显示的文本内容进行定位。
- 通过类名定位:使用元素的类名进行定位。
- 通过 Xpath 定位:使用 XPath 表达式来定位元素。
- 通过Accessibility ID 定位:类似于 ID 定位。
- 通过图像定位:通过元素的图像特征来定位。
在进行元素定位时,需要注意以下几点:
- 元素的唯一性:确保定位的元素具有唯一性,避免定位到多个元素。
- 应用的稳定性:某些情况下,应用的界面可能会发生变化,需要及时更新元素定位方式。
- 定位方式的选择:根据实际情况选择合适的定位方式。
- 元素属性的准确性:确保使用的元素属性准确无误。
元素定位举例:
1.1 通过ID定位元素
- 通过元素的id来进行元素定位
- driver.find_element(By.ID, id的值)
- 示例:element = driver.find_element(By.ID, 'com.baidu.homework:id/user_grade')
1.2 通过xpath定位元素
- 通过xpath的元素属性来进行元素定位
- driver.find_element(By.XPATH, xpath的值)
- 示例:
grade_xpath = '//android.widget.TextView[@resource-id="com.baidu.homework:id/gradeName" and @text="六年级"]'
element = driver.find_element(By.XPATH, grade_xpath)
1.3 通过class_name定位元素
- 通过元素的class属性值来进行元素定位
- driver.find_element(By.CLASS_NAME, class的值)
- 示例:class_path = driver_zyb.find_element(By.CLASS_NAME, "android.widget.ImageView")
代码示例:
import time
from appium import webdriver
from appium.options.android import UiAutomator2Options
from selenium.webdriver.common.by import By
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
}
# 创建 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
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)
time.sleep(5)
# 通过元素id来进行元素定位,定位到作业批改年级选择框并点击
element = driver_zyb.find_element(By.ID, 'com.baidu.homework:id/user_grade')
element.click()
# 通过XPATH来进行元素定位,定位到六年级并点击,设置年级成功
grade_xpath = '//android.widget.TextView[@resource-id="com.baidu.homework:id/gradeName" and @text="六年级"]'
element = driver_zyb.find_element(By.XPATH, grade_xpath)
element.click()
time.sleep(3)
# 通过CLASS_NAME定位到"我的"并点击,进入我的tab页
class_path = driver_zyb.find_element(By.CLASS_NAME, "android.widget.ImageView")
class_path.click()
# 停止应用程序,退出驱动
time.sleep(5)
print("运行结束")
driver_zyb.quit()