AirtestProject 单设备初始化多个 poco 与多设备初始化 poco

fishfish-yu · 2021年07月13日 · 1293 次阅读

前言

Poco 初始化这一块的内容,一直以来都是同学们非常容易出现问题的地方,所以今天我们单独把这部分的内容拎出来跟大家讲解一下,希望能减少大家对这块内容的疑惑。

1. 如何初始化不同的 poco

首先我们都知道,Poco 的类型分为很多种,那我们在实际测试过程中,该如何区分我们究竟要使用哪种 Poco 模式呢?

1)unity poco:Unity3D 游戏专用

游戏都是由各种引擎开发的,unity 引擎开发出来的游戏,我们测试时就要使用 unity poco。不论是这个 unity 游戏被打成了 ios 包还是 Android 包,又或者 Windows 端的 unity 游戏,嵌入 Poco-SDK 后,都应该选择 unity poco 来测试该游戏应用:

# unity3D游戏的poco初始化脚本
from poco.drivers.unity3d import UnityPoco
poco = UnityPoco()

特别注意,游戏应用的 Poco 初始化,都应该放在游戏启动之后才能进行!!!(游戏启动之后,之前嵌入到游戏里面的 poco 服务才会启动,此时才能够初始化我们的游戏 poco,获取游戏控件信息)

2)UE4 poco:UE4 游戏专用

同 unity 游戏,UE4 引擎开发的产品,我们可以使用 UE4 poco 来进行初始化:

# UE4游戏的poco初始化脚本
from poco.drivers.ue4 import UE4Poco
poco = UE4Poco()

3)Cocos-lua poco:Cocos2dx-lua 游戏专用

# Cocos2dx-lua游戏的poco初始化脚本
from poco.drivers.std import StdPoco
poco = StdPoco()

4)Cocos-js poco:Cocos2dx-js 和 Cocos-Creator 游戏使用

# Cocos2dx-js和Cocos-Creator游戏的poco初始化脚本
from poco.drivers.cocosjs import CocosJsPoco
poco = CocosJsPoco()

5)Android poco:Android 原生应用专用

# Android原生应用的初始化脚本
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)

特别注意,Android 原生应用的初始化,应该放在 Android 设备连接之后!!!(并且该设备已经完成开机启动,即 Android 系统正常运行状态下)

6)iOS poco:iOS 原生应用专用

# iOS原生应用的初始化脚本
from poco.drivers.ios import iosPoco
poco = iosPoco()

同 Android 设备,iOS 原生应用的初始化,应该放在 ios 设备连接之后!!!(且设备的 iOS 系统是在正常运行的状态下)

7)QT poco

暂未启用,后续会更新~

8)Std-broker poco:白鹭(Egret)引擎专用

# 白鹭引擎的poco初始化脚本
from poco.drivers.std import StdPoco
from poco.utils.device import VirtualDevice
poco = StdPoco(15004, VirtualDevice('localhost'))

2. 单设备初始化多个 poco

相信大家经常遇到这种情况,我们需要测试 1 台 Android 设备上面的应用,这上面既有 Android 的原生应用,也有各种游戏应用,当我们从原生应用的操作,切换到游戏应用的操作时,就涉及在这一台设备上,进行多个 poco 的初始化操作,示例如下:

# -*- encoding=utf8 -*-
__author__ = "AirtestProject"

from airtest.core.api import *
auto_setup(__file__)

# 初始化Android poco
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)

poco(text="poco").click()

sleep(5.0)

# 初始化unity poco
from poco.drivers.unity3d import UnityPoco
poco = UnityPoco()

poco("btn_start").click()

sleep(2.0)

keyevent("HOME")

当然,为了区分不同的 poco,我们也可以在初始化的时候给 poco 设置不一样的变量名,比如:

from poco.drivers.unity3d import UnityPoco
unity_poco = UnityPoco()

unity_poco("btn_start").click()

另外,我们在测试游戏的时候,也会经常遇到某些输入框并不是游戏控件,而是 Android 原生控件的情况,常见于游戏的账号登录,或者其它输入框等;这时候也需要实时切换我们所使用的 poco 模式:

# -*- encoding=utf8 -*-
__author__ = "AirtestProject"

from airtest.core.api import *
auto_setup(__file__)

from poco.drivers.unity3d import UnityPoco
unity_poco = UnityPoco()

unity_poco("Placeholder").click()

from poco.drivers.android.uiautomation import AndroidUiautomationPoco
android_poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)

android_poco("android.widget.EditText").set_text("hei输入输入")

android_poco("android.widget.Button").click()

sleep(1.0)

unity_poco("star_single").long_click()

3. 多设备初始化 poco

如在 1 个脚本中,涉及多台设备切换,则我们需要在切换设备之后,给新的设备也初始化对应的 poco,然后再进行该设备的 poco 操作:

4. 进行 poco 初始化的时机

1)Android 和 iOS 原生应用的 poco

Android 和 iOS 的原生 poco,初始化脚本都应放置在设备连接脚本之后,即 auto_setup 接口、或者是其它设备连接接口之后:

# -*- encoding=utf8 -*-
__author__ = "AirtestProject"

from airtest.core.api import *

# auto_setup为脚本初始化接口,不填入设备参数则默认取本地连接的第一台设备
auto_setup(__file__)

from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)

2)游戏对应的 poco

游戏 poco 的初始化脚本应放置在游戏应用启动之后,且游戏启动之前需要先连接上我们的待测设备,所以整体顺序如下:

# -*- encoding=utf8 -*-
__author__ = "AirtestProject"
from airtest.core.api import *

# 连接设备
auto_setup(__file__,logdir=True,devices=["Android://127.0.0.1:5037/emulator-5554"])

#启动应用
start_app("com.NetEase")
sleep(6.0)

# 初始化poco
from poco.drivers.unity3d import UnityPoco
poco = UnityPoco()

poco("btn_start").click()

5. pocoservice 频繁重启的解决办法

1)关闭各种网络代理

如果开了网络代理的话,需要先 关闭各种代理和 VPN ,否则可能会影响到 poco 通讯。

2)部分 Android 手机的设置问题

检查手机助手内是否对 pocoservice.apk 做了限制,例如在某版本的华为手机中需要开启 允许自启动允许后台活动 ,部分一加手机要把 pocoservice.apk电池优化 关掉,详情可以参考 “Android 连接常见问题” 的文档 。

3)不能和 uiautomator 同时启动

不能和 uiautomator 同时启动,否则会相互冲突。

4)可以尝试重启

可以尝试 重启手机 看看是否会恢复。

小结

关于 Poco 的初始化内容就讲到这里啦,如同学们还有其他疑问,可以直接给我们的公众号后台留言~


Airtest 官网https://airtest.netease.com/
Airtest 教程官网https://airtest.doc.io.netease.com/
搭建企业私有云服务https://airlab.163.com/b2b

官方答疑 Q 群:654700783

呀~这么认真都看到这里啦,帮忙点击左下角的爱心,给我点个赞支持一下把,灰常感谢~

暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册