动作
from ascript.android import action
模拟 手指 操作
方法
点击
模拟 手指点击屏幕
- 函数
action.click(x:int,y:int,dur:int = 20):
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
x | int | 是 | 要点击的屏幕X坐标 |
y | int | 是 | 要点击的屏幕Y坐标 |
dur | float | 否 | 点击持续时间,默认20毫秒 |
- 示例
# 模拟手指点击屏幕坐标 (898,1916)
from ascript.android import action
action.click(898,1916)
# 模拟手指长按屏幕坐标 (898,1916) 按住两秒不放
from ascript.android import action
action.click(898,1916,2000)
滑动
模拟 手指滑动屏幕
- 函数
action.slide(x:int,y:int,x1:int,y1:int,dur:int=20)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
x | int | 是 | 滑动起始点X坐标 |
y | int | 是 | 滑动起始点Y坐标 |
x1 | int | 是 | 滑动结束点X坐标 |
y1 | int | 是 | 滑动结束点Y坐标 |
dur | float | 否 | 点击持续时间,默认20毫秒 |
- 示例
# 模拟手指滑动屏幕 从坐标(157,798) 滑动至坐标(946,834) ,耗时20毫秒
from ascript.android import action
action.slide(157,798,946,834)
# 模拟手指滑动屏幕 从坐标(157,798) 滑动至坐标(946,834) ,耗时3000毫秒
from ascript.android import action
action.slide(157,798,946,834,3000)
输入
模拟 输入文本
- 函数
action.input(msg:str="",selector:Selector=None)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
msg | str | 是 | 输入的内容 |
selector | Selector | 否 | 控件检索规则 当Selector 为None时,您的输入框必须已经获取了焦点 |
- 示例
# 模拟在当前 ‘已获取 焦点’的的文本框中输入‘你好 aslib!’
from ascript.android import action
action.input("你好 aslib!")
# 模拟在 控件检查器查到的 文本框中输入‘你好 aslib!’
from ascript.android import action
from ascript.android.node import Selector
selector = Selector().id("com.aojoy.airscript:id/search_bar_text")
action.input("你好 aslib!",selector)
触摸
模拟 手指 按下,移动,抬起
#class
action.Touch
按下
模拟 手指按下
action.Touch.down(x,y,dur:int=20)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
x | int | 是 | 触摸X点坐标 |
y | int | 是 | 触摸Y点坐标 |
dur | float | 否 | 动作持续时间,默认20毫秒 |
移动
模拟 手指移动
action.Touch.move(x, y, dur: int = 20)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
x | int | 是 | 触摸X点坐标 |
y | int | 是 | 触摸Y点坐标 |
dur | float | 否 | 动作持续时间,默认20毫秒 |
抬起
模拟 手指抬起
action.Touch.up(x, y, dur: int = 20)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
x | int | 是 | 触摸X点坐标 |
y | int | 是 | 触摸Y点坐标 |
dur | float | 否 | 动作持续时间,默认20毫秒 |
# 一个完整的 触摸 操作
from ascript.android import action
# 从坐标(100,200)的位置按下
action.Touch.down(299,629)
# 按下的同时,移动到坐标(300,300)
action.Touch.move(780,645)
# 按下的同时,再次移动到坐标(400,350),移动用时 1000毫秒
action.Touch.move(445,1152,1000)
# 移动至坐标(450,400)位置 抬起
action.Touch.up(445,1152)
按键
模拟 模拟按键操作
#class
action.Key
Home键
模拟设备 Home按键
action.Key.home()
返回键
模拟设备 返回按键
action.Key.back()
弹出通知栏
模拟设备 调出通知栏
action.Key.notifactions()
任务栏键
模拟设备 任务栏键
action.Key.recents()
截屏键
模拟设备 关闭屏幕
action.Key.screenshot()
锁屏键
模拟设备 关闭屏幕
action.Key.lockscreen()
手指路径
模拟手指 移动路径
#class
from ascript.android.action import Path
创建路径
创建一根手指路径, 多根手指创建多个即可.
Path(self,start_time:int=0, duration:int=20, will_continue:bool=False)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
start_time | int | 否 | 延迟执行时间 |
duration | int | 否 | 路径执行时常 |
will_continue | bool | 否 | 执行完毕后,是否抬起手指 True:抬起 False:不抬起,下一个手势将连续执行 |
from ascript.android.action import Path
line1 = Path(0,1000);
# 移动初始点
line1.moveTo(804,708)
# 画直线到点
line1.lineTo(827,1479)
# 使用二次贝塞尔曲线 从点(500,800) 到 (250,900)
line1.quadTo(500,800,250,900)
路径方法
Path 实现了 android.graphics.Path 中的大部分方法.
具体参数参考:android.graphics.Path
支持的绘制方法如下 | |
---|---|
moveTo | rCubicTo |
lineTo | rMoveTo |
quadTo | reset |
rCubicTo | rewind |
rQuadTo | addArc |
addCircle | addOval |
addRect | addRoundRect |
arcTo | cubicTo |
setLastPoint | rLineTo |
多指操作
- 函数
action.gesture(paths:List[Path],listener=None)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
paths | Path[] | 是 | 要执行的一组手指路径 |
listener | class | 否 | 手势回调对象, 函数需包含两个函数手势执行完毕回调:onCompleted() , 手势中断回调:onCancelled() |
#案例1:执行一组动作,分别模拟两个手指同时操作
from ascript.android import action
from ascript.android.action import Path
# 模拟第一根手指
line1 = Path(0,1000);
line1.moveTo(804,708)
line1.lineTo(827,1479)
# 模拟第二根手指
line2 = Path(0,1200);
line2.moveTo(500,200)
line2.lineTo(500,500)
action.gesture([line1,line2])
#案例2,执行一组动作,分别模拟两个手指同时操作,并监听动作是否执行结束
from ascript.android import action
from ascript.android.action import Path
line1 = Path(0,1000)
line1.moveTo(200,200)
line1.lineTo(200,500)
# 创建另一个新的path路径 模拟 手指2(*第二条路径相对于第一条,会延迟500ms启动)
line2 = Path(500,1200)
line2.moveTo(500,200)
line2.lineTo(500,500)
class listener:
def onCompleted():
print("结束了")
def onCancelled():
print("被中断取消了")
# 执行 这一组动作
action.gesture([line1,line2],listener)
#案例3:连续 执行两个Path路径,中途不松手指
from ascript.android import action
from ascript.android.action import Path
line1 = Path(0,1000,True);
line1.moveTo(200,200)
line1.lineTo(200,500)
# 创建另一个新的path路径 模拟 手指2
line2 = Path(1000,500);
line2.moveTo(200,500)
line2.lineTo(500,500)
class listener:
def onCompleted():
gesture.perform(line2)
def onCancelled():
print("被中断取消了")
action.gesture([line1],listener)
虚拟外设
模拟 外设触控 , 类似于在Android设备上插一个 鼠标
,从而进行 模拟操作
.
info
在自动化测试中. 当前应用设置,无障碍点 击无效时. 可以使用此函数模拟鼠标点击.
- 优势:点击,滑动,输入等
不可被屏蔽
- 劣势:需要Android设备与PC电脑
Usb线连接
,设置为充电模式
,并下载Hid客户端
,在app中绑定Id
#class
action.Hid
外设点击
模拟鼠标 点击
action.Hid.click(x:int,y:int,dur:int=20)
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
x | int | 是 | 点击的屏幕X坐标 |
y | int | 是 | 点击的屏幕Y坐标 |
dur | int | 否 | 点击时常 默认20毫秒 |
外设滑动
模拟鼠标 拖拽滑动
action.Hid.slide(x:int,y:int,x1:int,y1:int,dur:int=20):
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
x | int | 是 | 滑动的起始点X坐标 |
y | int | 是 | 滑动的起始点Y坐标 |
x1 | int | 是 | 滑动的结束点X坐标 |
y1 | int | 是 | 滑动的结束点Y坐标 |
dur | int | 否 | 滑动时长 默认20毫秒 |
外设按键
模拟键盘按键
action.Hid.key(**keycode):
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
keycode | str 可变参数 | 是 | 按键值 |
key值
-
类型:
-
字母键:
a
- A键b
- B键c
- C键 ...z
- Z键
-
数字键:
1
- 数字1键2
- 数字2键 ...0
- 数字0键
-
功能键:
enter
- 回车键esc
- ESC键backspace
- 退格键tab
- Tab键space
- 空格键capsLock
- 大写锁定键f1
- F1功能键 ...f12
- F12功能键printScreen
- 打印屏幕键scrollLock
- 滚动锁定键pause
- 暂停键
-
导航键:
insert
- 插入键home
- Home键pageUp
- 上翻页键delete
- 删除键end
- End键pageDown
- 下翻页键rightArrow
- 右箭头键leftArrow
- 左箭头键downArrow
- 下箭头键upArrow
- 上箭头键
-
符号键:
minus
- 减号键equal
- 等号键leftBracket
- 左方括号键rightBracket
- 右方括号键backslash
- 反斜杠键semicolon
- 分号键quote
- 单引号键grave
- 重音符键comma
- 逗号键period
- 句号键slash
- 斜杠键
-
小键盘:
-
numLock
- 小键盘锁定键 -
keypadDivide
- 小键盘除号键 -
keypadMultiply
- 小键盘乘号键 -
keypadSubtract
- 小键盘减号键 -
keypadAdd
- 小键盘加号键 -
keypadEnter
- 小键盘回车键 -
keypad1
- 小键盘1键 ... -
keypad9
- 小键盘9键 -
keypad0
- 小键盘0键 -
keypadDecimal
- 小键盘小数点键 -
描述: 要发送的按键值。
-
-
Shift
:- 类型: Boolean | undefined
- 描述: Shift键的状态,表示是否按下。不传默认为 false。
-
Ctrl
:- 类型: Boolean | undefined
- 描述: Ctrl键的状态,表示是否按下。不传默认为 false。
-
Alt
:- 类型: Boolean | undefined
- 描述: Alt键的状态,表示是否按下。不传默认为 false。
-
Command
:- 类型: Boolean | undefined
- 描述: Command键的状态,表示是否按下。不传默认为 false。
-
id
:- 类型: String
- 描述: 要操作的设备的唯一标识符。
-
捕获点击
捕获用户点击屏幕的坐标
- 函数
action.catch_click(msg: str = None, shine: bool = True):
- 参数
参数 | 类型 | 是否必填 | 说明 |
---|---|---|---|
msg | str | 否 | 捕获屏幕坐标时,要显示的文字.默认无文字显示 |
shine | bool | 否 | 是否闪烁屏幕提示用户. 默认闪烁,False为不闪烁 |
- 返回值
返回用户点击的屏幕坐标位置.
Point 对象. 包含 x,y 属性.分别代表横竖坐标值
- 示例
# 捕获用户点击屏幕的坐标
from ascript.android import action
p = action.catch_click()
print(p)
# 捕获用户点击屏幕的坐标,给出提示文字,并取消屏幕闪烁
from ascript.android import action
p = action.catch_click("请点击屏幕任意位置",False)
print(p)