屏幕自动化 (Screen)
Screen 对象用于获取屏幕属性以及对屏幕进行操作。它可以帮助你获取屏幕的边界信息、捕获屏幕截图、获取特定点的颜色,以及高亮显示屏幕上的指定区域。
你可以通过以下方式引入 Screen 对象:
const { Screen } = require('leanpro.common');from leanproAuto import ScreenScreen 对象提供以下方法:
| 方法名 | 描述 |
|---|---|
| screenRect | 获取指定监视器或所有屏幕的边界信息。 |
| all | 获取所有屏幕的边界信息。 |
| colorAt | 获取屏幕上特定点的颜色。 |
| capture | 捕获屏幕上的特定矩形区域的截图。 |
| captureToFile | 捕获屏幕截图并保存到指定文件路径。 |
| highlight | 高亮显示屏幕上指定矩形区域。 |
| takeScreenshot | 获取屏幕截屏并保存到指定文件路径。 |
类型定义
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类型,表示矩形的高度,单位为像素;
interface Rect {
x: number;
y: number;
width: number;
height: number;
}class Rect:
x: int
y: int
width: int
height: intAPI 介绍
screenRect(monitor)
获取指定监视器或所有屏幕的边界信息。
参数:
- monitor: (可选)要获取边界信息的监视器的编号。不传参数或传
-1,会获取所有屏幕合并后的尺寸,数值上等于 Screen.capture 方法获取到截图的尺寸。传0返回第一个显示屏,1返回第二个,以此类推。
返回值:
Rect对象,表示指定监视器的边界信息。
使用示例
以下示例展示了如何使用 Screen.screenRect 方法获取指定监视器的边界信息:
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 方法获取所有屏幕的边界信息:
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 方法来获取屏幕上某个特定点的颜色:
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. 捕获整个屏幕并将其添加至报告
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 文件
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 方法来截取整个屏幕的截图并保存到指定的文件路径:
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 方法来截取屏幕上特定区域的截图并保存到指定的文件路径:
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 方法来高亮显示一个特定的屏幕区域:
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返回第二个,以此类推。
返回值:
string或void,保存截图的文件路径或无返回值。
使用示例
以下示例展示了如何使用 Screen.takeScreenshot 方法来获取屏幕截屏并保存到指定文件路径:
const { Screen } = require('leanpro.common');
Screen.takeScreenshot("C:/Users/Username/Desktop/screenshot.png");