if exists IMG click IMG gives FindFailed error

Asked by shatterah

Hello,

I want to start by thanking those who help with my issue. I am very n00b to sikuli and love the potential of this IDE. I have a snippy go code which runs at one point to accomplish the following:

1) see if an image exists within a region
2) if it exists to click on the image
3) wait .3 seconds

here is my code:

if legregion.exists(Pattern("1397090049278.png").similar(0.47)):
        legregion.click(Pattern("1397090049278.png").similar(0.47))
        wait (.3)

Now the odd thing is it runs fine and produces no problems in situations when the image is present on the screen and when the image is not present on the screen in the first several loops of the entire script. But once it gets to ~10 loops, it produces the following error:

[error] script [ test ] stopped with error in line 117
[error] FindFailed ( can not find P(1397096048453.png) S: 0.91 on the screen. )

There are several parts of this problem that is puzzling, first why this can run several times (in situations where the image it's looking for is present and not present) for several loops and why does it product a FindFailed error when I am using "exists" instead of "find"?

Thank you for your help. In attempt to try to google a solution, I did find the following link, but could not decipher a solution from it: http://testautomationnoob.blogspot.com/2013/04/sikuli-script-troubleshooting-problems.html. Maybe it will help others.

Question information

Language:
English Edit question
Status:
Answered
For:
SikuliX Edit question
Assignee:
No assignee Edit question
Last query:
Last reply:
Revision history for this message
shatterah (shatterah) said :
#1

I think I posted this incorrectly under "Bugs" and I apologize for my mistake.

Revision history for this message
shatterah (shatterah) said :
#2

Based on the following post (https://answers.launchpad.net/sikuli/+faq/1501) I have changed my code to the following:

    if legregion.exists(Pattern("1397186630070.png").similar(0.47), 0):
        click(getLastMatch())
        wait (.2)

However, I am noticing that when there is a match the "click(getLastMatch())" does not click on the Pattern but the location of the last "wait (IMG, forever)" location? Still trying to figure out why that is the case.

Revision history for this message
RaiMan (raimund-hocke) said :
#3

Using a min similarity of below 0.7 is very risky. already the standard value of 0.7 together with "bad" images might lead to false positives (Sikuli finds something, that you do not want)

The mentioned post in your question text (BTW: good finding) talks about these problems.

So in the first step, take care, that your images contain as little background as possible and concentrate on the key visual aspects.

A "good" image should always be found with a similarity score greater than 0.9 (even better > 0.95).

Your problem with getLastMatch():
It is Region specific, so supposing you want to click what was found in leg region:

    if legregion.exists(Pattern("1397186630070.png").similar(0.47), 0):
        click(legregion.getLastMatch())
        wait (.2)

Can you help with this problem?

Provide an answer of your own, or ask shatterah for more information if necessary.

To post a message you must log in.