1

我是 Sikuli 的新手,正在尝试自动化 Citirx 应用程序。需要帮忙

我试图在屏幕中选择用户角色,屏幕有多个角色,因此我需要向下滚动屏幕并搜索特定角色并单击角色。

我已经捕获了我需要在代码下方选择和使用的特定角色的图像。在第二张图片中,我用红色突出显示了我需要选择的角色

在此处输入图像描述 在此处输入图像描述

以下是尝试中的代码:

创建方法:

 public static boolean clipExist(Screen screen, String clip )
 {
        Match m = screen.exists(clip);
         if(m != null)
      {
              return true;
        }
       else
       {
          return false;
       }
   }

使用方法:

        while(! clipExist(screen, "C:\\Users\\Satish_D1\\workspace\\Sikuli Demo\\Images\\DownArrow.PNG"))       
    {           
       screen.wheel(1 , 3);     
       if(clipExist(screen, "C:\\Users\\Satish_D1\\workspace\\Sikuli Demo\\Images\\Roles\\UK\\ENTP\\GEDIS_SALES_SUPPORT_ORL_CPF2.0_UK_ENTP.PNG"))
       {
        screen.doubleClick("C:\\Users\\Satish_D1\\workspace\\Sikuli Demo\\Images\\Roles\\UK\\ENTP\\GEDIS_SALES_SUPPORT_ORL_CPF2.0_UK_ENTP.PNG",0);
        break;
       }
      }
4

4 回答 4

2

图像识别默认使用 0.7 的相似度(参见SikuliX 文档中的模式描述)。这意味着 SikuliX 会寻找“非常相似”的图像。由于该方法,您可以指定模式识别的相似性similar,或者在您的情况下使用该方法exact。在您的方法clipExist中,您应该替换图像的名称:

    Match m = screen.exists(clip);

经过:

    Match m = screen.exists(Pattern(clip).exact())
于 2016-02-22T13:39:57.860 回答
0

以下是您可以做的替代方案。

第一种选择:捕获滚动条

  1. 捕获滚动​​条中的向下箭头
  2. 到达滚动条末尾时捕获图像。图像包含滚动进度和滚动条的向下箭头
  3. 单击向下箭头,直到找到 (2) 的图像

这种方法有一个缺点,即当项目的数量是动态的时,(2)的视觉外观会有所不同,尤其是滚动进度。但是,这可以通过仅捕获滚动进度的下部和箭头来欺骗。请注意,您的鼠标可能会在(3)中遇到困难,因为当它被鼠标覆盖时您可能找不到(2)。为了解决这个问题,每次单击向下箭头时,您可以在检查 (2) 之前将鼠标悬停一点。这是完整的脚本:

down_arrow = "downarrow.png"
complete_scroll = "completescroll.png"

while not exists(complete_scroll):
    click(down_arrow)
    hover(Location(300, 200))

第二种选择,使用键盘(向下键)

单击要滚动的项目中的任意位置,然后为您拥有的项目数执行一些类型(Key.DOWN)。如果您有动态的项目数,您可以为任何始终大于您的项目数的数字执行 type(Key.DOWN) 。这是要执行的脚本

inside_item = "inside.png"

for n in range(10000):
    type(Key.DOWN)

希望能帮助到你

于 2016-03-17T23:21:51.573 回答
0

我使用“s”作为屏幕类参考。因此,一旦我们获得图像,我们将设置相同的区域,然后设置您要单击的所需图像

public static void main(String args[])
{
    Match m = s.find("IMAGE");
    Region r = new Region(m.x+11, m.y+22,12,12);
    r.click(); 
    s.find("ENTPIMAGE.PNG");
    r.click("ENTPIMAGE.PNG");
}  
于 2019-08-09T13:51:52.337 回答
0

似乎 SikuliX 1.1 在屏幕上查找文本时遇到了一些问题,但识别有效。您可能希望逐屏扫描整个文本屏幕并拆分行。接下来将每一行与所需的角色进行比较,并保存相似度。选择相似度最大的行。在 Python/Jython 中,difflib 模块中有一个特殊的函数。 similarity = difflib.SequenceMatcher(None, string_a, string_b)

于 2015-12-07T13:25:49.390 回答