• 从零开发短视频电商 自动化测试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.sikulixgroupId>
      <artifactId>sikulixapiartifactId>
      <version>2.0.5version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    核心

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

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

    屏幕类

    Screen sc = new Screen();
    
    • 1

    注意: 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”);
    鼠标滚轮(“”,位置,方向)它允许对特定图像执行滚轮移动动作。sc.wheel(“img.png”,30, 1);
    悬停(“<图像路径>”)此方法允许将鼠标悬停在特定对象上。sc.hover(“img.png”);
    粘贴(“<图像路径>”,“文本”)此方法用于将一些文本粘贴到特定文本对象。sc.paste(“img.png”,“文本”);

    标识元素

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

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

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    示例

    示例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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    示例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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
  • 相关阅读:
    Spring Cloud学习笔记【分布式请求链路跟踪-Sleuth】
    【持续集成_03课_Linux部署Sonar+Gogs+Jenkins】
    [轻笔记] label smoothing(标签平滑)
    Gif格式图片怎么制作?超简单的方法分享
    TensorFlow实战教程(十九)-Keras搭建循环神经网络分类案例及RNN原理详解
    BL808学习日志-0-概念理解
    电脑录屏快捷键是什么?电脑录屏是什么键
    前端设计模式之【代理模式】
    英特尔:如何从“小芯片”布局到通用量子计算机
    QT学习日记21——五子棋AI
  • 原文地址:https://blog.csdn.net/abu935009066/article/details/132736414