Forum Discussion

underqualified's avatar
underqualified
Occasional Contributor
5 years ago

Iterating through items

Hey everybody, me again

 

This time, my issue is that I have to iterate through a series of objects.

The objects have objectID '0', '1', '2', and so on, but the amount of objects is not fixed.

 

What I tried is creating a Project Variable, and go for

      while(Aliases.browser.pageCockpit.frameUserMenu.panelIterative.Exists)
      {
        Aliases.browser.pageCockpit.frameUserMenu.panelIterative.Click(15, 20);
        Project.Variables.panelIterativeIdentifier++;
      }

And set the ObjectID identifier in namemapping to panelIterativeIdentifier as well.

It just doesn't work, it keeps going for the object with the ObjectID of 0. What am I doing wrong?

  • AlexKaras's avatar
    AlexKaras
    Champion Level 3

    Hi,

     

    What if you search for all those objects via the .FindAllChildren() method and then iterate through the returned array?

     

    • underqualified's avatar
      underqualified
      Occasional Contributor

      Hello Alex,

      thank you for your reply.

      I've tried working with .FindAllChildren(), but due to the way the site is set up, this is causing major issues, detecting objects that I do not want to iterate through as children.

       

      The possible solution I've described in my OP is the only way I could see this working, but it simply doesn't work.

  • Let's see the Advanced version of Object Spy results of the panel with all those objects in it please.

  • Wamboo's avatar
    Wamboo
    Community Hero

    Hello,

     

    These are my ideas for solving your problem:

     

    1) Try using regexp using the .find() methods, with this method you can only get the items you want inside the table, or maybe an object

     

    Doc: https://support.smartbear.com/testcomplete/docs/reference/misc/regular-expressions.html

     

    2) Write your own JavaScript code to select the item you want to have inside the data object. Run this script with TestComplete.

     

    Doc: https://support.smartbear.com/testcomplete/docs/app-testing/web/general/common-tasks/javascript.html

     

    3) it's better to use "do while" instead of "while" in your situation.

     

    4) Download all posts from findxxx() -> debug object -> use e.g. javascript .filter() on it and filter the items you only want to have.

     

    Sample function:

    var filteredData= findElements.filter(function(val) {
            return dataObj.indexOf(val) == -1
    });

     

    • sonya_m's avatar
      sonya_m
      SmartBear Alumni (Retired)

      Thank you Community for a lot of great suggestions on that. 

      Hi underqualified , were you able to find a solution? Perhaps, some of the suggested approaches worked for you. 

      • underqualified's avatar
        underqualified
        Occasional Contributor

        I'm not sure yet,

        I'll be attempting the suggested solutions and then mark whatever ended up working as the answer!