Appium

0x01 原理与安装

(1)用途与特点

  1. 用途
    1. 自动化完成一些重复性任务
    2. 爬取信息
    3. 自动化测试
  2. 特点
    1. 开源免费
    2. 支持多平台
    3. 支持多类型
      1. 操作系统原生界面自动化
      2. 应用内嵌 WebView 自动化
      3. 浏览器中 Web 网站自动化
      4. flutter 应用自动化
    4. 支持多语言

(2)原理

graph LR A(自动化程序<br/>Appium 客户端库)--HTTP-->B(Appium Server) B--HTTP-->A B-->C(设备) C-->B

自动化代理控制:

  • iOS 9.3+:XCUITest 框架
  • Android 4.2+:UIAutomator 框架

(3)自动化环境搭建

以下内容以 Android APP 自动化为例

  1. 安装 client 编程库:pip install appium-python-client

  2. 安装 Appium Server:Appium Desktop 官方下载地址

    Appium Server 基于 JavaScript 开发,使用 Node.js 运行

  3. 安装 JDK

  4. 安装 Android SDK

  5. 连接手机(Android 10)

    1. 在手机上执行以下操作:设置 > 关于手机 > 点击版本号(反复点击直至提示已经打开了开发者模式)
    2. 在开发者选项中,启动 USB 调试
    3. 使用 USB 将手机与电脑连接
    4. 在电脑上执行命令adb devices -l来查看已连接的设备

0x02 应用与实践

(1)代码实例

测试:打开手机端的 Bilibili:

  • 注意:测试运行前,须开启 Appium Server Desktop
  • Appium Settings 会在程序运行时自动安装至手机上
from appium import webdriver
from appium.webdriver.common.appiumby import By
from appium.webdriver.extensions.android.nativekey import AndroidKey

desired_caps = {
    'platformName': 'Android',          # 测试平台为 Android
    'platformVersion': '11',            # 平台版本为 11
    'deviceName': '',                   # 设备名,安卓可以为空
    'appPackage': 'tv.danmaku.bili',    # 启动 APP Package 名称
    'appActivity': '.MainActivityV2',   # 启动 Activity 名称
    'unicodeKeyboard': True,            # 使用自带输入法,输入中文时为 True
    'resetKeyboard': True,              # 执行完程序恢复原来的输入法
    'noReset': True,                    # 不要重置 APP
    'newCommandTimeout': 6000,
    'automationName': 'UiAutomator2'
}

# 连接 Appium Server,初始化自动化环境
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
# 设置缺省等待时间
driver.implicitly_wait(10)
# 根据 id 定位搜索位置框并点击
driver.find_element(By.ID, 'expand_search').click()
# 根据 id 定位收缩输入框并发送需要搜索的内容
driver.find_element(By.ID, 'search_src_text').send_keys('Appium 开发教程')
# 输入回车键确定搜索
driver.press_keycode(AndroidKey.ENTER)
# 选择定位所有视频标题
videos = driver.find_elements(By.ID, 'title')
for video in videos:
    print(video.text)

input('Press any to quit...')

异常处理:

  1. Android 版本错误(鸿蒙系统可以用 Android 10 表示)
  2. OPPO 手机启动appium报错java.lang.SecurityException: Permission denial: writing to settings requires:android.permission.WRITE_SECURE_SETTINGS

(2)查看应用的 Package 和 Activity

a. 没有 apk

该类应用一般为在应用商店下载并直接安装的应用。

  1. 在电脑上运行 Appium Server Desktop

  2. 在手机上运行需要查看的应用

  3. 在 cmd 中执行命令adb shell dumpsys activity recents | find "intent={",回显为:

    intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=tv.danmaku.bili/.MainActivityV2 mCallingUid=10101}
    intent={act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000100 cmp=com.oppo.launcher/.Launcher}
    

    其中的cmp=tv.danmaku.bili/.MainActivityV2内容格式为cmp=[package]/[activity]

b. 有 apk

  1. 在 cmd 中执行命令aapt dump badging [apk path] | find "package: name="
  2. 在 cmd 中执行命令aapt dump badging [apk path] | find "launchable-activity"

(3)元素操作

省略 Selenium 基础

a. 定位元素

# 引用相关配置
from appium.webdriver.common.appiumby import By

b. 页面元素查看工具

使用以下两样工具:

  • Android SDK 中的 uiautomateviewer
    • 必须在 jdk 1.8 环境中使用
    • 通过菜单栏第二项的 Device Screenshot 获取手机显示快照,用鼠标选中目标元素,即可对其属性进行查看
  • Appium Desktop 中的 Appium Inspector

c. 操作元素

类似 Selenium

posted @ 2023-03-16 15:33  SRIGT  阅读(60)  评论(0编辑  收藏  举报