Forum Discussion

asu's avatar
New Contributor
15 years ago

Unable to find DotNetBar control

We are using DotNetbar controls from here: 

Our application is using ribbon controls from the package.

The ribbon controls have the next hieararchy





        --Buttons and other simple controls

My problem is that TestComplete doesn't see ItemContainer control and anything below it. The buttons on it are not searchable by Find\FindChildren methods.

Controls.Count property of RibbonBar always returns 0.

Is there a workaround to this issue?

6 Replies

  • Hi Olexandr,

    We've reproduced the behavior here and currently we are investigating the issue.

    As a workaround, you can try setting the Depth parameter of the Find (FindChild) method to 1. This approach works fine on our side. Please see the Find Method article for details.

    If the suggestion does not help, please zip the entire project suite folder along with the test execution logs and send us the archive.

    Also, you can vote for the control in this survey.
  • asu's avatar
    New Contributor
    Hi David,

    Thank you for your reply.

    What property(ies) and value(s) did you use to find ItemContainer using Find method?


  • Hi,

    Actually, we did not find a way to find the ItemContainer object. It is not displayed in the OB and cannot be located from script. However, we succeeded to find the buttons in the container. We used the Text property to locate the buttons.

    Please note that for our sample application, the child objects of the target ItemContainer control are displayed in the OB. If the behavior is different on your side, please send us a sample application demonstrating the issue. Also, please send us your project. You can get in touch with us via the Contact Support web form.
  • asu's avatar
    New Contributor
    Please find a sample application in attachment.

    Here is the script I tried to find the button and it didn't work for me:

    Dim PropArray, ValuesArray

    Dim RibbonBar

    Set RibbonBar= Sys.Process("SampleDNB").WinFormsObject("Form1").WinFormsObject("MainRibbon").WinFormsObject("OrganizationRibbonPanel").WinFormsObject("OrganizationCreateBar")

    Dim Button

    PropArray = Array("Text")

    ValuesArray = Array("Test1")

    Set Button=RibbonBar.Find(PropArray,ValuesArray,1)

    Log.Message Button.Exists

  • Hi Olexandr,

    Thank you for the sample.

    I suggest that you work with the target controls via their native properties and methods. The following script demonstrates how to click the Test1 button:

    Sub Main

      Dim p, wMain, wRibbonBar, strItem

      Set p = Sys.Process("SampleDNB")

      Set wMain = p.WinFormsObject("Form1")


      Set wRibbonBar = wMain.WinFormsObject("MainRibbon").WinFormsObject("OrganizationRibbonPanel").WinFormsObject("OrganizationCreateBar")

      strItem = "Test1"

      If clickItem(wRibbonBar, strItem) Then

        Log.Message "The '" & strItem & "' item was successfully clicked."


        Log.Error "The '" & strItem & "' item was not found."

      End If

    End Sub

    Function clickItem(wRibbonBar, strItem)

      Dim oCont, itemCount, itemId, itemObj, bounds,  mainBounds


      clickItem = False

      Set oCont = wRibbonBar.Items.Item(0)' Looks like It is the Container object

      itemCount = oCont.SubItems.Count

      For itemId = 0 To itemCount - 1

        Set itemObj = oCont.SubItems.Item(itemId)

        If SameText(itemObj.Text, strItem) Then

          Set bounds = itemObj.AccessibleObject.Bounds

          Set mainBounds = wRibbonBar.AccessibilityObject.Bounds


          Call wRibbonBar.Click(bounds.Left - mainBounds.Left + bounds.Width / 2, bounds.Top - mainBounds.Top + bounds.Height / 2)


          Log.Event "The '" & strItem & "' item was clicked."

          clickItem = True

          Exit Function  

        End If     


    End Function

    Also, you can use MSAA to address the target buttons. To do this, you need to add the WindowsForms* window class to the list of accepted MSAA windows (right-click your project in Project Explorer | Edit | Properties | Open Applications | MSAA). See the Testing With Microsoft Active Accessibility article for information.

    I hope this helps.

  • asu's avatar
    New Contributor
    Thank you Allen!

    The suggested approach works perfectly.