从零开发短视频电商 自动化测试SikuliX-编程方式


之前编写的相关的博客如下

官网: http://sikulix.com/
Github:https://github.com/sikuli/sikuli

教程

  • https://sikulix-2014.readthedocs.io/en/latest/toc.html

  • https://sikulix-2014.readthedocs.io/en/latest/genindex.html

引入依赖

<dependency>
  <groupId>com.sikulix</groupId>
  <artifactId>sikulixapi</artifactId>
  <version>2.0.5</version>
</dependency>

核心

  • 模拟操控键盘和鼠标java.awt.Robot
  • OCR使用 tess4j
  • 图形匹配 Opencv

主要使用Sikuli 的Screen 类Pattern 类来执行基本的 UI 操作。这里Screen类主要充当基类。让我们看一下与 Sikuli 进行 UI 交互的一些重要方法。

屏幕类

Screen sc = new Screen();

注意: Sikuli 使用图像进行对象识别,因此,每个方法都将至少接受一个参数作为图像文件的路径。

Screen类包含用于屏幕元素上所有常用操作的预定义方法,如单击、双击、向文本框提供输入、悬停等。

由于类 Screen 扩展了类Region,因此类 Region 的所有方法都可用于 Screen 对象。

使用整个屏幕进行查找操作会对性能产生影响。因此,如果可能的话,将查找操作限制在较小的区域对象(例如reg.find())以加快处理速度。

方法 描述 句法
单击(“<图像路径>”) 用于对指定图片进行点击操作。 sc.click(“img.png”);
右键单击(“<图像路径>”) 它用于在指定屏幕上执行右键单击。 sc.rightClick(“img.png”);
双击(“<图像路径>”) 它用于对给定图像执行双击。 sc.doubleClick(“img.png”);
查找(“<图像路径>”) 此方法用于查找屏幕上是否存在特定元素。 sc.find(“img.png”);
存在(“<图像路径>”) 此方法检查屏幕上是否存在特定元素。 sc.exists(“img.png”);
输入(“<图像路径>”,“文本”) 该方法用于在特定对象上输入文本。 sc.type(“img.png”,“文本”);
拖动(“source_img”。“target_img”) 它允许将源对象拖动到目标对象。 sc.dragDrop(“img1.png”,“img2.png”);
鼠标滚轮(“<image_path>”,位置,方向) 它允许对特定图像执行滚轮移动动作。 sc.wheel(“img.png”,30, 1);
悬停(“<图像路径>”) 此方法允许将鼠标悬停在特定对象上。 sc.hover(“img.png”);
粘贴(“<图像路径>”,“文本”) 此方法用于将一些文本粘贴到特定文本对象。 sc.paste(“img.png”,“文本”);

标识元素

Sikuli 可能会识别不同的对象,因此在这种情况下我们可以使用 Pattern 类来唯一地标识对象。

Pattern pattern = new Pattern(“图像的路径”);

Pattern类中编写的一些方法如下:

方法 描述 句法
pat.getFileName() 该方法用于获取图像的文件名。 String file = pat.getFileName();
pat.similar() 它通过相似度值返回。相似度值介于 0 到 1 之间。 Pattern p = pat.similar(0.5f);
pat.exact() 它返回精确匹配的图像模式,相似度值为 1。 Pattern p = pat.exact();
pat.getFileURL() 该方法返回图像文件的 URL。 URL url = pat.getFileURL;
pat.getImage() 它返回一个新图像。 Image img = pat.getImage();

常见API

// 会在将要发生操作的位置显示视觉效果(闪烁的双线红色圆圈)约 2 秒
Settings.setShowActions(true);
// 启动和停止其他应用程序并将它们置于前面,最大等待8s
App.open("C:\Program Files\Mozilla Firefox\firefox.exe",8)
// 获取有关运行时环境的信息
Settings.getOS()
Settings.isWindows()
// 获取剪贴板的内容
App.getClipboard()
// 获取鼠标光标的当前位置
Mouse.at()
// OCR
OCR.readLine()
// 设置搜索图像的基本路径
ImagePath.setBundlePath("C:\laker\TA\demota\images");
Screen screen = new Screen();
screen.find("image1");
screen.find("imageset1/image2");
// 等2s
screen.wait(2D);
// 指定图案命中相似度为0.6,更容易命中
screen.find(new Pattern("OpenButton.PNG").similar(0.6));
// 截取一个区域抽取文本
//   截取一个区域,你可以根据需要调整坐标和大小 坐标可以配合截图工具
Region region = new Region(100, 100, 300, 200);
region.text();
// 截取屏幕上的指定区域并保存为图像
String saveCapture1 = screen.saveCapture(region, "abc")
// 返回可用屏幕的数量
int numberScreens = Screen.getNumberScreens();
// 返回默认/主监视器覆盖的矩形。
Rectangle screenBounds = screen.getBounds();
// 打印有关当前监视器设置的信息
Screen.showMonitors();
// 检查某个区域是否包含在屏幕中
Region.isValid()  
// 高亮区域
region.highlight();
// 取消高亮
region.highlightOff();

示例

示例1 打开Chrome在CSDN关注Laker

// 会在将要发生操作的位置显示视觉效果(闪烁的双线红色圆圈)约 2 秒
Settings.setShowActions(true);
// 设置搜索图像的基本路径
ImagePath.setBundlePath("C:\\laker\\TA\\demota\\images");
// 初始化screen
Screen screen = new Screen();
// 打开Chrome 方式一
  Pattern chrome = new Pattern( "chrome.png");
  screen.doubleClick(chrome);
// 打开Chrome 方式二,推荐 等待8秒
String appName = "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe";
App.open(appName, 8);
// 输入
screen.type("www.csdn.net");
// 按ENTER键
screen.type(Key.ENTER);
// 等2s
screen.wait(2D);
// 按ENTER键
screen.type(Key.ENTER);
// 指定图案命中相似度为0.8,更容易命中
Pattern searchButton = new Pattern("search.png").similar(0.8);
// 最大等待10s 搜索框显示出来
screen.wait(searchButton, 10);
// 在搜索框中 输入“lakernote”
screen.type(searchButton, "lakernote");
screen.type(Key.ENTER);
screen.type(Key.ENTER);
// 等待并点击用户按钮
Pattern userButton = new Pattern("user.png").similar(0.8);
screen.wait(userButton, 10);
screen.click(userButton);
// 等待并点击关注按钮
Pattern followButton = new Pattern("follow.png").similar(0.8);
screen.wait(followButton, 10);
screen.click(followButton);
// 关闭chrome
App.close(appName);

示例2 登录带验证码系统

// 会在将要发生操作的位置显示视觉效果(闪烁的双线红色圆圈)约 2 秒
Settings.setShowActions(true);
// 设置搜索图像的基本路径
ImagePath.setBundlePath("C:\\laker\\TA\\demota\\images");
// 初始化screen
Screen screen = new Screen();
// 打开Chrome 
String appName = "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe";
App.open(appName, 8);
// 输入
screen.type("http://101.132.189.23:81/admin/index.html");
// 按ENTER键
screen.type(Key.ENTER);
// 按ENTER键
screen.type(Key.ENTER);
// 等待页面加载完成 指定图案命中相似度为0.8,更容易命中
Pattern searchButton = new Pattern("login.png").similar(0.8);
screen.wait(searchButton, 10);
int numberScreens = Screen.getNumberScreens();
System.out.println("numberScreens : " + numberScreens);
Rectangle screenBounds = screen.getBounds();
System.out.println("screenBounds:" + screenBounds);
// 打印有关当前监视器设置的信息
Screen.showMonitors();
// 截取一个区域,你可以根据需要调整坐标和大小 坐标可以配合截图工具
Region region = new Region(1020, 700, 150, 50);
String saveCapture1 = screen.saveCapture(region, "abc");
System.out.println(saveCapture1);
// 使用ocr 获取文本
String text = region.text();
System.out.println("text: " + text);
// 高亮区域
region.highlight();
region.wait(2d);
// 取消高亮
region.highlightOff();
App.close(appName);

猜你喜欢

转载自blog.csdn.net/abu935009066/article/details/132736414