小门板儿

Menu

Appium环境搭建及使用

一、安装node.js

1、到官网下载node.js:https://nodejs.org/en/download/

2、安装完成后,运行cmd,输入node –v,如果安装成功,会输出如下版本信息:

image-20210923104902379

二、配置Android sdk环境

参见https://jiner.wang/monkey%e5%ae%89%e8%a3%85%e4%b8%8e%e9%85%8d%e7%bd%ae/

三、安装Appium Server

1.下载安装文件:https://github.com/appium/appium-desktop/releases/tag/v1.15.1

2.直接双击exe文件安装就好,桌面会生成一个appium的图标

3.把node_modules的bin目录放到系统的Path路径里

image-20210923105124884

4.检查appium所需的环境是否OK:

进入cmd命令行,输入appium-doctor ,出现以下提示,All Checks were successful ,说明环境成功。

image-20210923105156733

5、或者单独安装Appium-windows-1.15.1.exe包后,在安装界面话工具Appium Desktop

四、安装Appium-python-Client

使得appium和python建立连接关系,使用命令:pip install Appium-Python-Client,出现如下截图,则说明安装成功。

image-20210923190819955

五、自动化原理

Appium自动化的原理图

3个主体部分 : 自动化程序、Appium Server、移动设备

Appium Server 是 Appium 组织开发的程序,它负责管理手机自动化环境,转发 自动化程序的控制指令 给 手机,并且转发 手机给 自动化程序的响应消息。

比如:要模拟用户点击界面按钮,Appium 自动化系统的流程是这样的:

其中,自动化代理控制,使用的什么库来实现自动化的呢?

如果测试的是苹果手机, 用的是苹果的 XCUITest 框架 (IOS9.3版本以后)

如果测试的是安卓手机,用的是安卓的 UIAutomator 框架 (Android4.2以后)

这些自动化框架提供了在手机设备上运行的库,可以让程序调用这些库,像人一样自动化操控设备和APP,比如:点击、滑动,模拟各种按键消息等。

六、基本使用

1、一些常用方法

1)查看第三方包名

adb  shell pm list package -3
image-20210929111343694

2)查找appActivity

应用已经安装在手机上了,可以直接打开手机上该应用,进入到你要操作的界面

然后执行

adb shell dumpsys activity recents | find "intent={"
intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x30200000 cmp=com.stnts.iyoucloud/com.stnts.sly.android.activity.SplashAc
tivity}
    intent={act=android.intent.action.MAIN cat=[android.intent.category.HOME] fl
g=0x10a00100 cmp=com.bbk.launcher2/.Launcher}
    intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER
] flg=0x30200000 cmp=com.tencent.mobileqq/.activity.SplashActivity}
    intent={act=com.android.notification.permission.action.FRONT flg=0x10800000
cmp=com.android.systemui/com.vivo.systemui.statusbar.notification.permission.act
ivity.NotificationPermissionDialogActivity}
    intent={act=android.intent.action.VIEW dat=content://com.tencent.mobileqq.fi
leprovider/external_files/storage/emulated/0/Android/data/com.tencent.mobileqq/T
encent/QQfile_recv/suileyou-qa-release-3.3.8.003.apk typ=application/vnd.android
.package-archive flg=0x10800003 cmp=com.android.packageinstaller/.InstallStart}

其中第一行就是当前的应用,我们特别关注最后

cmp=com.stnts.iyoucloud/com.stnts.sly.android.activity.SplashAc
tivity}

应用的package名称就是 tv.danmaku.bili

应用的启动Activity就是 .ui.splash.SplashActivity

3)adb 命令

使用 Python的 os.system() 或者 subprocess 来自动化调用它,完成我们的各种自动化需求。

比如,我们自动化过程中,可能需要截屏手机,并且下载到指定目录中

import os
os.system('adb shell screencap /sdcard/screen3.png && adb pull /sdcard/screen3.png')
adb shell ls /sdcard
adb push wv.apk /sdcard/wv.apk
#下载
adb pull /sdcard/new.txt
adb shell screencap /sdcard/screen.png

2、界面元素查看工具

常用的查看工具是: Android Sdk包中的 uiautomateviewer 和 Appium Desktop 中的 Appium Inspector

Appium Inspector

具体使用参看以下文档

https://jiner.wang/appium-inspector%e4%bd%bf%e7%94%a8/

uiautomateviewer

安卓查看APP界面元素,最常用的就是 Android SDK 中的工具 uiautomateviewer ,它在SDK目录目录 的 tools\bin 目录中

和Selenium一样,我们要定位选择元素,也是根据元素的特征,包括

3、界面操作和常用命令

1)tap点按

WebElement 对象的 tap 方法和 click 类似,都是点击界面。但是最大的区别是, tap是 针对坐标 而不是针对找到的元素。inspect 查看该元素的bounds属性,它就是表示元素的左上角,右下角坐标的 坐标

tap 方法可以像这样进行调用

driver.tap([(850,1080)],300)

它 有 两个参数:

2)滑动
driver.swipe(start_x=x, start_y=y1, end_x=x, end_y=y2, duration=800)

前面4个参数 是 滑动起点 和 终点 的x、y坐标。

第5个参数 duration是滑动从起点到终点坐标所耗费的时间。

3)按键

调用 press_keycode 方法,就能模拟 按键动作,包括安卓手机的实体按键和 键盘按钮。

如下代码所示

from appium.webdriver.extensions.android.nativekey import AndroidKey
​
# 输入回车键,确定搜索
driver.press_keycode(AndroidKey.ENTER)
4)长按、双击、移动

Appium的 TouchAction 类提供了更多的手机操作方法,比如:长按、双击、移动

下面就是一个长按的例子

from appium.webdriver.common.touch_action import TouchAction
# ...
actions = TouchAction(driver)
actions.long_press(element)
actions.perform()
5)查看通知栏

打开通知栏

1、可以通过滑动方法实现

2、driver.open_notifications()

关闭通知栏

1、收起通知栏,可以使用前面介绍的模拟按键, 发出返回按键 的方法

4、一个例子

#coding=utf-8
from appium import webdriver
​
desired_caps = {}
desired_caps['platformName'] = 'Android'  # 被测手机是安卓
desired_caps['platformVersion'] = '11'  # 手机安卓版本
desired_caps['deviceName'] = 'IQOO'   # 设备名,安卓手机可以随意填写
desired_caps['appPackage'] = '***'  # 启动APP Package名称
desired_caps['appActivity'] = '***'  # 启动Activity名称
driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
driver.implicitly_wait(5)
​
#如果有隐私协议,点击同意
if driver.find_element_by_id('btn_ok_pr'):
    driver.find_element_by_id('btn_ok_pr').click()
l = driver.get_window_size()
x1 = int(l['width'] * 0.75)
y1 = int(l['height'] * 0.5)
x2 = int(l['width'] * 0.25)
# 向左滑动,一共四个广告页面
driver.swipe(x1, y1, x2, y1, 500)
driver.implicitly_wait(1)
driver.swipe(x1, y1, x2, y1, 500)
driver.implicitly_wait(1)
driver.swipe(x1, y1, x2, y1, 500)
driver.implicitly_wait(1)
driver.swipe(x1, y1, x2, y1, 500)
driver.find_element_by_id('start_new_world').click()
#获取游戏名称
eles=driver.find_elements_by_id('item_name')
for ele in eles:
    print(ele.text)
driver.quit()

参考文献:http://www.byhy.net/tut/auto/appium/01/

— 于 共写了5096个字
— 标签:

评论已关闭。