屏幕自动化 (Screen)

屏幕自动化对象 Screen 用于获取屏幕属性以及操作屏幕。

Screen 对象提供以下方法:

方法名 描述
screenRect 获取指定监视器或所有屏幕的边界信息。
all 获取所有屏幕的边界信息。
colorAt 获取屏幕上特定点的颜色。
capture 捕获屏幕上的特定矩形区域的截图。
captureToFile 捕获屏幕截图并保存到指定文件路径。
highlight 高亮显示屏幕上指定矩形区域。
takeScreenshot 获取屏幕截屏并保存到指定文件路径。

类型定义

JavaScript
Python
export class Screen {
    static screenRect(moniter?: number): Rect
    static all(moniter?: number): Rect[]
    static colorAt(x: number, y: number): string;
    static capture(rect?: Rect): Buffer;
    static captureToFile(filePath: string, rect?: Rect): void;
    static takeScreenshot(filePath: string, monitor?: number): string | void;
    static highlight(rect: Rect, duration?: number);
    // static screenSize(): {width: number, height: number}; // deprecated
}
class Screen():
    def all() -> "List[Rect]"
    def screenRect(monitor: Optional[int]=None) -> "Rect"
    def colorAt(x: int, y: int) -> str
    def capture(rect: Optional[Rect]=None) -> "bytearray"
    def captureToFile(filePath: str, rect: Optional[Rect]=None) -> None
    def highlight(rect: Rect, duration: Optional[int]=None) -> "any"
    # def screenSize() -> TypedDict # deprecated 弃用

Rect类

Rect 类用于描述控件的形状和位置信息。在 CukeTest 中,所有控件都可以用一个矩形(Bounding Rectangle)来描述其位置和形状。Rect 对象包含以下属性:

  • x: number 类型,表示相对坐标的水平像素;
  • y: number 类型,表示相对坐标的垂直像素;
  • width: number 类型,表示矩形的宽度,单位为像素;
  • height: number 类型,表示矩形的高度,单位为像素;

JavaScript
Python
interface Rect {
    x: number;
    y: number;
    width: number;
    height: number;
}
class Rect:
    x: int
    y: int
    width: int
    height: int

API 介绍

screenRect(monitor)

获取指定监视器或所有屏幕的边界信息。

参数:

  • monitor: (可选)要获取边界信息的监视器的编号。不传参数或传 -1,会获取所有屏幕合并后的尺寸,数值上等于 Screen.capture 方法获取到截图的尺寸。传 0 返回第一个显示屏,1 返回第二个,以此类推。

返回值:

  • Rect 对象,表示指定监视器的边界信息。

使用示例

以下示例展示了如何使用 Screen.screenRect 方法获取指定监视器的边界信息:

JavaScript
Python
const { Screen } = require('leanpro.common');
// 获取主屏幕的边界信息
const mainScreenRect = Screen.screenRect();
console.log('Main Screen Rect:', mainScreenRect);

// 获取编号为 1 的监视器的边界信息
const monitor1Rect = Screen.screenRect(1);
console.log('Monitor 1 Rect:', monitor1Rect);
from leanproAuto import Screen
# 获取主屏幕的边界信息
main_screen_rect = Screen.screenRect()
print('Main Screen Rect:', main_screen_rect)

# 获取编号为 1 的监视器的边界信息
monitor1_rect = Screen.screenRect(1)
print('Monitor 1 Rect:', monitor1_rect)

在这个例子中,我们首先获取主屏幕的边界信息,然后获取编号为 1 的监视器的边界信息,并将这些信息打印出来。

all()

获取所有屏幕的边界信息。这对于多屏幕环境尤其有用,可以通过此方法获取每个屏幕的位置和尺寸。

返回值:

  • Rect 对象数组,其中每个 Rect 对象表示一个屏幕的边界信息。

使用示例

以下示例展示了如何使用 Screen.all 方法获取所有屏幕的边界信息:

JavaScript
Python
const { Screen } = require('leanpro.common');
const screens = Screen.all();

screens.forEach((screen, i) => {
    console.log(`Screen ${i}:`, screen);
});
from leanproAuto import Screen
screens = Screen.all()

for i, screen in enumerate(screens):
    print(f"Screen {i}: {screen}")

在这个例子中,我们首先使用 Screen.all 方法来获取所有屏幕的信息,然后遍历结果并打印出每个屏幕的边界信息。

screenSize()

不建议使用,可以用screenRect代替。

用于获取当前屏幕的尺寸,即屏幕的宽度和高度。它不需要任何参数。

返回值:

  • {width: number, height: number},这两个属性分别表示屏幕的宽度和高度,以像素为单位。

colorAt(x, y)

获取屏幕上特定点的颜色。返回值为一串十六进制格式的 RGB 颜色代码字符串,形如 FFFFFF

参数:

  • x: number 类型,定义所需获取颜色点的水平坐标,起点在屏幕的最左边。
  • y: number 类型,定义所需获取颜色点的垂直坐标,起点在屏幕的最顶部。

返回值:

  • string 类型,一串十六进制格式的 RGB 颜色代码字符串。

使用示例

以下示例展示了如何使用 Screen.colorAt 方法来获取屏幕上某个特定点的颜色:

JavaScript
Python
const { Screen } = require('leanpro.common');
const x = 500;
const y = 300;
const color = Screen.colorAt(x, y);

console.log(`Color at (${x}, ${y}): ${color}`);
from leanproAuto import Screen
x = 500
y = 300
color = Screen.colorAt(x, y)

print(f"Color at ({x}, {y}): {color}")

在这个例子中,我们首先定义了所需点的 x 和 y 坐标,然后使用 Screen.colorAt 方法来获取这个点的颜色。最后,我们打印出这个颜色值。

capture(rect)

捕获屏幕上的特定矩形区域的截图。如果没有指定矩形区域,那么此方法将捕获整个屏幕的截图。

参数:

  • rect: (可选)Rect 类型,用来定义要截图的矩形区域的位置和尺寸。如果此参数未提供,那么方法将捕获整个屏幕的截图。

返回值:

  • Buffer 类型,其中包含了捕获的截图数据,这个 Buffer 对象可以被用来将截图数据保存为文件,或者用于其他需要使用图像数据的场景。例如用于报告附件,或者使用Image.from()方法构造Image对象。

使用示例

1. 捕获整个屏幕并将其添加至报告

JavaScript
Python
const { Screen } = require('leanpro.common');
const image_buffer = Screen.capture();
this.attach(image_buffer, 'image/png');
from leanproAuto import Screen
import base64
image_buffer = Screen.capture()
#这里需要用base64库将buffer形式转化为字符串形式
image_string = base64.b64encode(image_buffer).decode('utf-8')
request.attach(image_string, "image/png")

在以上示例中,Screen.capture() 在未提供 rect 参数的情况下默认捕获整个屏幕。捕获的图像数据以 Buffer 对象的形式返回,并通过 attach() 方法附加到报告中。

2. 捕获特定区域并保存为 PNG 文件

JavaScript
Python
const { Screen } = require('leanpro.common');
const fs = require('fs');
const rect = { "x": 555, "y": 358, "width": 126, "height": 34 };
const buffer = Screen.capture(rect);

fs.writeFileSync('screenshot.png', buffer);
from leanproAuto import Screen
rect = { "x": 555, "y": 358, "width": 126, "height": 34 }
buffer = Screen.capture(rect)

with open('screenshot.png', 'wb') as f:
    f.write(buffer)

在这个示例中,我们定义了矩形区域的坐标(x, y)和尺寸(width, height),然后调用 Screen.capture(rect) 捕获该区域的截图,并将结果保存为 PNG 文件。

captureToFile(filePath, rect)

捕获屏幕截图并将其保存到指定文件路径。用户可以选择截取整个屏幕或者截取屏幕上的特定区域。

参数:

  • filePath: string 类型,这是一个字符串,表示截图保存的文件路径。文件路径应包含文件名和扩展名。支持的文件格式包括 .jpg, .png, .bmp 等。
  • rect: (可选)Rect 类型,如果这个参数没有提供,那么会捕获整个屏幕的截图。

返回值:

  • 此方法没有返回值。

使用示例

以下示例展示了如何使用 Screen.captureToFile 方法来截取整个屏幕的截图并保存到指定的文件路径:

JavaScript
Python
const { Screen } = require('leanpro.common');
Screen.captureToFile("C:/Users/Username/Desktop/screenshot.png");
from leanproAuto import Screen
Screen.captureToFile("C:/Users/Username/Desktop/screenshot.png")

以下示例展示了如何使用 Screen.captureToFile 方法来截取屏幕上特定区域的截图并保存到指定的文件路径:

JavaScript
Python
const { Screen } = require('leanpro.common');
Screen.captureToFile("C:/Users/Username/Desktop/screenshot.png", { "x": 555, "y": 358, "width": 126, "height": 34 });
from leanproAuto import Screen
Screen.captureToFile("C:/Users/Username/Desktop/screenshot.png", { "x": 555, "y": 358, "width": 126, "height": 34 })

在这个例子中,矩形区域的左上角坐标是 (555,358),矩形的宽度是 126 像素,高度是 34 像素。

highlight(rect, duration)

高亮显示屏幕上指定矩形区域的函数。这个功能在标识和追踪特定屏幕区域时特别有用,如在测试过程中,它可以直观地显示出正在测试或分析的区域。

参数:

  • rect: Rect 类型,用来定义要高亮的矩形区域的位置和尺寸。
  • duration: (可选)number 类型。这是一个代表高亮显示持续时间的数字,单位是毫秒。如果这个参数没有提供,那么高亮显示将持续到下一个 highlight 调用,或者到测试结束。

返回值:

  • 此方法没有返回值。

使用示例

以下示例展示了如何使用 Screen.highlight 方法来高亮显示一个特定的屏幕区域:

JavaScript
Python
const { Screen } = require('leanpro.common');
Screen.highlight({ "x": 555, "y": 358, "width": 126, "height": 34 });
from leanproAuto import Screen
Screen.highlight({ "x": 555, "y": 358, "width": 126, "height": 34 })

在这个例子中,矩形区域的左上角坐标是 (555, 358),矩形的宽度是 126 像素,高度是 34 像素。

takeScreenshot(filePath, monitor)

获取屏幕截屏并保存到指定文件路径。由原先的Util.takeScreenshot方法合并而来,获取屏幕截屏。

参数:

  • filePath: string 类型,表示截图保存的文件路径。文件路径应包含文件名和扩展名。支持的文件格式包括 .jpg, .png, .bmp 等。
  • monitor: (可选)number 类型,要获取截图的监视器的编号。不传参数或传 -1,会获取所有屏幕合并后的截图。传 0 返回第一个显示屏,1 返回第二个,以此类推。

返回值:

  • stringvoid,保存截图的文件路径或无返回值。

使用示例

以下示例展示了如何使用 Screen.takeScreenshot 方法来获取屏幕截屏并保存到指定文件路径:

JavaScript
const { Screen } = require('leanpro.common');
Screen.takeScreenshot("C:/Users/Username/Desktop/screenshot.png");

results matching ""

    No results matching ""