Sikuli Проверьте несколько одинаковых изображений на экране
Я могу проверить, существует ли изображение с существует ()
Но я хочу знать, могу ли я проверить, появляется ли одно и то же изображение более одного раза на экране, например:
если мяч существует один раз, нажмите кнопку...
если на экране дважды появляется шарик, нажмите другую кнопку... есть идеи?
5 ответов
Вы можете использовать метод findAll из класса Sikuli Region. Пример кода будет выглядеть так:
def returnImageCount(image):
count = 0
for i in findAll(image):
count += 1
return count
imageCount = returnImageCount(image)
if imageCount == 1:
click(buttonX.image)
elif imageCount == 2:
click(buttonY.image)
else:
pass
Вы можете также использовать понимание списка Python, чтобы сделать это:
imageCount = len(list([x for x in findAll(image)]))
#the rest is like @Eugene's answer
if imageCount == 1:
click(buttonA)
elif imageCount == 2:
click(buttonB)
else:
pass
Чтобы проверить все вхождения изображения на экране, используйте приведенный ниже дополнительный щелчок, чтобы получить подтверждение точного местоположения изображения.
код:
Screen s = new Screen();
Iterator<Match> it = s.findAll(Imagepath);
while(it.hasNext()){
System.out.println("the match is "+it.next().click());
}
Или вы можете найти длину итератора.
Используйте метод findall объекта Region. Это дает вам список всех подходящих изображений / шаблонов. Документация Sikuli содержит подробные сведения об использовании. См. Здесь http://doc.sikuli.org/region.html
Если вы хотите посчитать номер определенного изображения в окне, вы можете использовать:
Image1 = ("Image1.png")
ImagesFound = list(findAll(Image1))
numberFound = len(ImagesFound)
print(numberFound)
И если вы хотите посчитать номер определенного изображения в самом переднем окне, например, во всплывающем окне.
Вы можете использовать:
Image1 = ("Image1.png")
appWindow = App.focusedWindow()
ImagesFound = list(appWindow.findAll(Image1))
numberFound = len(ImagesFound)
print(numberFound)