引言
Appium是一个在移动应用自动化测试领域广泛应用的开源框架,通过提供跨平台解决方案,允许测试工程师利用统一的API对iOS、Android及Windows系统上的原生应用、混合应用以及移动Web应用执行自动化测试。不论你的应用采用Objective-C、Swift、Java、Kotlin或其他任何遵循各平台标准UI组件规范的语言编写,Appium都能够借助WebDriver协议与其进行无缝交互。
Appium核心优势
Appium的一大亮点在于对多种编程语言(如Java、Python、Ruby、JavaScript等)的广泛支持,这赋予了测试团队根据现有技术栈灵活选择编写测试脚本语言的能力。并且,Appium坚守非侵入式设计理念,确保无需改动待测应用源码即可实现自动化测试,这对维护高标准的测试实践意义重大。
Appium在现代软件开发生命周期中的作用
凭借其开源、跨平台、多语言支持以及全面覆盖各类移动应用的特点,Appium在软件开发生命周期的质量保证阶段发挥着至关重要的作用,成为了移动应用测试工程师手中的必备工具。
Appium环境配置步骤
配置版本清单
- Appium Desktop: 1.15.1
- Python: 3.8
- Appium-Python-Client: 2.7.1
- Selenium: 4.1.0
- Node.js: 16.0
- JDK: 1.8
- Android SDK: 24.4.1
安装指南
-
安装Node.js
-
安装JDK
-
安装Android SDK
-
安装Appium
-
安装Appium Desktop
-
安装Appium-Python-Client
- 运行命令
pip install Appium-Python-Client
进行安装。若出现“从appium导入webdriver时报错”,可参照以下解决方案:- 直接下载appium包并放置到项目中,下载链接:https://pan.baidu.com/s/1xIFgC3GC3_bSN5Iu07GYvQ 或 https://pan.baidu.com/s/11Z6KSOE7wUxYLyKIwCpR4w?pwd=ro4g
- 运行命令
-
安装Appium Inspector
- 随着Appium Desktop的迭代更新,其服务端与元素查看功能已分离。要获取元素信息,需单独下载Appium Inspector。官方下载地址:https://github.com/appium/appium-inspector/releases,建议下载的版本例如:Appium-Inspector-windows-2022.11.1.exe,当然也可下载最新的稳定版本。
-
查找Package名称和Activity名称
- 使用adb命令行工具查询:
- 查找Package名称与启动Activity:
adb shell dumpsys activity recents | find "intent={"
- 列出所有已安装的Package:
adb shell pm list packages
- 查找Package名称与启动Activity:
- 使用adb命令行工具查询:
以上便是搭建Appium测试环境的基本步骤和所需软件版本列表,按照上述流程配置好环境后,即可开始进行Appium驱动的移动应用自动化测试之旅。
# 导入webdriver
from time import sleep
import pytest
import desc as desc
from appium.webdriver.common.appiumby import AppiumBy
from appium.webdriver.common.touch_action import TouchAction
from selenium.webdriver.common.by import By
# from base.base_driver import driver_setup
from appium import webdriver
# 初始化参数
desired_caps = {
'platformName': 'Android', # 被测手机是安卓
'platformVersion': '8.1.0', # 手机安卓版本
'deviceName': 'vivo', # 设备名,安卓手机可以随意填写
'appPackage': 'com.zjzs.oa_app', # 启动APP Package名称
'appActivity': 'com.zjzs.oa_app.MainActivity', # 启动Activity名称
'unicodeKeyboard': True, # 使用自带输入法,输入中文时填True
'resetKeyboard': True, # 执行完程序恢复原来输入法
'noReset': True, # 不要重置App,如果为False的话,执行完脚本后,app的数据会清空,比如你原本登录了,执行完脚本后就退出登录了
'newCommandTimeout': 6000,
'automationName': 'UiAutomator2'
}
# 连接Appium Server,初始化自动化环境
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
sleep(2) # 暂停2秒钟
# 账号
# 查找元素,查找方式为 XPATH,目标元素的属性值为 //*[@text="Accessibility"]
name = driver.find_element(by=AppiumBy.XPATH, value='//*[@text="请输入用户账号"]')
# 点击查找到的元素
name.click()
sleep(1) # 暂停2秒钟
name.send_keys("username") # 输入账号
# 密码
# 查找元素,查找方式为 XPATH,目标元素的属性值为 //*[@text="Accessibility"]
pwd = driver.find_element(by=AppiumBy.XPATH, value='//*[@text="请输入6-16位密码"]')
# 点击查找到的元素
pwd.click()
sleep(1) # 暂停2秒钟
pwd.send_keys("123456") # 输入账号
# 点击登录
login = driver.find_element(by=AppiumBy.XPATH, value='//android.view.View[@content-desc="登录"]')
# 点击查找到的元素
login.click()
sleep(1) # 暂停2秒钟
# 确认协议
ok = driver.find_element(by=AppiumBy.XPATH, value='//android.widget.Button[@content-desc="确认"]')
# 点击查找到的元素
ok.click()
sleep(2) # 暂停2秒钟
# 进行断言,验证元素是否存在
# assert workstation_element.is_displayed(), '工作台元素未显示或不存在'
# 工作台元素是否存在
if driver.find_element(by=AppiumBy.XPATH, value='//android.view.View[@content-desc="工作台"]'):
print("登录成功")
else:
print("登录失败")
# 等待 3 秒,用于观察页面变化
sleep(3)
# 点击我的
TouchAction(driver).tap(x=944, y=1942).perform()
# 点击退出登录
TouchAction(driver).tap(x=540, y=1234).perform()
# 点击确定退出
TouchAction(driver).tap(x=740, y=1209).perform()
sleep(2) # 暂停2秒钟
# 关闭并退出 WebDriver
driver.quit()