0

I am trying to verify the content of a large list using Robotium, and for some reason once the program gets to the bottom of the visible list, Robotium will start to scroll, and keep scrolling until it gets to the bottom of the list. Is there anything I can do to keep this from happening? Ideally, the program will verify the visible content, scroll enough to display a section of unverified content, then once that has been verified, scroll to the bottom, ultimately allowing the test app to verify all the content in the list.

Here is the code I'm using:

public void testCatalogLinkContent(){
        //VERIFY USER IS ON HOMEPAGE
        try {
            solo.sleep(3000);
            assertTrue(solo.searchText(" Apps")) ;
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();

        }
        //CLICK ON CATALOG      
        try{
            solo.clickOnText(" Apps");
                }catch(Exception e){
                    e.printStackTrace();
                }
        //Search for Music in menu
        if(solo.searchText(RECOMMENDED)==false){
            Log.e(TAG, RECOMMENDED + " Not found!!!"); 

        }else{
            Log.i(TAG, RECOMMENDED + " Found"); 
        }

        //Search for UAT  in menu
        if(solo.searchText(UAT)==false){
            Log.e(TAG,  UAT + " Not found!!!"); 

        }else{
            Log.i(TAG, UAT  + " Found"); 
        }

        //Search for  NEW APPS in menu
        if(solo.searchText(NEW)==false){
            Log.e(TAG, NEW  + " Not found!!!"); 

        }else{
            Log.i(TAG, NEW + " Found"); 
        }

        //Search for TOP SELLERS in menu
        if(solo.searchText(TOPSELLER)==false){
            Log.e(TAG, TOPSELLER + " Not found!!!"); 

        }else{
            Log.i(TAG, TOPSELLER + " Found"); 
        }

        if(solo.searchText(TOPDOWNLOAD)==false){
            Log.e(TAG, TOPDOWNLOAD  + " Not found!!!"); 

        }else{
            Log.i(TAG, TOPDOWNLOAD  + " Found"); 
        }

        //Search for EA in menu
        if(solo.searchText(EA)==false){
            Log.e(TAG, EA  + " Not found!!!"); 

        }else{
            Log.i(TAG, EA  + " Found"); 
        }

        //Search for FEATURED in menu
        if(solo.searchText(FEATURED)==false){
            Log.e(TAG, FEATURED + " Not found!!!"); 

        }else{
            Log.i(TAG, FEATURED + " Found"); 
        }
        //Search for GAMES in menu
        if(solo.searchText(GAMES)==false){
            Log.e(TAG, GAMES + " Not found!!!"); 

        }else{
            Log.i(TAG, GAMES + " Found"); 
        }
        //Search for  APPS in menu
        if(solo.searchText(APPS)==false){
            Log.e(TAG, APPS + " Not found!!!"); 

        }else{
            Log.i(TAG, APPS  + " Found"); 
        }
        //Search for SOCIAL  in menu
        if(solo.searchText(SOCIAL)==false){
            Log.e(TAG, SOCIAL + " Not found!!!"); 

        }else{
            Log.i(TAG, SOCIAL  + " Found"); 
        }
        //Search for ENTERTAINMENT in menu
        if(solo.searchText(ENTERTAINMENT)==false){
            Log.e(TAG, ENTERTAINMENT + " Not found!!!"); 

        }else{
            Log.i(TAG,ENTERTAINMENT  + " Found"); 
        }
        //Search for THEMES  in menu
        if(solo.searchText(THEMES)==false){
            Log.e(TAG, THEMES  + " Not found!!!"); 

        }else{
            Log.i(TAG, THEMES  + " Found"); 
        }
        //Search for TOOLS  in menu
        if(solo.searchText(TOOLS)==false){
            Log.e(TAG, TOOLS + " Not found!!!"); 

        }else{
            Log.i(TAG, TOOLS  + " Found"); 
        }
        //Search for  NEWSin menu
        if(solo.searchText(NEWS)==false){
            Log.e(TAG, NEWS  + " Not found!!!"); 

        }else{
            Log.i(TAG, NEWS + " Found"); 
        }
        //Search for READING in menu
        if(solo.searchText(READING)==false){
            Log.e(TAG, READING + " Not found!!!"); 

        }else{
            Log.i(TAG, READING + " Found"); 
        }
        //Search for MONEY in menu
        if(solo.searchText(MONEY)==false){
            Log.e(TAG, MONEY + " Not found!!!"); 

        }else{
            Log.i(TAG, MONEY + " Found"); 
        }
        //Search for SHOPPING in menu
        if(solo.searchText(SHOPPING)==false){
            Log.e(TAG, SHOPPING  + " Not found!!!"); 

        }else{
            Log.i(TAG, SHOPPING  + " Found"); 
        }
        //Search for FITNESS in menu
        if(solo.searchText(FITNESS)==false){
            Log.e(TAG, FITNESS + " Not found!!!"); 

        }else{
            Log.i(TAG, FITNESS  + " Found"); 
        }
        //Search for TRAVEL  in menu
        if(solo.searchText(TRAVEL)==false){
            Log.e(TAG,TRAVEL + " Not found!!!"); 

        }else{
            Log.i(TAG, TRAVEL  + " Found"); 
        }
        //Search for BUSINESS  in menu
        if(solo.searchText(BUSINESS)==false){
            Log.e(TAG, BUSINESS + " Not found!!!"); 

        }else{
            Log.i(TAG, BUSINESS  + " Found"); 
        }
        //Search for SPANISH in menu
        if(solo.searchText(SPANISH)==false){
            Log.e(TAG, SPANISH + " Not found!!!"); 

        }else{
            Log.i(TAG, SPANISH + " Found"); 
        }
    }
BlackHatSamurai
  • 23,275
  • 22
  • 95
  • 156

3 Answers3

0

The way Robotium works is by "scanning" the layout, so when you instruct it tosolo.searchText() it will look for whatever you specified and if it doesn't find it in the current visible area, it will scroll your views until it finds it (or it gives up). My guess is that it's not finding the text " Apps" because your text is really "Apps", and since it can't find it, you get the behavior you specified, "infinite scrolling".

dmon
  • 30,048
  • 8
  • 87
  • 96
  • No, it finds apps. Where it stops finding things is after games. I have the items listed from top to bottom. So if it were just a matter of searching till it found it, it would scroll nicely. But it doesn't. Once it doesn't find one, it seems to scroll all the way to the bottom. – BlackHatSamurai Jun 19 '12 at 21:14
  • So, I'm confused, it's behaving as designed? That is, it's not finding something and it keeps searching. Are you trying to assert that it's *NOT* there? – dmon Jun 19 '12 at 22:01
  • What I am saying is that all the items I am searching for are there. But when I run the program, Robotium scrolls all the way to the bottom once it doesn't see the text. This causes a third of the test to fail because the items being searched for aren't on the screen, but are in fact there. – BlackHatSamurai Jun 19 '12 at 22:43
  • 1
    Sounds like you need to scroll up before looking for the text: `protected void scrollToTop() { while (solo.scrollUp()); }` – dmon Jun 19 '12 at 22:50
  • Yeah, that's what I ended up doing. Thanks for your help. – BlackHatSamurai Jun 20 '12 at 00:22
0

So to fix this problem, here is what I had to do:

public void testCatalogLinkContent(){
        //VERIFY USER IS ON HOMEPAGE
        try {
            solo.sleep(3000);
            assertTrue(solo.searchText("Apps")) ;
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();

        }
        //CLICK ON CATALOG      
        try{
            solo.clickOnText("Apps");
                }catch(Exception e){
                    e.printStackTrace();
                }
        //Search for Music in menu
        if(solo.searchText(RECOMMENDED)==false){
            Log.e(TAG, RECOMMENDED + " Not found!!!"); 

        }else{
            Log.i(TAG, RECOMMENDED + " Found"); 
        }

        //Search for UAT  in menu
        if(solo.searchText(UAT)==false){
            Log.e(TAG,  UAT + " Not found!!!"); 

        }else{
            Log.i(TAG, UAT  + " Found"); 
        }

        //Search for  NEW APPS in menu
        if(solo.searchText(NEW)==false){
            Log.e(TAG, NEW  + " Not found!!!"); 

        }else{
            Log.i(TAG, NEW + " Found"); 
        }

        //Search for TOP SELLERS in menu
        if(solo.searchText(TOPSELLER)==false){
            Log.e(TAG, TOPSELLER + " Not found!!!"); 

        }else{
            Log.i(TAG, TOPSELLER + " Found"); 
        }
        //Search for top downloaded
        if(solo.searchText(TOPDOWNLOAD)==false){
            Log.e(TAG, TOPDOWNLOAD  + " Not found!!!"); 

        }else{
            Log.i(TAG, TOPDOWNLOAD  + " Found"); 
        }

        //Search for EA in menu
        if(solo.searchText(EA)==false){
            Log.e(TAG, EA  + " Not found!!!"); 

        }else{
            Log.i(TAG, EA  + " Found"); 
        }
        solo.scrollUp();
        //Search for FEATURED in menu
        if(solo.searchText(FEATURED)==false){
            Log.e(TAG, FEATURED + " Not found!!!"); 

        }else{
            Log.i(TAG, FEATURED + " Found"); 
        }
        solo.scrollUp();
        //Search for GAMES in menu
        if(solo.searchText(GAMES)==false){
            Log.e(TAG, GAMES + " Not found!!!"); 

        }else{
            Log.i(TAG, GAMES + " Found"); 
        }
        solo.scrollUp();
        //Search for APPS in menu
        if(solo.searchText(APPS)==false){
            Log.e(TAG, APPS + " Not found!!!"); 

        }else{
            Log.i(TAG, APPS  + " Found"); 
        }
        solo.scrollUp();
        //Search for SOCIAL  in menu
        if(solo.searchText(SOCIAL)==false){
            Log.e(TAG, SOCIAL + " Not found!!!"); 

        }else{
            Log.i(TAG, SOCIAL  + " Found"); 
        }
        solo.scrollUp();
        //Search for ENTERTAINMENT in menu
        if(solo.searchText(ENTERTAINMENT)==false){
            Log.e(TAG, ENTERTAINMENT + " Not found!!!"); 

        }else{
            Log.i(TAG,ENTERTAINMENT  + " Found"); 
        }
        solo.scrollUp();
        //Search for MUSIC  in menu
                if(solo.searchText(MUSIC)==false){
                    Log.e(TAG, MUSIC  + " Not found!!!"); 

                }else{
                    Log.i(TAG, MUSIC  + " Found"); 
                }
                solo.scrollUp();
        //Search for THEMES  in menu
        if(solo.searchText(THEMES)==false){
            Log.e(TAG, THEMES  + " Not found!!!"); 

        }else{
            Log.i(TAG, THEMES  + " Found"); 
        }
        solo.scrollUp();
        //Search for TOOLS  in menu
        if(solo.searchText(TOOLS)==false){
            Log.e(TAG, TOOLS + " Not found!!!"); 

        }else{
            Log.i(TAG, TOOLS  + " Found"); 
        }
        solo.scrollUp();
        //Search for  NEWSin menu
        if(solo.searchText(NEWS)==false){
            Log.e(TAG, NEWS  + " Not found!!!"); 

        }else{
            Log.i(TAG, NEWS + " Found"); 
        }
        solo.scrollUp();
        //Search for SPORTS  in menu
                if(solo.searchText(SPORTS)==false){
                    Log.e(TAG, SPORTS  + " Not found!!!"); 

                }else{
                    Log.i(TAG, SPORTS  + " Found"); 
                }
                solo.scrollUp();
        //Search for READING in menu
        if(solo.searchText(READING)==false){
            Log.e(TAG, READING + " Not found!!!"); 

        }else{
            Log.i(TAG, READING + " Found"); 
        }
        solo.scrollUp();
        //Search for MONEY in menu
        if(solo.searchText(MONEY)==false){
            Log.e(TAG, MONEY + " Not found!!!"); 

        }else{
            Log.i(TAG, MONEY + " Found"); 
        }
        //Search for SHOPPING in menu
        if(solo.searchText(SHOPPING)==false){
            Log.e(TAG, SHOPPING  + " Not found!!!"); 

        }else{
            Log.i(TAG, SHOPPING  + " Found"); 
        }
        //Search for FITNESS in menu
        if(solo.searchText(FITNESS)==false){
            Log.e(TAG, FITNESS + " Not found!!!"); 

        }else{
            Log.i(TAG, FITNESS  + " Found"); 
        }
        //Search for TRAVEL  in menu
        if(solo.searchText(TRAVEL)==false){
            Log.e(TAG,TRAVEL + " Not found!!!"); 

        }else{
            Log.i(TAG, TRAVEL  + " Found"); 
        }
        //Search for BUSINESS  in menu
        if(solo.searchText(BUSINESS)==false){
            Log.e(TAG, BUSINESS + " Not found!!!"); 

        }else{
            Log.i(TAG, BUSINESS  + " Found"); 
        }
        //Search for SPANISH in menu
        if(solo.searchText(SPANISH)==false){
            Log.e(TAG, SPANISH + " Not found!!!"); 

        }else{
            Log.i(TAG, SPANISH + " Found"); 
        }
    }

Before (and after) each search, I inserted solo.scrollUp();

This isn't the prettiest way, or most efficient way to accomplish this, but it works now.

Thank you all for your help.

BlackHatSamurai
  • 23,275
  • 22
  • 95
  • 156
  • There is a parameter in searchText to stop it from scrolling. See the javadoc for more information. – Renas Mar 30 '15 at 22:04
0

I came across similiar issue. Seems that robotium scrolls down automatically when searching text but also views. Say in method A it searches some views with resource IDs, and then scroll down to bottom to find all those views, if scroll up or scroll to top in method B, it doesn't work; if scroll up or scroll to top in method A only, it works though. Quite weird stuff.

leon
  • 21
  • 3