前言:下面描述了一个简单的appium自动化测试,在结合现在工作任务,进行一个简单的自动化程序;包含了自动化测试环境的配置和一个简单的appium自动测试列子;
一、自动化环境搭建
详细的安装步骤请查看Appium安装及环境配置
1. 安装python
1、打开Python官网https://www.python.org/,点击Download,下载最新版本的Python。(Note:我用的是Python 3.10.11)
2、安装时记得第一个页面勾选"Add python to PATH",点击"install now",当出现successful时即安装完成。
3、安装完成之后,在cmd中输入"python",如果能看到Python的版本号就说明安装成功。
2.安装pycharm
打开pycharm官网,点击download会跳转到安装页面,下载免费的community社区版。 双击安装。
3.安装jdk
1、从官网下载最新jdk版本
2、下载完之后双击安装
3、配置环境变量
4.安装sdk
下载android sdk sdk下载地址
5.安装node
1、下载node.js官网地址
2、选择SDK Tools,在Windows中选择安装包下载
3、检查是否安装成功
在终端输入adb version,出现如图所示信息便表示安装成功
6.安装appium server
- 下载安装客户端(window)
桌面客户端官网地址
按照安装引导下一步到完成
- 命令版安装(支持window、mac、linux)
1、下载
(1)默认安装最新版本
npm install -g appium
(2)指定安装版本
npm install -g [email protected]
2、检查安装结果
运行cmd,输入
appium --version
若正常显示版本信息,则appium环境安装成功;
7、安装Appium-Python-Client
1、cmd输入
pip install Appium-Python-Client
2.如果从官方的资源库下载Appium-Python-Client失败,请自行更换下载源重新下载。
在命令行输入
pip install Appium-Python-Client -i http://pypi.douban.com/simple
二、代码
下面是appium连接机器人,使用元素定位来定位按钮,在进行点击
# 导入所需模块
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
from appium.webdriver.common.touch_action import TouchAction
from appium.webdriver.extensions.android.nativekey import AndroidKey
from appium.webdriver.common.mobileby import MobileBy as AppiumBy
from selenium.webdriver.support.wait import WebDriverWait
# 连接参数
desired_caps = {
"platformName": "Android", #移动平台名称
"appium:automationName": "uiautomator2", #自动化框架或者库
"appium:deviceName": "192.168.3.6", #连接设备的名称
"appium:appPackage": "cn.mrobot.web.hermes", #测试应用的app的包名
"appium:adbExecTimeout": 600000, #ADB命令执行超时时间
"appium:uiautomator2ServerInstallTimeout": 600000, #设置UIAutomator2服务器安装超时时间,以毫秒为单位。
"appium:appActivity": ".MainActivity", #指定应用的启动Activity。可以通过查看应用的AndroidManifest.xml文件获取
"appium:ensureWebviewsHavePages": True, #设置为True以确保所有webview都已加载页面,False则不进行等待,默认为False
"appium:nativeWebScreenshot": True, #设置为True以使用本机截图功能进行截图,False则使用Appium自己的截图功能,默认为False。
"appium:newCommandTimeout": 3600, #设置命令超时时间,以秒为单位。
"appium:connectHardwareKeyboard": True, #设置为True以允许硬件键盘输入,False则禁用,默认为False。
"appium:noReset": True #设置为True以保留应用的数据和状态,False则每次运行测试时重置应用,默认为False。
}
# # 连接appium server,初始化自动化环境
# driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
#连接appium server ,不初始化自动化环境
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps, initialize=False)
# 自定义异常类,用于表示步骤执行异常
class StepException(Exception):
def __init__(self, step, button_text):
self.step = step
self.button_text = button_text
def __str__(self):
return f"Step '{
self.step}': Button '{
self.button_text}' did not get clicked."
# 自定义函数来查找并点击按钮
def find_and_click_button(driver, button_class_name, button_text):
try:
# 查找按钮元素
buttons = WebDriverWait(driver, 10).until(
lambda drv: drv.find_elements(by=AppiumBy.CLASS_NAME, value=button_class_name)
)
for button in buttons:
if button.text == button_text:
button.click()
return
raise StepException("find_and_click_button", button_text) # 若没有找到按钮,抛出自定义异常
except Exception as e:
print(f"Error: {
e}")
raise
# 输入密码
def enter_password(driver, password):
try:
for digit in password:
find_and_click_button(driver, "android.view.View", digit)
raise StepException("enter_password", password) # 引发自定义异常,表示密码输入未成功
except Exception as e:
print(f"Error: {
e}")
raise
# 调用示例
try:
# 点击“我要下单”
find_and_click_button(driver, "android.widget.Button", "我要下单")
# 点击“输入密码”
find_and_click_button(driver, "android.view.View", "输入密码")
# 点击“bill测区发货166”
find_and_click_button(driver, "android.view.View", "bill测区发货166")
# 输入密码"100893"
enter_password(driver, '100893')
# 点击确认
find_and_click_button(driver, "android.view.View", "确认")
except StepException as e:
print(e)
上述代码中由于运行的时候总是点击不到一些按钮,就加了一个异常,对于没有点击到的元素就抛出一个异常并打印输出
三、adb连接机器人
前期准备:
1、机器人上的屏幕需要进入开发者模式,打开adb调试
2、连接机器人的WiFi,使用无线连接
- 打开终端,输入
adb connect 192.168.3.6:5555
若出现连接错误,请看adb connect连接设备出现offline
- 查看连接设备
adb devices
总结
1、自动环境的搭建感谢大佬的分享,我也是“借花献佛”;
2、代码部分也存在很多为实现的问题,暂时先记录一下学习的过程,后续继续更新;
3、如有问题,大家请指出;