是Sikuli的新手,并尝试自动化Citirx应用程序。需要帮助
我试图在屏幕中选择用户角色,屏幕有多个角色,因此我需要向下滚动屏幕并搜索特定角色并单击角色。
我有一个特定角色的捕获图像,我需要在Code下面选择和使用。在第二张图片中,我突出了我需要在红色中选择的角色
以下是Code an Trying:
创建方法:
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;
}
}
答案 0 :(得分:1)
图像识别默认使用0.7的相似度(参见description of Patterns in SikuliX Documentation)。这意味着SikuliX寻找“非常相似”的图像。由于方法similar
,您可以指定模式识别的相似性,或者在您的情况下使用方法exact
。
在方法clipExist
中,您应该替换图片的名称:
Match m = screen.exists(clip);
由:
Match m = screen.exists(Pattern(clip).exact())
答案 1 :(得分:0)
似乎SikuliX 1.1在屏幕上查找文本时遇到了一些问题,但识别起作用。您可能希望按屏幕扫描整个文本屏幕并分割线条。接下来将每行与所需角色进行比较并保存相似度。选择具有最大相似性的行。在Python / Jython中,difflib模块中存在一个特殊的函数。
similarity = difflib.SequenceMatcher(None, string_a, string_b)
答案 2 :(得分:0)
以下是您可以选择的替代方案。
第一种选择:捕获滚动条
该方法具有缺点,即当项目的数量是动态的时,(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)。如果您有动态的项目编号,您可以为任何总是大于您的项目数量的数字键入(Key.DOWN)。这是要做的脚本
inside_item = "inside.png"
for n in range(10000):
type(Key.DOWN)
希望有所帮助
答案 3 :(得分: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");
}