1. 引言

建议先阅读引言,以便理解运行 Appium 和编写 Appium 脚本所涉及的概念。

本指南主要讲述如下内容:

  1. 安装 Appium
  2. 安装一种 Appium 驱动及其依赖
  3. 安装 Appium 客户端库
  4. 编写及运行简单的 Appium 自动化脚本

2. 系统要求

运行 Appium 服务的基础要求如下:

Appium 自身相对轻量,没有显著的磁盘空间和内存要求。Appium 甚至可以运行在资源受限的环境中,比如 Raspberry Pi,只要 Node.js 可用。

2.1. 驱动要求

用于自动化特定平台的驱动,可能有其他要求。请参阅相关平台的 Appium 驱动文档,以获取额外的依赖。几乎普遍的情况是,给定平台的 Appium 驱动需要安装该平台的开发者工具链和 SDK。

为协助满足驱动要求,(官方)驱动都附带 Appium Doctor 工具,该工具可以验证是否已经设置所有要求。在命令行用法文档中了解有关如何使用该工具的更多信息。


3. 安装 Appium

使用 npm 全局安装 Appium:

npm install -g appium

3.1. 启动 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 驱动


4. 安装 UiAutomator2 驱动

如果没有驱动,那么无法使用 Appium 做更多的事情。驱动是使 Appium 可以自动化特定平台的接口。

下面将要使用的驱动是 UiAutomator2

4.1. 设置安卓自动化要求

根据驱动,除 Appium 服务外,还需要以下设置。

4.1.1. Android SDK

设置 Android SDK 要求的最简单方式是下载 Android Studio。然后使用其 SDK 管理器下载如下项目:

也可以不使用 Android Studio 下载这些项目:

设置 ANDROID_HOME 环境变量,使其指向安装 Android SDK 的目录。通常可以在 Android Studio SDK 管理器中找到该目录的路径。它包含 platform-tools 及其他目录。

4.1.2. Java SDK

4.1.3. 准备设备

4.2. 安装驱动

4.2.1. 标准安装

像所有 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)。

4.2.2. 批量安装

可以将 Appium 与多个驱动一起使用。一种方法是为每个驱动运行 appium driver install <driver-name>,但也可以一次安装多个驱动:

appium setup

运行该命令将安装 Appium 的移动专用驱动:UiAutomator2、 XCUITest(macOS)和 Espresso。

也可以使用该命令批量安装桌面应用程序或桌面浏览器的驱动。有关这方面的更多详细信息,请参阅 Setup 命令文档

4.2.3. 验证安装

UiAutomator2 驱动,像所有官方 Appium 驱动一样,自带 Appium Doctor 工具,它可以验证是否已正确设置所有先决条件:

appium driver doctor uiautomator2

本教程侧重于基本要求,因此 Appium Doctor 可能建议一个或多个可选的修复。但如果看到必须的修复为 0,那么意味着一切都已设置好!

再次启动 Appium 服务,可以看到新安装的驱动被列为可用:

[Appium] Available drivers:
[Appium]   - uiautomator2@2.0.5 (automationName 'UiAutomator2')

完成 Android 设置,并且安装 UiAutomator2 驱动后,即可编写第一个测试!


5. 编写测试(Python)

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()

上面的代码执行如下操作:

  1. 定义一组发送到 Appium 服务的“Capabilities”(参数),这样 Appium 就知道想要自动化的是什么类型的东西
  2. 在内建的 Android Bluetooth 应用上启动 Appium 会话
  3. 寻找“Bluetooth”列表项,然后点击它
  4. 为视觉效果而暂停
  5. 终止 Appium 会话

在运行测试前,确保已在其他终端会话中运行 Appium 服务。然后执行脚本:

python test.py

如果一切顺利,将看到 Bluetooth 应用打开,导航到“Bluetooth ”视图,然后再次关闭。


官方文档