建议先阅读引言,以便理解运行 Appium 和编写 Appium 脚本所涉及的概念。
本指南主要讲述如下内容:
运行 Appium 服务的基础要求如下:
^14.17.0 || ^16.13.0 || >=18.0.0
npm
版本 >=8
(npm
通常与 Node.js 绑定,但是可以独立更新)Appium 自身相对轻量,没有显著的磁盘空间和内存要求。Appium 甚至可以运行在资源受限的环境中,比如 Raspberry Pi,只要 Node.js 可用。
用于自动化特定平台的驱动,可能有其他要求。请参阅相关平台的 Appium 驱动文档,以获取额外的依赖。几乎普遍的情况是,给定平台的 Appium 驱动需要安装该平台的开发者工具链和 SDK。
为协助满足驱动要求,(官方)驱动都附带 Appium Doctor 工具,该工具可以验证是否已经设置所有要求。在命令行用法文档中了解有关如何使用该工具的更多信息。
使用 npm
全局安装 Appium:
npm install -g appium
使用命令行启动 Appium:
appium
这将启动 Appium 服务进程,该进程加载所有已安装的 Appium 驱动,并且开始等待来自客户端连接(比如测试自动化脚本)的新会话请求。由于服务进程独立于其客户端,因此必须在尝试开启新会话前显式地启动它。
启动服务时,控制台日志将列出客户端可以连接的所有有效 URL:
[Appium] You can provide the following URLs in your client code to connect to this server:
[Appium] http://127.0.0.1:4723/ (only accessible from the same host)
(... any other URLs ...)
当客户端请求新会话时,Appium 服务进程将开始记录关于该会话的所有细节,直到其终止。请牢记 - 运行 Appium 测试时,如果遇到问题,那么可以检查服务日志,获取更多细节。
虽然已经安装并且运行 Appium,但尚未绑定任何驱动,这意味着它不能自动化任何东西。下面将设置安卓自动化 - 安装 UIAutomator2 驱动。
如果没有驱动,那么无法使用 Appium 做更多的事情。驱动是使 Appium 可以自动化特定平台的接口。
下面将要使用的驱动是 UiAutomator2。
根据驱动,除 Appium 服务外,还需要以下设置。
设置 Android SDK 要求的最简单方式是下载 Android Studio。然后使用其 SDK 管理器下载如下项目:
也可以不使用 Android Studio 下载这些项目:
sdkmanager
下载 Android SDK Platform设置 ANDROID_HOME 环境变量,使其指向安装 Android SDK 的目录。通常可以在 Android Studio SDK 管理器中找到该目录的路径。它包含 platform-tools 及其他目录。
bin
、include
及其他目录adb devices
(通过位于 $ANDROID_HOME/platform-tools/adb
的二进制程序)验证设备是否显示为已连接像所有 Appium 驱动一样,通过 Appium Extension CLI 安装 UiAutomator2。由于 UiAutomator2 是由核心 Appium 团队维护的,因此它有一个“官方”驱动程序名称(uiautomator2
),这使得安装更简单。
在安装前,确保 Appium 服务未运行,然后运行以下命令:
appium driver install uiautomator2
该命令产生如下输出:
Attempting to find and install driver 'uiautomator2'
✔ Installing 'uiautomator2' using NPM install spec 'appium-uiautomator2-driver'
Driver uiautomator2@2.0.5 successfully installed
- automationName: UiAutomator2
- platformNames: ["Android"]
注意,安装过程说明驱动对哪些平台有效(在本例中为 Android),以及必须使用什么自动化名称(appium:automationName
capability)。
可以将 Appium 与多个驱动一起使用。一种方法是为每个驱动运行 appium driver install <driver-name>
,但也可以一次安装多个驱动:
appium setup
运行该命令将安装 Appium 的移动专用驱动:UiAutomator2、 XCUITest(macOS)和 Espresso。
也可以使用该命令批量安装桌面应用程序或桌面浏览器的驱动。有关这方面的更多详细信息,请参阅 Setup 命令文档。
UiAutomator2 驱动,像所有官方 Appium 驱动一样,自带 Appium Doctor 工具,它可以验证是否已正确设置所有先决条件:
appium driver doctor uiautomator2
本教程侧重于基本要求,因此 Appium Doctor 可能建议一个或多个可选的修复。但如果看到必须的修复为 0,那么意味着一切都已设置好!
再次启动 Appium 服务,可以看到新安装的驱动被列为可用:
[Appium] Available drivers:
[Appium] - uiautomator2@2.0.5 (automationName 'UiAutomator2')
完成 Android 设置,并且安装 UiAutomator2 驱动后,即可编写第一个测试!
Appium Python Client 是官方的 Appium Python 客户端,在 PYPI 上的包名为 Appium-Python-Client。它继承自 Selenium Python 绑定,因此安装 Appium Python 客户端包含 Selenium 绑定。
pip install Appium-Python-Client
Appium Python 客户端自动添加 appium:
前缀。
test.py:
import unittest
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.webdriver.common.appiumby import AppiumBy
capabilities = dict(
platformName='Android',
automationName='uiautomator2',
deviceName='Android',
appPackage='com.android.settings',
appActivity='.Settings',
language='en',
locale='US'
)
appium_server_url = 'http://localhost:4723'
class TestAppium(unittest.TestCase):
def setUp(self) -> None:
self.driver = webdriver.Remote(appium_server_url, options=UiAutomator2Options().load_capabilities(capabilities))
self.driver.implicitly_wait(10)
def tearDown(self) -> None:
if self.driver:
self.driver.terminate_app(capabilities["appPackage"])
self.driver.quit()
def test_find_bluetooth(self) -> None:
el = self.driver.find_element(by=AppiumBy.XPATH, value='//*[@text="Bluetooth"]')
el.click()
input("press any key to quit...")
if __name__ == '__main__':
unittest.main()
上面的代码执行如下操作:
在运行测试前,确保已在其他终端会话中运行 Appium 服务。然后执行脚本:
python test.py
如果一切顺利,将看到 Bluetooth 应用打开,导航到“Bluetooth ”视图,然后再次关闭。