poco脚本编写之api

摘要:
from airtest.core.apiimportconnect_ device from pocodrivers.android.uiautomationimportAndroidUiautomationPoco dev=连接_设备('android:

连接设备后使用poco
  使用connect_device连接好指定设备后,会返回一个Device对象,将这个对象传入 AndroidUiautomationPoco第一个参数里进行poco的初始化,
  接下来使用此poco 实例将会获取所指定的设备的UI和对其进行操作。

  

  from airtest.core.api import connect_device
  from poco.drivers.android.uiautomation import AndroidUiautomationPoco

  dev = connect_device('Android://<adbhost[localhost]>:<adbport[5037]>/<serialno>')
  poco = AndroidUiautomationPoco(dev)

Andorid注意事项
  版本越高越好
    需要Android SDK API version ≥ 19,即Android 4.4及以上,越高版本兼容性越好。
  使用poco
    在Android原生应用上使用poco不需要配置任何依赖,只需手机处于usb调试模式即可(部分手机需要连同usb安装、usb模拟点击等权限一起打开,均位于开发者选项里)。
    在初始化poco 实例时,会自动向手机里安装PocoService.apk,如果此时弹出安装提示,请点击同意,否则poco无法使用,一共会安装两个app进去。


    什么时候初始化poco
      1、ide中选择android的模式
      2、代码中创建poco对象

脚本编写

 调用文件外部方法

  如果想要在一个.air脚本中,调用另外一个.air脚本里封装的公用函数,可以这样做:

  from airtest.core.api import using
  using("common.air")

  from common import common_function
  common_function()

元素定位

  使用Poco选择UI对象

    属性选择器
      选出所有满足给定条件的UI
      括号里的参数就是所给定的条件,用属性名值对表示
      其中第一个参数固定表示 节点名
      其余可选参数均表示节点的属性及预期的属性值。
      poco('bg_mission')
      poco('bg_mission', type='Button')
      poco(textMatches='^据点.*$', type='Button', enable=True)

      poco(name='com.zhihu.android:id/magi_title', textMatches='^古剑奇谭三.*$').click()//text模糊匹配

    相对选择器
      直接用节点属性没法选出你所想要的UI时,还可以通过UI之间的渲染层级关系进行选择,例如父子关系、兄弟关系、祖先后代关系。
      poco('main_node').child('list_item').offspring('item')


 
    

api
  点击(click)
    点击默认点在 锚点上(一般就是正中央的点)
    poco('bg_mission').click()
    poco('bg_mission').click('center')
    poco('bg_mission').click([0.5, 0.5]) # equivalent to center
    poco('bg_mission').focus([0.5, 0.5]).click() # equivalent to above expression

 

  拖拽(drag)
    与 swipe 不同的是, darg 是从一个UI拖到另一个UI,而 swipe 是将一个UI朝某个方向拖动
    poco(text='突破芯片').drag_to(poco(text='岩石司康饼'))

  等待出现(wait)
    一段时间内查找元素。超时则报错
    poco('bg_mission').wait(5).click() # wait 5 seconds at most,click once the object appears
    poco('bg_mission').wait(5).exists() # wait 5 seconds at most,return Exists or Not Exists

局部定位(focus (local positioning)),归一化坐标系
  锚点在盒子上的哪个位置,

  锚点就是操作的起点
    所有UI相关的操作都默认以UI的 anchorPoint 为起点,

  自定义锚点

    如果想自定义起点那么可以使用 focus方法。

    focus 所使用的是局部坐标系,UI包围盒的左上角为原点,x轴向右,y轴向下,并且包围盒长宽均为单位1。很显然中心点就是 [0.5, 0.5] 。
    poco('bg_mission').focus('center').click() # click the center
    将 focus 和 drag_to 结合使用还能产生卷动(scroll)的效果,下面例子展示了如何将一个列表向上卷动半页。
    scrollView = poco(type='ScollView')
    scrollView.focus([0.5, 0.8]).drag_to(scrollView.focus([0.5, 0.2]))


全局操作(Global Operation)
  在没有选定或指定UI的情况下也可以进行操作(模拟输入),也叫全局操作。


  点击(click)
    poco.click([0.5, 0.5]) # click the center of screen
    poco.long_click([0.5, 0.5], duration=3)
  滑动(swipe)

     方法1:
    # swipe from A to B
    point_a = [0.1, 0.1]
    center = [0.5, 0.5]
    poco.swipe(point_a, center)//推荐

             方法2:

    # swipe from A by given direction
    direction = [0.1, 0]//向量
    poco.swipe(point_a, direction=direction)

    方法3:

    scrollView = items[0]
    scrollView.focus([0.5, 0.9]).drag_to(scrollView.focus([0.5, 0.2]))

             方法4:
    //操作元素滑动,操作元素就有锚点,锚点就是操作起点,如果你想改变起点请使用下面的 focus 方法,然后朝给定向量所代表的方向滑动,距离也就是向量的长度
    joystick = poco('movetouch_panel').child('point_img')
    joystick.swipe('up')
    joystick.swipe([0.2, -0.2]) # swipe sqrt(0.08) unit distance at 45 degree angle up-and-right
    joystick.swipe([0.2, -0.2], duration=0.5)


  截屏(snapshot)

  install("path/to/your/apk")
  start_app("package_name_of_your_apk")
  uninstall("package_name_of_your_apk")


读取元素
  mission_btn = poco('bg_mission')
  print(mission_btn.attr('type')) # 'Button'
  print(mission_btn.get_text()) # '据点支援'
  print(mission_btn.attr('text')) # '据点支援' equivalent to .get_text()
  print(mission_btn.exists()) # True/False, exists in the screen or not

写脚本技巧
  title_obj_list = poco(name='com.zhihu.android:id/magi_title')
  title_list = [title.get_text() for title in title_obj_list]

  discuss_obj_list = poco(name='com.zhihu.android:id/magi_count')
  discuss_list = [discuss.get_text() for discuss in discuss_obj_list]

  for title, discuss in zip(title_list, discuss_list):
  print(title, discuss)

免责声明:文章转载自《poco脚本编写之api》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇小狼毫安装五笔输入法bat 文件调用有输出参数的oralce存储过程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

jQ效果:jQuery和css自定义video播放控件

下面介绍一下通过jquery和css自定义video播放控件。 Html5 Video是现在html5最流行的功能之一,得到了大多数最新版本的浏览器支持.包括IE9,也是如此.不同的浏览器提供了不同的原生态浏览器视频空间.我们制作自定义视频控件为了在所有的浏览器中有一个相同的Html5视频控件而不受默认视频控件的控制. 实际上,自定义视频控件并不困难.本...

hsql整理

一、行转列的使用1、问题hive如何将a       b       1a       b       2a       b       3c       d       4c       d       5c       d       6变为:a       b       1,2,3c       d       4,5,6 2、数据test.txt...

Python基础之列表

列表初识 列表的作用和定义 列表是python中使用最频繁的数据类型,在其他语言中一般称为数组; 用一个变量存储多个数据; 列表存储多个数据时,在中括号之间用逗号分隔多个数据; 语法定义: 变量名 = [数据1, 数据2, 数据3,...] eg: name_list = ["zhangsan", "lisi", "wangwu"] 列表存储数据的方式和...

python 调用百度ORC进行文字识别

最近大神推荐一个新的东西,orc文字识别,是免费的,感觉特别不错,所以打算自己弄来玩玩。 首先要自己上百度申请一个账号https://cloud.baidu.com/product/ocr.html,登陆百度云,然后添加一个应用。创建好应用以后,就跟图片中一样,其中的API KEY 和 Secret Key 要记住,等会调用的时候要用到。 创建好应用以后,首...

VBS创建文件

在桌面创建文件 文件名称为0.txt到5.txt 桌面 & 1.txt = 桌面1.txt才是在桌面删除文件1.txt Administrator桌面 & 1.txt = Administrator桌面1.txt,在Administrator文件夹下删除的文件名是桌面1.txt dim file,fileContent di...

tree,js的简单实现内容显示

tree,js的简单实现内容显示,对模型的gltf进行引用内容显示 加载所用资源https://github.com/mrdoob/three.js 整理后代码{ <!DOCTYPE html> <html> <head> <meta charset=utf-8> &l...