一、所需软件包
一、node.js(v20.1.1)
二、Android SDK(24.4.1版本)
三、Python(3.10)
四、PyCharm(2023.3.2)
五、Appium(1.21.0)
六、雷电模拟器(雷电9)
若不想单独去下载,想直接获取所有安装包,请访问百度网盘链接提取:https://pan.baidu.com/s/1LSzazfQ2PbdiMLfZ4WiWAQ?pwd=n4vi
二、环境配置
2.1环境配置之Node.js
在官网选择对应版本下载:https://nodejs.org/en/download/,如图所示。.msi 是一种 Windows 安装程序文件,而 .zip 是一个压缩包,解压即可,不需要安装。这里选择.msi格式(64位)。
完成下载后,双击.msi文件进行安装,安装成功后打开命令提示符窗口(win+R,再输入cmd回车)。输入node -v 获得node.js的版本信息则是安装成功,如图所示。(注意是node(空格)-v)。
2.2环境配置之Android SDK
①下载,解压Android SDK
进入Android中文网 http://www.androiddevtools.cn/,点击SDK Tools,点击android-sdk_r24.4.1-windows.zip下载压缩包并解压。如图所示。
②下载必要包
解压SDK到本地后,进入SDK目录,如图所示。双击启动SDK Manager.exe。点击Deselect All,然后勾选如图所示的包选项,点击Install 3packages...下载SDK必要的包。
③配置SDK环境变量
1)成功安装后Android SDK的根目录下应该同时具有了tools和platform-tools两个目录。
2)设置 ANDROID_HOME 系统变量(没有请新建)为Android SDK根目录 路径(类似JAVA_HOME)如图所示。
④把 Android SDK 路径下的tools 和 platform-tools 两个目录路径加入到系统环境变量 Path。如图所示。
⑤ 验证Android SDK环境
在终端(cmd)输入命令 adb ,回车,输出如下 adb 版本和帮助信息说明环境配置成功(只截取了一部分,后面还有很长),如图所示。
2.3 环境配置之Python
①下载安装文件: https://www.python.org/downloads/,这里选择Python 3.10.0版本,点击Windows installer(64-bit)下载Python安装程序。安装时选择Add Python 3.10 to PATH 自动配置Python环境变量。然后点击Install Now进行安装。
②打开命令提示符窗口(win+R,再输入cmd回车),输入python并回车,出现以下类似信息即为安装成功。如图所示。
③下载PyCharm:
https://www.jetbrains.com/pycharm/download/other.html,这里选择2023.3.2版本(其他版本亦可)。如图所示。
2.4环境配置之Appium
①下载安装文件https://github.com/appium/appium-desktop/releases/tag/v1.21.0(开启代理打开网址)MAC请下载dmg(这里下载1.21.0版本)
②直接双击appium-installer.exe文件安装就好,桌面会生成一个Appium的图标,此时已经可以通过Appium在桌面快捷方式启动Appium桌面应用程序。
③配置Appium环境变量:
找到上一步安装Appium指定的安装路径(右击桌面的Appium图标,打开文件所在位置可找到安装路径),如图所示。
将该路径下的Appium加入环境变量Path,如图所示。
④安装appium-python-client
启动终端(cmd)输入
pip install appium-python-client==2.11.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
,出现提示Successfully installed即成功。(终端输入
pip list
进行检查,如果出现下图中的WARNING提示,可按照要求更新或者不管),如图所示。
2.5 环境配置之模拟器
官网安装雷电模拟器:
安装网址:https://www.ldmnq.com/,选择雷电9(雷电5也可以)下载,如图所示。(安装过程中如果提示安装失败,请以管理员身份运行)
三、测试示例
3.1启动雷电模拟器
以学习通为测试对象,打开雷电模拟器,下载学习通。然后启动学习通,登录进入主页面。
3.2启动Appium
双击打开Appium,点击Start Server v1.21.0,开启Appium。
点击右上角的搜索符号,开启Appium Server。
这里需要编辑一个用于连接模拟器并打开学习通的参数配置(Desired Capabilities),具体有四个核心的参数,分别为platformName,deviceName,appPackage,appActivity。
下面介绍如何获取到这些参数
3.3配置Capability
3.3.1platformName
由于雷电模拟器是Android,所以platformName为Android
3.3.2deviceName
按住win+R键打开cmd窗口,输入
adb devices
结果如图所示,所以deviceName即为emulator-5554,也就是雷电模拟器的设备名。
3.3.2appPackage和appActivity
输入以下命令
adb shell dumpsys activity | findstr "mResume"
(Android 8.1之下版本使用
adb shell dumpsys activity | findstr "mFocus"
)查看学习通应用的appPackage和appActivity(必须保证雷电模拟器的学习通应用程序处于开启状态)如图所示。appPackage为com.chaoxing.mobile,appActivity为.main.ui.MainTabActivity
所以最终配置如下:
这里多设置了一个noReset,这个参数表明不停止应用程序和清除应用程序数据。
点击Start Session,等待一段时间(Appium会驱动雷电模拟器重启学习通,如果学习通处于黑屏状态导致连接失败,退出学习通,重新点击Start Session连接一次应该就可以了)如果出现以下界面,表示连接成功。
打开PyCharm,创建名为MobileAppTestProject的项目,新建一个名为XuexitongTest的python文件。如图所示。
输入以下测试脚本,点击PyCharm右上角的运行符号,执行测试脚本(确保Appium和雷电模拟器处于开启状态,脚本才能执行成功),脚本会驱动Appium自动打开学习通并依次点击“我”和“待办事项”,完成自动化测试。
from appium import webdriver
import time
from selenium.webdriver.common.by import By
# Appium Desired Capabilities
caps = {
"platformName": "Android",
"deviceName": "emulator-5554",
"appPackage": "com.chaoxing.mobile",
"appActivity": ".main.ui.MainTabActivity",
"noReset": True
}
# 与 Appium server 建立连接
driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", caps)
# 等待页面加载,可以根据实际情况调整等待时间
driver.implicitly_wait(10)
# arrange
expected = "待办事项"
# act
# 1.点击“我”
driver.find_element(By.XPATH, "//*[@text='我']").click()
time.sleep(2)
# 2.进入"待办事项"
driver.find_element(By.ID, "com.chaoxing.mobile:id/tvTitle").click()
time.sleep(2)
# 3.获取测试结果
actual = driver.find_element(By.ID, "com.chaoxing.mobile:id/tvTitle").text
# 断言
assert actual == expected, "实际值与期望值不相等"
print("测试通过")
# 关闭应用程序和驱动
driver.quit()
至此,移动应用测试环境配置成功。下面将介绍如何使用Appium。
四、Appium使用
4.1GUI说明
当Appium连接雷电模拟器成功后,应用程序的屏幕截图(快照视图)将出现在左边。如图所示。 可以在屏幕快照视图中使用鼠标来点击各种UI元素,将会看到它们突出显示。
窗口的中间是应用程序的层次结构, 表示为XML。如图所示。可以通过单击它树节点,或者通过点击屏幕快照视图中的元素来导航这棵树 然后它们在视图中会被强调显示。在应用层次结构中会直接将元素的id也就是resource-id值标记在树上,这对于 Appium定位元素很方便,可以快速看到 元素是否有id。
当一个元素被突出显示时,它的信息会出现右侧的元素信息视图中。如图所示。这个细节视图包括对元素的潜在操作,以及元素属性的表。这些属性将决定 Appium定位元素的策略。
以下是对于Appium上面操作栏的初步说明。
4.2Appium+Python常用API
4.2.1、驱动初始化及基础操作
webdriver.Remote(command_executor, desired_capabilities): 初始化 Appium 驱动。
driver.quit(): 关闭应用程序和驱动。
4.2.2、元素定位及操作
driver.find_element(by, value): 根据指定的定位方式和值找到单个元素。
driver.find_elements(by, value): 根据指定的定位方式和值找到一组元素。
element.click(): 点击元素。
element.send_keys(text): 向元素发送文本。
4.2.3、元素等待
time.sleep(seconds):强制等待,无论元素是否已准备好,都会等待指定的时间后执行 后续操作。
driver.implicitly_wait(seconds): 隐式等待,设置全局等待时间。在查找元素时等待一定的时间,如果在规定时间内找到了元素,则立即执行后续操作,否则等待超时后抛出异常。
WebDriverWait(driver, timeout).until(expected_conditions.condition):显示等待,在特定条件下等待一定时间,直到条件满足或等待超时。
4.2.4、页面导航
driver.get(url): 打开指定的 URL。
driver.back(): 返回上一页。
driver.forward(): 前进到下一页。
4.2.5、屏幕滑动与滚动
driver.swipe(start_x, start_y, end_x, end_y, duration): 在屏幕上执行滑动操作。
driver.scroll(origin_element, destination_element): 在页面上执行滚动操作。
对于滑动部分,若不理解,可以参考我找到的一篇博客(很详细)Appium + Python自动化测试学习之六:swipe滑屏操作实例-CSDN博客
4.3测试的注意事项
结合我自己使用Python+Appium+雷电模拟器的一些经验,以下是我在进行测试的过程中的一些经验之谈(注意事项)
4.3.1、对于元素定位
一般来说,我自己测试的过程中,大部分的点击代码都是使用页面上的Text文本(实在不行就使用绝对的xpath定位,前提是你能接受很长的一串xpath路径字符串)和少部分的ID进行定位。当然我很少选择xpath是迫不得已(一般来说文本定位都能够点得到)。对比如图所示。
使用文本:
4.3.2、对于Appium的使用
第一,对于本博客所使用的Appium有个不方便的点,就是雷电模拟器上的应用的页面切换不会在Appium中实现实时的同步更新,需要手动的去点击更新才能更新页面。
第二,就是每次执行Python脚本运行测试的时候,会自动断开Appium与雷电模拟器的连接(我每次执行完Python脚本,再次在Appium中点击刷新的按钮时,会提示连接错误,需要退出再次重连),所以建议元素定位时,一次性都写完脚本(千万别写一行语句,跑一次脚本,不然重连很费时间)
第三,当运行Python脚本进行测试的时候,建议先在雷电模拟器中退出当前的应用,否则可能测试时出现黑屏一直无法进入应用的情况(我觉得很可能是雷电模拟器的老毛病-->不稳定),感兴趣可以使用其他的模拟器(夜神模拟器)尝试。