图案对象API

Pattern类的定义

图案对象Pattern的类型定义如下,可以作为API清单的参考。

JavaScript
Python
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.qtleanpro.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)为点击相对控件的坐标,当xy同时为0或缺省时点击控件中心。

  • x: (可选)number类型,拖拽起点相对控件的水平坐标偏移像素,左负右正。缺省为0,图案对象的水平中心。
  • y: (可选)number类型,拖拽起点相对控件的水平坐标偏移像素,左负右正。缺省为0,图案对象的垂直中心。
  • 返回值: 不返回任何值的异步方法。

可以参考拖拽控件的方式选择

drop(x?: number, y?: number): Promise<void>

在图案对象匹配结果的位置松开鼠标左键,也就是拖拽操作的第二步。传入的(x, y)为点击相对控件的坐标,当xy同时为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>

获取图案对象匹配结果的位置和大小信息。

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对象一般先通过模型管理器中拾取,然后将对象方法从模型管理器拖拽到代码编辑器中就可以直接生成。例如下面的生成代码:

JavaScript
await model.getPattern("Pattern1").click();

除了上面直接调用,也可以通过传入参数来覆盖图案对象中的同名参数:

JavaScript
await model.getPattern("PatternName", {resizeFactor: 2});
上述的脚本可以无视图案对象中的缩放因子,强行使用2的缩放因子进行匹配。相似度阈值similarity同样。

如果Pattern对象需要代码中重复使用,可以先将它赋值给变量,然后再使用变量调用,例如:

JavaScript
let pattern = await model.getPattern("PatternName");
pattern.click();

需要注意的是,Pattern对象中的定位信息是缓存的,也就是说如果Pattern对象如上赋值给了一个变量,并调用它的某个操作(如click)后,它会把图像匹配的结果缓存在对象中,这时候,你再调用它的其他方法就不会重新做图案匹配。这样的好处是执行更高效。但如果你的控件在屏幕上是不固定的,您需要用这个图案变量调用locate方法重新定位,以确保在准确的位置操作控件。

results matching ""

    No results matching ""