介绍

Appium看名字就知道和selenium是一类的,让机器模拟人去操作,这里介绍常见的Android和IOS配置和踩坑。

建议看官方英文文档,网上的很多文章太老了现在完全不适用,而且官方中文文档很多没翻译过来还是TODO状态...

Appium是一个自动化开源工具,支持iOS、Android和Windows桌面平台上的原生、移动Web和混合应用的自动化。Appium是跨平台的:它允许你用同样的API对多平台(iOS、Android、Windows)写测试。做到在iOS、Android和Windows测试套件之间复用代码。

官方文档:https://appium.io/docs/en/latest/

服务端配置

  • nodejs ^14.17.0 || ^16.13.0 || >=18.0.0

  • npm >=8

  • Appium 服务端

    •   npm i -g appium
        npm update -g appium # 更新
      

配置好后,直接运行 appium 就可以启动服务端。

Driver

【Android】UiAutomator2

安卓的配置比较简单方便,使用UiAutomator2,需要的环境和步骤如下:

  1. Android SDK

  2.  export ANDROID_HOME=/Users/d4m1ts/Library/Android/sdk/platform-tools
    
  3. Java8+ SDK

  4.  export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_261.jdk/Contents/Home
    
  5. 在真机上启动USB调试

  6.  appium driver install uiautomator2
    

【IOS】xcuitest

iOS上相对比较麻烦,driver使用xcuitest,配置可参考官方文档

appium driver install xcuitest

可使用如下命令来检测依赖是否正常,把缺失的依赖安装上即可(最好还是看文档,里面有很多可选的依赖都可以装上。

appium driver doctor xcuitest

依赖解决后,一些在手机上的配置项:

  • 设置 -> 通用 -> 键盘 -> 自动改正(关闭,默认开启
  • 设置 -> 通用 -> 键盘 -> 预测文本(关闭,默认开启
  • 设置 -> 辅助功能 -> 缩放(关闭,默认关闭
  • 设置 -> 辅助功能 -> 朗读内容 -> 朗读所选内容(关闭,默认关闭
  • 设备连上Mac后选择信任设备
  • 使用 iOS/iPadOS 16 或更高版本的设备需要启用开发者模式:设置 -> 隐私与安全性 -> 开发者模式;重启后还需要配置:设置 -> 开发者 -> 启用 UI 自动化(如果没得开发者模式,连线打开XCode后再看看可能就有了

通过xcodebuild安装WebDriverAgentRunner-Runner (WDA) 与被测设备进行通信,运行如下命令直接在 Xcode 中打开 WebDriverAgent.xcodeproj

appium driver run xcuitest open-wda

因为没有付费开发者账户,所以必须手动进行签名配置WDA,我这里采用的是完全手动配置

先进入WDA的目录下,创建目录和文件:

mkdir -p Resources/WebDriverAgent.bundle

选中WebDriverAgentRunner项目后,再选择Build Settings,修改Bundle Identifier为可接受的内容

image-20240506下午24344053

然后在 Signing & Capabilities 中选择Team,没有出现问题就OK了

image-20240506下午24548736

最后安装到手机上,步骤如下:

  1. Product -> Scheme -> WebDriverAgentRunner
  2. Product -> Destination
  3. Product -> Test

安装好后还需要信任,信任后再点一下刚才安装的WDA软件启动一次即可。

image-20240506下午51941530

客户端

主要推荐2个客户端,1个是带图形化界面方便分析的,1个是纯py脚本的

appium-inspector

A GUI inspector for mobile apps and more, powered by a (separately installed) Appium server

主要用于看各类元素说明啥的

可直接下载 appium-inspector安装

Android

打开 Appium Inspector,在 JSON Representation 中填入如下数据:

{
    "platformName": "Android",
    "appium:automationName": "uiautomator2",
    "appium:deviceName": "AOSP_on_blueline", // adb devices -l 中model后的内容
    "appium:platformVersion": "10", // adb shell getprop ro.build.version.release
    "appium:appPackage": "com.tencent.mm", // adb shell dumpsys activity | grep mResumedActivity
    "appium:appActivity": ".ui.LauncherUI",
    "appium:noReset": true
}

具体的字段和说明参考:https://github.com/appium/appium-uiautomator2-driver?tab=readme-ov-file#capabilities

配置后点击 Start Session

image-20240430下午53719069

出现如下的界面就OK了,可以看到各种元素

image-20240430下午54014959

Session Information 的面板中,也可以看到示例代码,可以直接复制过去用

image-20240430下午54455282

IOS

打开 Appium Inspector,在 JSON Representation 中填入如下数据:

{
    "platformName": "ios",
    "appium:automationName": "xcuitest",
    "appium:deviceName": "00008120-00084DCC36F8A01E", // udid
    "appium:platformVersion": "17.4.1",
    "appium:udid": "00008120-00084DCC36F8A01E", // udid
    "appium:noReset": true
}

具体的字段和说明参考:https://appium.github.io/appium-xcuitest-driver/latest/reference/capabilities/

其他操作就和Android一样了

image-20240506下午33647917

Appium-Python-Client

通过上方的GUI客户端可以快速的定位元素、生成示例代码,也可以录制操作自动变成代码,其中函数和selenium差不多,就不赘述了。

依赖安装:pip install Appium-Python-Client

一些demo可参考 functional test code,完整的文档可参考 Documentation

# This sample code supports Appium Python client >=2.3.0
# pip install Appium-Python-Client
# Then you can paste this into a file and simply run with Python

from appium import webdriver
from appium.options.common.base import AppiumOptions
from appium.webdriver.common.appiumby import AppiumBy

# For W3C actions
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.actions import interaction
from selenium.webdriver.common.actions.action_builder import ActionBuilder
from selenium.webdriver.common.actions.pointer_input import PointerInput

options = AppiumOptions()
options.load_capabilities({
    "platformName": "Android",
    "appium:automationName": "uiautomator2",
    "appium:deviceName": "AOSP_on_blueline",
    "appium:platformVersion": "10",
    "appium:appPackage": "com.tencent.mm",
    "appium:appActivity": ".ui.LauncherUI",
    "appium:noReset": True,
    "appium:ensureWebviewsHavePages": True,
    "appium:nativeWebScreenshot": True,
    "appium:newCommandTimeout": 3600,
    "appium:connectHardwareKeyboard": True
})

driver = webdriver.Remote("http://127.0.0.1:4723", options=options)


driver.quit()
Copyright © d4m1ts 2023 all right reserved,powered by Gitbook该文章修订时间: 2024-05-13 19:51:15

results matching ""

    No results matching ""