我在同一页面上有相同的按钮,我希望Sikuli只点击其中一个,但最后点击另一个名字清酒按钮。不幸的是,按钮名称无法更改。关于如何处理这种情况的任何建议?
谢谢!
答案 0 :(得分:2)
您可以告诉Sikuli相对于给定的图像/屏幕截图对象在屏幕上的特定区域上操作。这称为TargetOffset。假设您询问是否以编程方式使用sikuli,请参阅here。从Sikuli IDE中,双击屏幕截图图像,它会弹出一个窗口,您可以在其中设置精度和targetOffset。
答案 1 :(得分:1)
如果两个图标靠得很近,并且总是以相同的方式显示,并且它们之间的空间总是会显示相同,那么
click(imageOfTwoIcons).targetOffset(x,y)
可能是最简单的方法。但是,如果有任何东西会使这种方法不可靠(两个图标之间的任何东西看起来都不同于你拍摄它们时的屏幕截图) -
您还可以使用python sorted()函数按位置对图像进行排序。例如,如果一个图像总是在另一个图像之上,那么您可以找到两个图像并按y坐标对它们进行排序,如下所示:
#a little prep for the sorted function to get the y coord of the icon
def byY(icon):
return icon.y
#findAll() on your two identical icons and make them into a list
bothIcons = list([x for x in findAll(icon)])
#then sort them
sortedIcons = sorted(bothIcons, key=byY)
iconOnTop = sortedIcons[0]
iconOnBottom = sortedIcons[1]
#then click on the one you want
click(iconOnTop) #or save a line and say: click(sortedIcons[0])
如果您知道感兴趣的图标总是在其双胞胎的左侧或右侧,则可以这样做:
def byX(yourTwoImages):
return image.x
bothIcons = list([x for x in findAll(icon)])
sortedIcons = sorted(bothIcons, key=byX)
click(sortedIcons[0]) #for the image on the left
如果两个图标在屏幕上非常接近,或者图标的位置可能会发生变化,我比使用区域更喜欢这个。
答案 2 :(得分:0)
你可以放大按钮图像,这样图像将不仅仅包含图像,还包括它周围的背景(如果你可以确定背景没有改变)但请记住sikuli点击中心图像,所以确保按钮位于中心。
另一个选项是点击使用偏移量(http://doc.sikuli.org/tutorials/checkone/checkone.html) 使用这样的东西:
this.offset = 15;
org.sikuli.script.Region reg = screen.find(“image”)。left(this.offset);
screen.click(REG);