图案对象API
Pattern类的定义
图案对象Pattern
的类型定义如下,可以作为API清单的参考。
interface PatternControl {
click(x: number, y: number, mouseKey: MouseKey): Promise<void>;
dblClick(x?: number, y?: number, mousekey?: MouseKey): Promise<void>;
drag(x: number, y: number): Promise<void>;
drop(x: number, y: number): Promise<void>;
exists(seconds: number): Promise<boolean>;
findAll(): Promise<PatternControl[]>;
highlight(duration: number): Promise<void>;
hover(): Promise<void>;
locate(): Promise<PatternControl>;
modelProperties(): {[x: string]: any};
moveMouse(x?: number, y?: number, seconds?: number): Promise<void>;
rect(): Promise<Rect>;
score(): Promise<number>;
takeScreenshot(filePath?: string): Promise<string>;
wait(seconds: number): Promise<void>;
}
class Pattern():
def click(x: Optional[int]=None, y: Optional[int]=None, mouseKey: Optional[int]=None) -> None
def dblClick(x: Optional[int]=None, y: Optional[int]=None, mouseKey: Optional[int]=None) -> None
def drag(x: int, y: int) -> None
def drop(x: int, y: int) -> None
def exists(seconds: Optional[int]=None) -> bool
def findAll() -> "List[Pattern]"
def highlight(, duration: Optional[int]=None) -> None
def hover() -> None
def locate() -> "Pattern"
def moveMouse(x: Optional[int]=None, y: Optional[int]=None, seconds: Optional[int]=None) -> None
def rect() -> "Rect"
def score() -> int
def takeScreenshot(filePath: Optional[str]=None) -> str
def wait(seconds: Optional[int]=None) -> None
因为图案对象可以独立存在,也可以创建子图案对象,所以Pattern对象可以从任何的库的模型对象中访问。例如独立使用的话从leanpro.common
中的Model对象中访问,也可以从leanpro.win
,leanpro.qt
或leanpro.java
等库中的模型对象中访问,如果是子图案的话就是从父对象对应的库中获取。
API说明
click(x?: number, y?: number, mouseKey?: MouseKey): Promise<void>
点击目标图案,可以指定点击的偏移量,默认点击位置为图案正中心。如果被点击的图案还未匹配到结果,会在点击前进行匹配。
- x: (可选)
number
类型,横坐标,缺省为图案对象的水平中心。 - y: (可选)
number
类型,纵坐标,缺省为图案对象的垂直中心。 - mouseKey: (可选)
MouseKey
类型,点击使用的按键,缺省为1
,代表鼠标左键。 - 返回值:是没有任何返回值的异步方法。
使用方法参考对象共有的方法和属性click()
dblClick(x?: number, y?: number, mouseKey?: MouseKey): Promise<void>
双击图案控件,参数同click
。
drag(x?: number, y?: number): Promise<void>
在图案对象匹配结果的位置按下鼠标左键,也就是拖拽操作的第一步,并等待松开鼠标的指令。传入的(x, y)
为点击相对控件的坐标,当x
和y
同时为0或缺省时点击控件中心。
- x: (可选)
number
类型,拖拽起点相对控件的水平坐标偏移像素,左负右正。缺省为0,图案对象的水平中心。 - y: (可选)
number
类型,拖拽起点相对控件的水平坐标偏移像素,左负右正。缺省为0,图案对象的垂直中心。 - 返回值: 不返回任何值的异步方法。
可以参考拖拽控件的方式选择
drop(x?: number, y?: number): Promise<void>
在图案对象匹配结果的位置松开鼠标左键,也就是拖拽操作的第二步。传入的(x, y)
为点击相对控件的坐标,当x
和y
同时为0或缺省时点击控件中心。可以在A
控件上执行drag()
方法,在B
控件上执行drop()
方法,实现将A
控件拖拽到B
控件上的效果,具体文档可以查看拖拽的方法。
- x: (可选)
number
类型,拖拽起点相对控件的水平坐标偏移像素,左负右正。缺省为0。 - y: (可选)
number
类型,拖拽起点相对控件的水平坐标偏移像素,左负右正。缺省为0。 - 返回值: 不返回任何值的异步方法。
可以参考拖拽控件的方式选择
exists(seconds: number): Promise<boolean>
在等待一定时长并循环尝试匹配,如果在指定时间内匹配到结果返回ture
;超过等待时间并且没有匹配到结果则返回false
。
- seconds:
number
类型,等待时间,单位为秒。 - 返回值:
Promise<boolean>
类型,匹配到结果则返回true
,超时返回false
。
使用方法参考对象共有的方法和属性exists()
findAll(): Promise<PatternControl[]>
执行图案对象的匹配,并返回所有匹配结果,如果没有匹配到结果则返回空数组。
- 返回值:
Promise<PatternControl[]>
类型,异步的返回一个包含所有匹配结果的Pattern
对象数组,如果没有匹配到结果则返回空数组。
highlight(duration: number): Promise<void>
控件高亮,可以传入参数指定高亮持续毫秒时间,默认值为1000,即持续1秒。
- duration: (可选)
number
类型,高亮持续时间,单位为毫秒。 - 返回值: 不返回任何值的异步方法。
hover(x?: number, y?: number): Promise<void>
使鼠标光标悬停在目标图案上,可以指定悬停位置的偏移量,默认位置为图案正中心。如果被操作的图案还未匹配到结果,会在操作前进行匹配。
- x: (可选)
number
类型,横坐标,缺省为图案对象的水平中心。 - y: (可选)
number
类型,纵坐标,缺省为图案对象的垂直中心。 - 返回值: 没有任何返回值的异步方法。
locate(): Promise<PatternControl>
执行图案对象的匹配,并返回匹配结果。如果匹配到多个结果,则会返回相似度(score)最高的那个结果。
- 返回值:
Promise<PatternControl>
类型,如果没有匹配到结果会提示1001: ObjectNotExist
。
modelProperties(): {[x: string]: any};
返回图案对象的模型属性,即在添加图案对象时生成的缓存属性,如截图文件的路径、截图的区域坐标等。
- 返回值:
Promise<obeject>
,返回一个任意对象,对于普通的图案对象,通常返回形如以下对象的结果:JavaScript{ boundingRectangle: "[99,100,63,56]", imagePath: "image.png" }
使用方法参考对象共有的方法和属性modelProperties()
moveMouse(x?: number, y?: number, seconds?: number): Promise<void>
将鼠标移动到目标位置,可以指定偏移量,默认位置为图案正中心。
- x: (可选)
number
类型,横坐标,缺省为图案对象的水平中心; - y: (可选)
number
类型,纵坐标,缺省为图案对象的垂直中心; - seconds: (可选)
number
类型,移动时间,值越小鼠标移动越快; - 返回值:是没有任何返回值的异步方法。
使用方法参考对象共有的方法和属性moveMouse()
score(): Promise<number>
获取图案对象匹配结果的相似度结果,范围为[0,1)。
- 返回值:
Promise<number>
,一个0~1范围内的浮点数字,越大表示匹配结果越相似。
rect(): Promise<Rect>
获取图案对象匹配结果的位置和大小信息。
- 返回值:
Promise<Rect>
对象,包含匹配对象的x、y、width、height信息。
wait(seconds: number): Promise<void>
在等待一定时长并循环尝试匹配,如果在指定时间内匹配到结果则会返回结果并继续运行接下来的语句;超过等待时间并且没有匹配到结果则会抛错,可以指定错误信息。缺省等待5秒。
- seconds:
number
类型,等待时间,单位为秒。默认值为5秒。 - 返回值:
Promise<void>
类型,不返回任何结果的异步方法,如果超时没找到目标图案则抛错。
takeScreenshot(filePath?: string): Promise<string>
匹配目标并截图,可以传入路径来将截图保存到路径位置。
- filePath: (可选)
string
类型,截图的保存路径和文件名,如"./images/screenshot1.png"
。 - 返回值: 异步的返回截图的
base64
字符串。
使用
截取整个屏幕图片,以png格式保存,并返回截图的base64
编码,可以直接作为运行报告的报告附件。
Pattern对象的代码生成
Pattern对象一般先通过模型管理器中拾取,然后将对象方法从模型管理器拖拽到代码编辑器中就可以直接生成。例如下面的生成代码:
await model.getPattern("Pattern1").click();
除了上面直接调用,也可以通过传入参数来覆盖图案对象中的同名参数:
await model.getPattern("PatternName", {resizeFactor: 2});
2
的缩放因子进行匹配。相似度阈值similarity
同样。
如果Pattern对象需要代码中重复使用,可以先将它赋值给变量,然后再使用变量调用,例如:
let pattern = await model.getPattern("PatternName");
pattern.click();
需要注意的是,Pattern对象中的定位信息是缓存的,也就是说如果Pattern对象如上赋值给了一个变量,并调用它的某个操作(如click)后,它会把图像匹配的结果缓存在对象中,这时候,你再调用它的其他方法就不会重新做图案匹配。这样的好处是执行更高效。但如果你的控件在屏幕上是不固定的,您需要用这个图案变量调用locate方法重新定位,以确保在准确的位置操作控件。