Forum Discussion

sergi's avatar
sergi
Contributor
10 years ago

Test Complete takes too long to find an object

Hi,

There's something it's bothering me and it's making my tests run slower than I'd like to.

 

I'm having (performance) problems finding an object in the screen.

 

The application under test (as any other) shows MessageBoxes to confirm/ask for user interaction. To find such view I use the following code:

 

 

var base = Sys.Process("MyProcessName");
base.FindChild("ClrClassName", "MessageBoxView", 3);

 

 

There's nothing wrong with it and it works just fine. There's only one quirk. It takes almost 2seconds to be able to find the view.

BUT, during my investigation I found out that the second time Test Complete tries to find the view, it takes only about 50ms.

That second-time behaviour doesn't benefit my tests at all, because that view is always destroyed (dismissed upon user interaction) and it's always "the first time" when Test Complete needs to find another MessageBox.

 

Why is that happening? Why is it taking soooo long the first time?

Is there a way to fix this behaviour? It doesn't take that long to find any other view within the main window of the application.

  • Could there be other calculations or objects loading in the background before that particular message box appears?   

    If you are using that same bit of code for all the message boxes, then I would suspect that there's something different about that particular box.

    • sergi's avatar
      sergi
      Contributor

      No, there's no background work ongoing.

      If I do the following, the second time I try to find that view it's immediate.

      No matter if the MessageBox is already being displayed when I execute my code or I do something to make the MessageBox be displayed, it takes almost 2 seconds to find it.

       

      var base = Sys.Process("MyProcessName");
      
      // This takes ~1900ms
      base.FindChild("ClrClassName", "MessageBoxView", 3);
      
      // This takes ~50ms
      base.FindChild("ClrClassName", "MessageBoxView", 3);

       

       

       

      • Marsha_R's avatar
        Marsha_R
        Moderator

        It makes sense that the second one would be faster because whatever is holding up the object isn't a problem any more by the time the first one executes.

         

        Try putting a Delay=2000 right before the first one and see what happens.

  • NisHera's avatar
    NisHera
    Valued Contributor

    Which vertion of TC you are working with and what application you are testing?