You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用Appium+Python控制Android设备?含iOS适配及脚本需求

无需推送APK/IPA,用Appium控制Android/iOS设备的Python方案

嘿,我完全懂你的需求——不想每次都推送新的APK,直接用Appium控制Android设备上已有的应用甚至系统界面,靠resource idclass这些原生控件定位方式来操作,对吧?这完全可以实现,而且iOS端也有类似的玩法,下面给你一步步讲清楚,再附上实用的Python脚本示例。

一、Android端实现核心要点

首先你要知道:Appium并不是必须推送APK才能工作的。你不需要在desired capabilities里指定app参数(这个参数才是用来推送APK的),反而可以用appPackageappActivity直接指定设备上已经安装好的应用——不管是系统自带的(比如设置、电话),还是用户自己装的第三方APP都没问题。

Appium的UIAutomator2驱动本身就原生支持通过resource-idclassNamexpath这些方式定位Android控件,逻辑和你做应用测试时的定位完全一致,只是跳过了推送APK的步骤而已。

前置准备

  • 确保Android设备开启USB调试,并正常连接到电脑
  • 启动Appium服务(可以用命令行敲appium启动,或者用Appium Desktop可视化工具)
  • 提前获取目标应用的appPackageappActivity:可以用adb shell dumpsys window | grep mCurrentFocus命令查看当前前台应用的信息,或者直接用Appium Inspector可视化获取。

二、iOS端实现核心要点

iOS端逻辑和Android基本一致:不需要推送IPA,而是通过指定应用的bundleId来直接启动设备上已安装的应用(包括系统APP和第三方APP)。Appium的XCUITest驱动支持用accessibility idclassNamexpath来定位iOS控件,操作逻辑和Android端互通。

前置准备

  • iOS设备开启开发者模式,并在设备上信任你的电脑
  • 确保Appium能正常初始化XCUITest驱动(第一次运行时,可能需要手动在设备上授权WebDriverAgent的权限)
  • 获取目标应用的bundleId:可以通过Xcode查看,或者用Appium Inspector直接抓取。

三、Python脚本示例

Android示例:操作系统设置

这个脚本会打开系统设置,定位到「网络和互联网」选项并点击:

from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
import time

# Android Desired Capabilities配置
desired_caps = {
    "platformName": "Android",
    "deviceName": "你的设备名称(比如Pixel 7)",
    "automationName": "UiAutomator2",
    # 指定已安装的系统设置APP的包名和启动Activity
    "appPackage": "com.android.settings",
    "appActivity": ".Settings"
}

# 连接本地Appium服务
driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)

try:
    # 等待页面加载,用resource-id定位「网络和互联网」选项
    network_option = driver.find_element(AppiumBy.ID, "com.android.settings:id/title")
    network_option.click()
    
    # 停留3秒查看操作效果
    time.sleep(3)
finally:
    # 退出驱动,释放资源
    driver.quit()

iOS示例:操作系统设置

这个脚本会打开iOS设置,定位到「Wi-Fi」选项并点击:

from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
import time

# iOS Desired Capabilities配置
desired_caps = {
    "platformName": "iOS",
    "deviceName": "你的iOS设备名称(比如iPhone 14)",
    "automationName": "XCUITest",
    # 指定iOS设置APP的bundleId
    "bundleId": "com.apple.Preferences"
}

# 连接本地Appium服务
driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps)

try:
    # 等待页面加载,用accessibility id定位「Wi-Fi」选项
    wifi_option = driver.find_element(AppiumBy.ACCESSIBILITY_ID, "Wi-Fi")
    wifi_option.click()
    
    # 停留3秒查看操作效果
    time.sleep(3)
finally:
    # 退出驱动,释放资源
    driver.quit()

额外实用提示

  • 推荐用Appium Inspector来可视化获取控件的定位信息(比如resource-idaccessibility id),比手动查包名/Activity效率高太多
  • Android上如果要操作系统级控件(比如通知栏、状态栏),可以用Appium内置的API,比如driver.open_notifications()直接打开通知栏
  • iOS上的系统级操作可以用driver.execute_script('mobile: pressButton', {'name': 'home'})这类脚本模拟物理按键

内容的提问来源于stack exchange,提问作者Mayank Shivhare

火山引擎 最新活动