前言

今天介绍的是appium在双端的UI自动化的一个简单入门实践。注意:在实际应用过程中,难免会遇到各种不同的问题。可以通过分析报错信息、借助大模型 AI 工具,以及查阅技术博客等多种途径进行排查和解决。

一、了解appium和本文实践目标

实践目标:快速上手使用Appium进行Android和iOS双端自动化测试脚本的编写。
appium介绍:Appium 是一个开源的、跨平台的移动应用UI自动化测试工具,支持Android和iOS两大主流移动操作系统。

二、熟悉Appium的基本原理和架构

详情可参考appium官网:https://appium.io/docs/zh/latest/
1.Appium的基本原理
Appium 是一个开源的自动化测试框架,主要用于移动应用(包括原生、混合和移动Web应用)的自动化测试。它的设计理念是不需要对被测应用进行修改或重新编译,即可实现自动化测试。
Appium 的核心思想是:

  • 使用标准的WebDriver协议(与Selenium兼容),让测试脚本可以用多种编程语言编写。
  • 通过不同的“驱动”(Driver)适配不同的操作系统和应用类型,如 Android 的 UIAutomator2 Driver、iOS 的 XCUITest Driver 等。
  • Appium作为“服务器”,接受客户端发送的测试指令,将其转化为底层平台能够理解的自动化操作,并将结果返回给客户端。

2.Appium的架构
整体交互流程
Appium 架构主要分为三层:
(1)测试脚本层(Client)
测试人员编写的自动化测试脚本,通常使用 Appium 提供的客户端库(Java、Python、JavaScript 等)。
测试脚本通过 WebDriver 协议(JSON Wire Protocol 或 W3C WebDriver Protocol)与 Appium Server 通信。
(2)Appium Server 层
Appium Server 负责解析客户端发送的请求,将其转化为底层的自动化操作命令。
Server 会根据不同的测试平台(Android/iOS)调用相应的“驱动”来完成具体的操作。
(3)驱动层(Driver)
针对不同平台和应用类型,Appium 提供了不同的驱动:
UIAutomator2 Driver:用于 Android 6.0 及以上原生应用的自动化。
Espresso Driver:主要用于 Android 原生应用的自动化。
XCUITest Driver:用于 iOS 9.3 及以上原生应用的自动化。
WebDriverAgent:iOS 平台上的底层自动化工具。
驱动层直接与移动设备或模拟器进行交互,实现对App的操作和元素的定位。

3. 工作流程简述

  1. 测试脚本通过 WebDriver 协议向 Appium Server 发送请求(如点击、输入等操作)。
  2. Appium Server 解析请求,根据目标平台调用相应的驱动。
  3. 驱动与设备或模拟器交互,执行自动化操作。
  4. 执行结果通过 Appium Server 返回给测试脚本。

三、掌握Appium的环境搭建和配置方法

1.Android端:

一、需要安装的组件

  1. Node.js(Appium运行基础)
  2. JDK(Java开发工具包,Appium依赖)
  3. Android SDK(Android开发工具包)
  4. Appium(自动化测试服务器)
  5. Appium Inspector(UI元素检查工具)
  6. Python(可选,用于编写测试脚本)

二、安装步骤
1.安装 Homebrew(包管理器,简化安装过程)

/bin/bash -c "$(curl -fsSLhttps://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)

✅验证:brew --version
2.安装 Node.js

brew install node

✅验证 :node -v # 应显示 v16.x 或更高版本 npm -v # 应显示 npm 版本
3.安装 JDK(Java Development Kit)

brew install java

✅验证:java -version
4.安装 Android SDK
方法一:通过 Android Studio 安装(推荐)
下载 Android Studio
安装完成后,打开 Android Studio
点击 “Configure” → “SDK Manager”
在 “SDK Tools” 中勾选:
Android SDK Platform-tools
Android SDK Build-tools
Android SDK Platform(最新稳定版本)
点击 “Install” 安装
验证安装路径:echo $ANDROID_HOME /(应显示 /Users/用户名/Library/Android/sdk)

配置环境变量(在 ~/.zprofile 中添加):

export ANDROID_HOME=$HOME/Library/Android/sdk 
export PATH=$PATH:$ANDROID_HOME/platform-tools 
export PATH=$PATH:$ANDROID_HOME/build-tools

然后执行:

source ~/.zprofile

✅ 验证:adb version # 应显示 adb 版本信息
5.安装 Appium

npm install -g appium
appium driver install uiautomator2

✅检查环境是否正常:appium driver doctor uiautomator2 ,若有对应的错误需要根据warn的提示,重新设置环境参数,下载工具。

2.iOS端:

1.前置条件:
iOS自动化需要android自动化全部的配置,具体见上,
2.安装xcode:
在apple store搜索并下载Xcode16,它是iOS开发的ide,自动化测试核心组件wda需要基于它启动。
3.安装配置wda
3.1安装wda:
检查wda安装是否成功:cd ~/.appium/node_modules/appium-xcuitest-driver/WebDriverAgent没找到的话,这是另一个可能位置:cd ~/.appium/node_modules/appium-xcuitest-driver/node_modules/appium-webdriveragent
3.2打开wda
找到后,在该目录下执行该命令open -a Xcode ./WebDriverAgent.xcodeproj,即终端执行利用终端直接在xcode中webdriver
验证测试机连接:idevice_id -l
3.3配置wda
3.3.1添加苹果account
请添加图片描述
3.3.2 配置独一无二的identifier请添加图片描述
3.3.3选择自己team和idenytifier请添加图片描述
3.3.4 选择设备
请添加图片描述
3.3.5 点击执行在这里插入图片描述
3.3.6 根据报错,在手机设置-通用-设备管理器-信任权限
请添加图片描述

3.3.7 移动端出现webDriverAge应用并出现以下图标则wda已经配置完成请添加图片描述

四、了解Appium常用API和定位元素的方法

以下内容了解即可,可在实际使用过程中进行二次学习应用
会话管理:
启动会话pythondriver = webdriver.Remote(‘http://localhost:4723/wd/hub’, desired_caps)
查找元素:
按id查找:pythondriver.find_element_by_id(‘com.example:id/button’)
按XPath查找:pythondriver.find_element_by_xpath(‘//android.widget.TextView[@text=“登录”]’)
元素操作:
点击pythonelement.click()
其他操作:
滑动/滚动pythondriver.swipe(start_x, start_y, end_x, end_y, duration)

Appium支持多种元素定位方式,具体如下:
1)ID定位,适用于有唯一资源ID的控件。
driver.find_element_by_id(‘com.example:id/username’)
2)Accessibility ID定位,适用于设置了accessibility label(适合无障碍测试)。
driver.find_element_by_accessibility_id(‘login_button’)
3)XPath定位,适用于复杂层级或文本定位,但性能较低。
driver.find_element_by_xpath(‘//android.widget.TextView[@text=“登录”]’)
4)Class Name定位,适用于控件类型定位。
driver.find_element_by_class_name(‘android.widget.Button’)

定位辅助工具
通过Appium Inspector连接设备和应用,实时查看页面元素的属性(id、text、class、xpath等),辅助定位表达式编写。

五、编写并运行基础的自动化测试脚本

这一步是开始使用pycharm和appium来执行自动化脚本,所以先进行简单的打开app操作确认环境等兼容正常。

这里我使用的是官方推荐的完美适配组合Appium 2.1.0 + Appium-Python-Client 5.2.4 ,在AI大模型给出的appium脚本中可能会出现不兼容的问题,需要根据版本来适配。

以下是一个简单的python代码,利用代码实现打开一个app的功能(注:在执行脚本前,请先记得在终端执行appium,将appium服务器打开哦,这样我们的脚本才能和服务器通信,进而驱动我们的设备)。

该脚本跑通后就可以利用点击,滑动,断言,CICD等进行移动端的UI自动化建设了。
Android调试脚本如下-打开美团:

# -*- coding: utf-8 -*-
from appium import webdriver
from appium.options.android import UiAutomator2Options
import time

# === 1. 配置 Appium 连接参数(关键修复:使用 http://localhost:4723 而非 /wd/hub) ===
appium_server_url = 'http://localhost:4723'  # ✅ 重要:移除 /wd/hub

# === 2. 配置 Appium 选项(使用 UiAutomator2Options) ===
appium_options = UiAutomator2Options()
appium_options.platform_name = "Android"
appium_options.device_name = "Huawei mate30"  # 确保与设备名称一致
appium_options.app_package = "com.sankuai.meituan"
appium_options.app_activity = "com.meituan.android.pt.homepage.activity.MainActivity"
appium_options.automation_name = "UiAutomator2"  # ✅ Appium 2.1.0 支持大写
appium_options.no_reset = True
appium_options.ignore_hidden_api_policy_error = True

# === 3. 启动 Appium 驱动 ===
driver = webdriver.Remote(
    command_executor=appium_server_url,
    options=appium_options
)
print("✅ Appium 连接成功!")

# === 4. 简单调试操作(启动后等待并获取当前Activity) ===
try:
    # 等待App启动完成
    time.sleep(5)

    # 获取当前Activity(验证App已启动)
    current_activity = driver.current_activity
    print(f"📱 当前Activity: {current_activity}")

    # 验证是否在美团首页
    if "MainActivity" in current_activity:
        print("✅ 美团App已成功启动!")
    else:
        print("❌ 未在美团首页,请检查appActivity配置")

except Exception as e:
    print(f"❌ 操作失败: {str(e)}")

finally:
    # === 5. 清理:退出App(避免残留) ===
    driver.quit()
    print("✅ 测试完成,App已退出")

iOS调试脚本如下-打开微信:

# -*- coding: utf-8 -*-
from appium import webdriver
from appium.options.ios import XCUITestOptions  # ← iOS 专用选项
import time

# === 1. Appium Server 地址(相同)===
appium_server_url = 'http://localhost:4723'

# === 2. iOS 配置 ===
appium_options = XCUITestOptions()
appium_options.platform_name = "iOS"
appium_options.device_name = "iPhone 13"  # 或你的真机名称(需在 Xcode Devices 中可见)
appium_options.bundle_id = "com.tencent.xin"  # iOS 的 bundle identifier
appium_options.automation_name = "XCUITest"
appium_options.udid = "00008110-000C71C93E6A801E"  # 真机必需!可通过 `idevice_id -l` 获取
appium_options.xcode_org_id = "YOUR_TEAM_ID"  # Apple Developer Team ID(真机必需)
appium_options.xcode_signing_id = "iPhone Developer"

# 可选:跳过重签名(如果 WDA 已正确签名)
# appium_options.use_prebuilt_wda = True

# === 3. 启动驱动 ===
driver = webdriver.Remote(
    command_executor=appium_server_url,
    options=appium_options
)
print("✅ iOS Appium 连接成功!")

try:
    time.sleep(5)
    print("📱 美团 iOS App 已启动!")

    # iOS 获取当前页面信息方式不同(通常用 source 或 context)
    # current_source = driver.page_source

except Exception as e:
    print(f"❌ iOS 操作失败: {str(e)}")

finally:
    driver.quit()
    print("✅ iOS 测试完成")

(注:以上部分借鉴通义千文、chatgpt-4大模型和个人实践,若文中存在不准确之处或您有任何疑问,敬请留言指出,我将及时修正。)

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐