跨平台UI自动化-Appium

Appium 简介

Appium旨在支持许多不同平台(移动端、网页端、桌面端等)的UI自动化。不仅如此,它还旨在支持用不同语言(JS、Java、Python等)编写的自动化代码。将所有这些功能结合到一个程序中是一项非常艰巨、甚至不可能的任务!

为了实现这一目标,Appium实际上被分为四个部分:

  • Appium Core - 定义核心API
  • Drivers - 实现与特定平台的连接
  • Clients - 用特定语言实现Appium的API
  • Plugins - 更改或扩展Appium的核心功能

因此,为了开始使用Appium自动化某些内容,你需要:

  • 安装Appium本身
  • 为你的目标平台安装驱动程序
  • 为你的目标编程语言安装客户端库
  • (可选)安装一个或多个插件

这些都是基础!如果你准备好加入,请继续快速入门

如果你想了解有关其运作方式的更多详细信息,请参阅以下页面了解背景材料:

最后,要了解Appium的起源,请查看Appium项目历史

安装 Appium

信息

安装前,请务必检查系统要求.

您可以使用 npm 在全局范围内安装 Appium:

css 复制代码
npm i -g appium

注意

目前不支持其他软件包管理器。

安装完成后,您应该可以从命令行运行 Appium:

复制代码
appium

你应该会看到一些输出结果,开头一行是这样的:

csharp 复制代码
[Appium] 欢迎来到 Appium v2.4.1

为了更新Appiums使用 npm:

sql 复制代码
npm update -g appium

就是这样!如果你看到这个,说明 Appium 服务器已经启动并运行。按 (Ctrl-C) 继续退出并跳转到到 下一步, 在这里我们将安装一个用于自动运行 Android 应用程序的驱动程序.

安装 UiAutomator2 驱动

如果没有驱动,你几乎无法使用 Appium,驱动是允许 Appium 自动化特定平台的接口。

Info

在本快速入门指南中,我们将自动化一个 Android 平台的应用,因为通过 Appium 进行 Android 自动化的系统要求与 Appium 本身相同(而 iOS 驱动例如,需要你使用 macOS)。

我们将使用的驱动称为 UiAutomator2 驱动。值得访问该驱动的文档并将其加入书签,因为这将是今后不可或缺的参考资料。

设置 Android 自动化要求

根据驱动的要求,除了一个运行中的 Appium 服务器,我们还需要设置以下内容:

Android SDK

  • 设置 Android SDK 要求的最简单方法是下载 Android Studio。 我们需要使用其 SDK 管理器 (设置 -> 语言和框架 -> Android SDK) 来下载以下项目:
    • Android SDK 平台(选择我们想要自动化的任何 Android 平台,例如,API 级别 30)
    • Android SDK 平台工具
  • 如果愿意,你也可以不通过 Android Studio 下载这些项目:
  • 设置 ANDROID_HOME 环境变量,指向安装 Android SDK 的目录。通常可以在 Android Studio 的 SDK 管理器中找到这个目录的路径。它将包含 platform-tools 和其他目录。

Java JDK

  • 安装 Java JDK(对于最新的 Android API 级别,需要 JDK 9,否则需要 JDK 8)。你可以从 OracleAdoptium 下载。 确保下载的是 JDK 而不是 JRE。
  • 设置 JAVA_HOME 环境变量,指向 JDK 的安装目录。它将包含 bininclude 和其他目录。

准备设备

  • 如果使用模拟器,使用 Android Studio 创建并启动一个 Android 虚拟设备 (AVD)。 你可能需要下载你想要创建的模拟器的 API 级别的系统镜像。使用 Android Studio 中的 AVD 创建向导通常是完成所有这些操作的最简单方式。
  • 如果使用真实设备,应该为开发设置并启用 USB 调试
  • 连接模拟器或设备后,你可以运行 adb devices(通过位于 $ANDROID_HOME/platform-tools/adb 的二进制文件)来验证你的设备是否显示为已连接。

一旦你的设备在 adb 中显示为已连接,并且你已验证环境变量设置正确,你就可以开始了!如果在这些步骤中遇到任何问题,请参考驱动文档,或必要时查看各种 Android 或 Java 文档网站。

此外,恭喜你:不管你是否打算,你现在已经在你的系统上设置了 Android 开发者工具链,所以你可以开始制作 Android 应用了!

安装驱动本身

由于 UiAutomator2 驱动是由核心 Appium 团队维护的,它有一个官方的驱动名称,你可以通过 Appium 扩展 CLI 轻松安装:

复制代码
appium driver install uiautomator2

它应该产生类似下面的输出:

arduino 复制代码
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"]

运行此命令将定位并安装 UiAutomator2 驱动的最新版本,使其可用于自动化。请注意,当安装时,它会告诉你哪些平台它适用(在这种情况下是 Android),以及在 Appium 会话中使用此驱动时必须使用的自动化名称(在这种情况下是 UiAutomator2appium:automationName capability)。

Note

在这个快速入门中,我们使用了 扩展 CLI 来安装 UiAutomator2 驱动,但如果你将 Appium 集成到一个 Node.js 项目中,你可能更喜欢使用 npm 来管理 Appium 及其相关驱动。要了解更多关于这种技术的信息,请访问关于管理 Appium 扩展的指南。

现在,再次启动 Appium 服务器(运行 appium),你应该看到新安装的驱动被列为可用:

csharp 复制代码
[Appium] Available drivers:
[Appium]   - uiautomator2@2.0.5 (automationName 'UiAutomator2')

Android 设置完成并且 UiAutomator2 驱动已安装后,你就可以编写你的第一个测试了!现在选择你喜欢的语言并试一试:

4 个月前

编写一个测试 (JS)

要在 JavaScript(Node.js)中编写 Appium 测试,我们需要选择一个与 Appium 兼容的客户端 库。维护最好的库和 Appium 团队推荐使用的库是 WebdriverIO, 所有就让我们使用它吧。既然我们已经安装了 Appium,我们 已经满足了 Node 和 NPM 的要求。因此,只需在计算机上创建一个新的项目目录 然后在其中初始化一个新的 Node.js 项目:

csharp 复制代码
npm init

您在提示中输入什么内容并不重要,只要您最终得到一个有效的 package.json.

现在,通过 NPM 安装 webdriverio 软件包:

css 复制代码
npm i --save-dev webdriverio

完成上述操作后,您的 package.json 文件应包含类似以下内容的部分:

package.json

json 复制代码
{
  "devDependencies": {
    "webdriverio": "9.10.1"
  }
}

现在是编写测试本身的时候了。创建一个名为 test.js 的新文件,内容如下:

test.js

javascript 复制代码
const {remote} = require('webdriverio');

const capabilities = {
  platformName: 'Android',
  'appium:automationName': 'UiAutomator2',
  'appium:deviceName': 'Android',
  'appium:appPackage': 'com.android.settings',
  'appium:appActivity': '.Settings',
};

const wdOpts = {
  hostname: process.env.APPIUM_HOST || 'localhost',
  port: parseInt(process.env.APPIUM_PORT, 10) || 4723,
  logLevel: 'info',
  capabilities,
};

async function runTest() {
  const driver = await remote(wdOpts);
  try {
    const batteryItem = await driver.$('//*[@text="Battery"]');
    await batteryItem.click();
  } finally {
    await driver.pause(1000);
    await driver.deleteSession();
  }
}

runTest().catch(console.error);

注意

本指南的范围不包括完整介绍 WebdriverIO 客户端 库或这里发生的一切,因此我们暂且不对代码本身进行详细解释。 所以目前我们暂时不对代码本身进行详细解释。您可能需要特别阅读 Appium 能力, 除了熟悉优秀的 WebdriverIO 文档 来获得更全面的解释, 你还可以看到的各种 API 命令以及用途。

注意

示例代码可从 GitHub Appium repository.

基本上,这段代码正在执行以下操作:

  1. 定义一组 "Capabilities" 能力值(参数),以便 Appium 知道您想自动执行哪种任务。 要自动执行的任务。
  2. 在内置的 Android 设置应用程序上启动 Appium 会话。
  3. 找到 "Battery"列表项并点击它。
  4. 停顿片刻,纯粹是为了观察自动化视觉效果。
  5. 结束 Appium 会话。

就是这样!让我们试一试吧。运行测试前,请确保您的 Appium 服务器 在另一个终端会话中运行,否则会出现一个有关无法连接到 Appium 服务器的错误。 然后,你就可以执行脚本了:

复制代码
node test.js

如果一切顺利,在应用再次关闭之前,你会看到 "设置 "应用打开并导航到 "Battery "视图

恭喜您,您已经开始了 Appium 之旅!请继续阅读一些 下一步骤 继续探索.

1 年前

相关推荐
GISer_Jing4 分钟前
前端面试常考题目详解
前端·javascript
Boilermaker19921 小时前
【Java EE】SpringIoC
前端·数据库·spring
中微子1 小时前
JavaScript 防抖与节流:从原理到实践的完整指南
前端·javascript
天天向上10241 小时前
Vue 配置打包后可编辑的变量
前端·javascript·vue.js
芬兰y2 小时前
VUE 带有搜索功能的穿梭框(简单demo)
前端·javascript·vue.js
好果不榨汁2 小时前
qiankun 路由选择不同模式如何书写不同的配置
前端·vue.js
小蜜蜂dry2 小时前
Fetch 笔记
前端·javascript
拾光拾趣录2 小时前
列表分页中的快速翻页竞态问题
前端·javascript
小old弟2 小时前
vue3,你看setup设计详解,也是个人才
前端
Lefan2 小时前
一文了解什么是Dart
前端·flutter·dart