Appium 是一个开源工具,用于自动化 iOS、Android 和 Windows 应用程序的测试。
Appium 作为一个服务器启动,它接收到客户端(如脚本或测试代码)发出的命令,然后将这些命令转换成适当的动作在移动设备上执行。Appium的工作原理是通过使用WebDriver协议来与设备交互。
一、依赖安装:Node.js 和 npm
Appium
使用Node.js
(https://nodejs.org/en)开发,运行时系统要求也只是Node.js
和 npm
。
https://appium.io/docs/en/latest/quickstart/requirements/
默认node.js安装时,会带npm,
默认安装在 C:\\Program Files\nodejs
目录下。
我们不需要安装 Chocolatey
,如下图这一步不选。
二、安装 Appium
这个安装需要访问外网,如果要设置走代理,可以如下安装
npm config set proxy http://127.0.0.1:7897
npm config set https-proxy http://127.0.0.1:7897
只需下面命令,就可以完成安装Appium
# 安装
npm i -g appium
# 运行
appium
# 更新 Appium
npm update -g appium
三、安装 UiAutomator2 Driver
驱动程序(Driver)是一个允许 Appium
自动化特定平台的接口。
我们这里演示在 Android 平台的自动化,所以需要安装下面几个:
3.1、 Java JDK
下载地址:
https://adoptium.net/en-GB/temurin/releases/
安装完后,需要设置 JAVA_HOME
环境变量以指向 JDK
主目录。它将包含 bin
、 include
和其他目录。
3.2、Android SDK
我们这里不下载 Android Studio
,而是下载 命令行工具。
下载地址在下面页面的最后部分。
https://developer.android.com/studio?hl=zh-cn#command-tools
下载后我们使用 sdkmanager
这个命令来下载对应版本的SDK:
https://developer.android.com/tools/sdkmanager?hl=zh-cn
注意,下载后的安装目录问题:
- 将解压缩的
cmdline-tools
目录移至您选择的新目录,例如android_sdk
。这个新目录就是您的Android SDK
目录。 - 在解压缩的
cmdline-tools
目录中,创建一个名为latest
的子目录。 - 将原始
cmdline-tools
目录内容(包括lib
目录、bin
目录、NOTICE.txt
文件和source.properties
文件)移动到新创建的latest
目录中。现在,您就可以从这个位置使用命令行工具了。
Android 11
对应的 API
级别是 30
。你可以使用以下命令来安装 Android API 30
的 SDK
:
./sdkmanager "platforms;android-30" "build-tools;30.0.3"
安装完毕可以通过 sdkmanager --list_installed
命令来确认 SDK
是否成功安装
注意把 D:\android_sdk\platform-tools
工具的目录要放在 path 中,这样就可以直接使用adb
这样的命令了。
另外还需设置 ANDROID_HOME
环境变量以指向Android SDK
的安装目录。您通常可以在 Android Studio SDK
管理器中找到该目录的路径。它将包含 platform-tools
和其他目录。
3.3、连接真实设备
以小米手机为例,通过下面方式找到对应的android版本:
- 找到设置,点击进入。
- 点击我的设备。
- 点击全部参数。
- 找到Android版本。
基于这个版本,我们上面sdkmanager
安装对应版本的开发工具。
如果使用真实设备,您应该将其设置为开发并启用 USB 调试。
注意:小米设备需要登录小米账号后才能开启“USB调试(安全设置)”
连接模拟器或设备后,您可以运行 adb devices
(通常位于 $ANDROID_HOME/platform-tools/adb
的二进制文件)来验证您的设备是否显示为已连接。
3.4、安装驱动程序
由于 UiAutomator2
驱动程序由核心 Appium
团队维护,因此它有一个“官方”驱动程序名称,您可以使用该名称通过 Appium 扩展 CLI 轻松安装它:
# 安装
appium driver install uiautomator2
# 升级
npm install -g appium-uiautomator2-driver
3.5、检查
再次启动 Appium
服务器(运行 appium
),您应该看到新安装的驱动程序被列为可用:
四、python测试代码
首先安装依赖
pip install Appium-Python-Client
下面是滚动到电池选项界面的代码
import unittest
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.webdriver.common.appiumby import AppiumBy
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
capabilities = dict(
platformName='Android',
automationName='uiautomator2',
deviceName='Android',
appPackage='com.android.settings',
appActivity='.Settings',
language='zh',
locale='CN'
)
appium_server_url = 'http://192.168.1.5:4723'
class TestAppium(unittest.TestCase):
def setUp(self) -> None:
self.driver = webdriver.Remote(appium_server_url, options=UiAutomator2Options().load_capabilities(capabilities))
def tearDown(self) -> None:
if self.driver:
self.driver.quit()
def test_find_battery(self) -> None:
# Use UIAutomator's UiScrollable to scroll to the "Battery" element
scrollable = 'new UiScrollable(new UiSelector().scrollable(true).instance(0))'\
'.scrollIntoView(new UiSelector().textContains("电量").instance(0))'
battery_element = self.driver.find_element(AppiumBy.ANDROID_UIAUTOMATOR, scrollable)
# Click the Battery element once it is found and scrolled into view
battery_element.click()
if __name__ == '__main__':
unittest.main()
如果碰到安全限制问题,比如:
selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred while processing the command. Original error: Potentially insecure feature 'adb_shell' has not been enabled. If you want to enable this feature and accept the security ramifications, please do so by following the documented instructions at http://appium.io/docs/en/2.0/guides/security/
可以参看:
http://appium.io/docs/en/2.0/guides/security/
最简单就是用下面方式启动:
appium --relaxed-security