Forum Discussion

TestCytel's avatar
TestCytel
New Contributor
8 years ago

Desktop: How to Click on a button after finding it using image comparision

I have found whether a button exists or not using 'FindRegion'.

Now how do I click this button ?

 

Below is the VB script I have used for checking if the button exists or not;

 

Set Button = Regions.GetPicture("output_preview")
Set currentWindow = Sys.Desktop.ActiveWindow.Picture(0, 0, -1, -1)

 

If  Regions.FindRegion(Button ,currentWindow ) Is Nothing Then
     Log.Warning "Not found"
Else
     Log.Warning"Found"
End If

 

Please Help.!

 

6 Replies

  • AlexKaras's avatar
    AlexKaras
    Champion Level 3

    Hi,

     

    While Robert's reply is the recommended way to go if for some reason you *really* need to use image search, note that as per https://support.smartbear.com/testcomplete/docs/reference/project-objects/items/stores/regions/findregion.html, .FindRegion() returns found rectangle if the search succeeds.

    So your code should be like this:

    Set Button = Regions.GetPicture("output_preview")
    Set currentWindow = Sys.Desktop.ActiveWindow.Picture(0, 0, -1, -1)
    
    Set oSearchResult = Regions.FindRegion(Button ,currentWindow )
    If  oSearchResult Is Nothing Then
         Log.Warning "Not found"
    Else
        ' Do a .Click() here using coordinates calculated using currentWindow and oSearchResult objects
    End If

     

    • TestCytel's avatar
      TestCytel
      New Contributor

      Thanks Alex,

       

      But how do i calculate the coordinates using currentWindow and oSearchResult objects ?

      Can you help me out here. 

       

      Ant the reason I'm using image recognition to click on this button is because 'Object Spy' is unable to identify this button. I don't get a red rectangle over this button( also some other buttons which are on the status bar of my desktop application).

      I don't want to use coordinates to click on the button, which is why I chose to do it using image recognition.

      Please let me know if I can go ahead with Roberts suggestion in this case.

       

      I have attached the screenshot of the status bar having the red rectangle of 'Object Spy'.

       

      Thanks in advance.

       

      • HKosova's avatar
        HKosova
        SmartBear Alumni (Retired)

        TestCytel wrote:

         

        ... 'Object Spy' is unable to identify this button. I don't get a red rectangle over this button( also some other buttons which are on the status bar of my desktop application).


        Try enabling MSAA or Text Recognition for the object whose elements you want to identify:

         

        • In the Object Spy, find the WndClass of the object marked by the red frame in your image.
        • Add this value to the list in the project properties > Open Applications > MSAA and select the check box next to it. Save the project.
        • Try spying on the button again.
        • If this did not help, add the WndClass value to the project properties > Open Applications > Text Recognition and try again.
  • tristaanogre's avatar
    tristaanogre
    Esteemed Contributor

    While the image comparison obviously works for detecting if something shows up... that's not exactly the way I'd go about doing it.  However, I'm assuming you have a reason for using a Regions.Find to find a button rather than checking for the existance of the object in your application using something like WaitChild or WaitAliasChild or FindChild or something.

     

    Is there a reason why you aren't using those methods?  Basically, FindRegion simply returns another image so you're not actually finding the button, you're just searching one picture for another picture.  In order to actually interact with the button, I'd suggest using FindChild.  What you could do, then, is use FindChild to search for the object and then, if it's find, click on it and if it's not found, log the error.