victory的博客

长安一片月,万户捣衣声

0%

appium | 手机App自动化测试

appium手机App自动化测试

手机App自动化测试环境搭建

  1. 安装appium client编程库
pip install appium-python-client
  1. 安装Appium Server
    下载链接链接:https://pan.baidu.com/s/19C9fGmoXne8DgfXhrTB2TQ
    提取码:kgwb
  2. 安装JDK
    下载链接同上。
    安装好之后,需要添加环境变量JAVA_HOME,例如:
JAVA_HOME   d:\tools\java\jdk1.8.0_211(jdk安装目录)
  1. 安装Android SDK
    下载链接同上。
    下载Android SDK文件包:androidsdk.zip,并解压。
    解压完成后添加环境变量ANDROID_HOME,例如:

    ANDROID_HOME d:\tools\androidsdk(sdk包解压目录)
    另外,还需要配置环境变量PATH,加入 adb所在目录, d:\tools\androidsdk\platform-tools\

  2. 连接手机
    上述的软件环境都准备好以后,要自动化手机APP,需要:
    在你运行程序的电脑上 用 USB线 连接上 你的安卓手机
    进入 手机设置 -> 关于手机 ,不断点击 版本号 菜单(7次以上),
    退出到上级菜单,在开发者模式中,启动USB调试,打开USB安装,打开USB调试(安全设置),如下所示:

    如果手机连接USB线后,手机界面弹出 类似 如下提示。

    选择 允许USB调试。

连接好以后,打开命令行窗口, 执行 adb devices -l 命令来列出连接在电脑上的安卓设备。
如果输出 类似如下的内容:

List of devices attached
4d0035dc767a50bb        device product:t03gxx model:GT_N7100 device:t03g

表示电脑上可以查看到 连接的设备,就可以运行自动化程序了。
6. 测试手机app案例
下面是一段使用 Appium 自动化的打开 B站 应用,搜索 白月黑羽 发布的教程视频,并且打印视频标题的示例。
代码:

from appium import webdriver
from selenium.webdriver.common.by import By
from appium.webdriver.extensions.android.nativekey import AndroidKey

desired_caps = {
    'platformName': 'Android',  # 被测手机是安卓
    'platformVersion': '12',  # 手机安卓版本
    'deviceName': 'xxx',  # 设备名,安卓手机可以随意填写
    'appPackage': 'tv.danmaku.bili',  # 启动APP Package名称
    'appActivity': '.MainActivityV2',  # 启动Activity名称
    'unicodeKeyboard': True,  # 使用自带输入法,输入中文时填True
    'resetKeyboard': True,  # 执行完程序恢复原来输入法
    'noReset': True,  # 不要重置App
    'newCommandTimeout': 6000,
    'automationName': 'UiAutomator2'
    # 'app': r'd:\apk\bili.apk',
}

# 连接Appium Server,初始化自动化环境
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

# 设置缺省等待时间
driver.implicitly_wait(5)

# 如果有`青少年保护`界面,点击`我知道了`
iknow = driver.find_elements(By.ID, "text3")
if iknow:
    iknow.click()

# 根据id定位搜索位置框,点击
driver.find_element(By.ID, 'expand_search').click()

# 根据id定位搜索输入框,点击
sbox = driver.find_element(By.ID, 'search_src_text')
sbox.send_keys('白月黑羽')
# 输入回车键,确定搜索
driver.press_keycode(AndroidKey.ENTER)

# 选择(定位)所有视频标题
eles = driver.find_elements(By.ID, 'title')

for ele in eles:
    # 打印标题
    print(ele.text)

input('**** Press to quit..')
driver.quit()
  1. 报错解决办法
    (1)WebDriverException
selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred while processing the command. Original error: Neither ANDROID_HOME nor ANDROID_SDK_ROOT environment variable was exported. Read https://developer.android.com/studio/command-line/variables for more details

报错原因:未添加ANDROID_HOME
解决办法:在环境变量中添加ANDROID_HOME,值为androidsdk的解压目录/安装目录
(2)

Error: Activity used to start app doesn’t exist or cannot ve launched!

报错原因:desired_caps中的appPackage,appActivtity设置不正确
解决办法:手机端打开app –> win+r –> cmd –> 输入adb shell dumpsys activity activities | findstr mResume获取app包名和活动名称
例如,打开微信,输入命令后显示如下信息:

mResumedActivity: ActivityRecord{66ff017 u0 com.tencent.mm/.ui.LauncherUI t6167}

将appPackage设置为com.tencent.mm,将appActivity设置为.ui.LauncherUI