Button Sikuli混淆了两个相同的按钮

Button Sikuli混淆了两个相同的按钮,button,click,sikuli,Button,Click,Sikuli,我在同一页上有相同的按钮,我希望Sikuli只单击其中一个按钮,但它最终会单击另一个按钮。不幸的是,按钮名称无法更改。对我如何处理这种情况有什么建议吗 谢谢 您可以告诉Sikuli操作屏幕上相对于给定图像/屏幕快照对象的特定区域。这称为TargetOffset。假设您询问如何以编程方式使用sikuli,请参阅。在Sikuli IDE中,双击屏幕截图图像,它会弹出一个窗口,您可以在其中设置精度和目标偏移。如果两个图标靠得很近,并且始终以相同的方式显示,并且它们之间的间距始终显示相同,则 click

我在同一页上有相同的按钮,我希望Sikuli只单击其中一个按钮,但它最终会单击另一个按钮。不幸的是,按钮名称无法更改。对我如何处理这种情况有什么建议吗


谢谢

您可以告诉Sikuli操作屏幕上相对于给定图像/屏幕快照对象的特定区域。这称为TargetOffset。假设您询问如何以编程方式使用sikuli,请参阅。在Sikuli IDE中,双击屏幕截图图像,它会弹出一个窗口,您可以在其中设置精度和目标偏移。

如果两个图标靠得很近,并且始终以相同的方式显示,并且它们之间的间距始终显示相同,则

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

如果两个图标在屏幕上靠得很近,或者图标的位置可能会发生变化,我更喜欢使用区域。您可以放大按钮图像,这样图像不仅包括图像,还包括周围的背景(如果您可以确保背景没有改变)但请记住,sikuli单击图像的中心,因此请确保按钮位于中心

另一个选项是单击“使用偏移”(http://doc.sikuli.org/tutorials/checkone/checkone.html) 使用类似以下内容:

此偏移量=15;
org.sikuli.script.Region reg=screen.find(“image”).left(this.offset);
屏幕。点击(注册)