Any fix on UiScrollable scroll method, I think all scroll methods are not 
reliable. 

On Thursday, February 26, 2015 at 2:27:05 AM UTC+8, Benton Lam wrote:
>
> Any updates on this issue? anyone know if it's resolved?
>
> On Wednesday, December 4, 2013 at 5:23:47 PM UTC-5, Aaron wrote:
>>
>> I believe I've found the bug.
>>
>> If you look at 
>> https://android.googlesource.com/platform/frameworks/testing/+/jb-mr0-release%5E1/uiautomator/library/src/com/android/uiautomator/core/UiScrollable.java
>>  
>> you'll get this public boolean scrollIntoView(UiSelector selector) method.
>>
>> That method calls has the code:
>>
>>   if(!scrollForward()) {
>>      return false;
>>   }
>>
>> And if you put debugging statements into that, you'll see it fails to scroll 
>> forwards the first time. Simply changing the if statement to the below works.
>>
>>   if(!scrollForward() && x!=0) {
>>
>> Obviously this is rather a nasty hack, and I'm unsure why it's needed.
>>
>>
>> In more detail, I have these print statements in my overridden methods. 
>> Note I'm simply commenting out the return statement in the if statement 
>> above to show it failing.
>>
>>     @Override
>>     public boolean scrollIntoView(UiSelector selector) throws 
>> UiObjectNotFoundException {
>>         // if we happen to be on top of the text we want then return here
>>         System.out.println("My max search swipes are: ");
>>         System.out.println(getMaxSearchSwipes());
>>         if (exists(getSelector().childSelector(selector))) {
>>             return (true);
>>         } else {
>>             System.out.println("It doesn't exist on this page");
>>             // we will need to reset the search from the beginning to 
>> start search
>>             scrollToBeginning(getMaxSearchSwipes());
>>             System.out.println("I appear to have swiped to the 
>> beginning.");
>>             if (exists(getSelector().childSelector(selector))) {
>>                 return (true);
>>             }
>>             for (int x = 0; x < getMaxSearchSwipes(); x++) {
>>                 System.out.println("I'm going forward a page: " + x);
>>                 if(!scrollForward()) {
>>                     System.out.println("Couldn't scroll forwards?");
>>                     //return false;
>>                 }
>>
>>                 if(exists(getSelector().childSelector(selector))) {
>>                     return true;
>>                 }
>>             }
>>         }
>>         return false;
>>     }    
>>     
>>     @Override
>>     public boolean scrollForward(int steps) throws 
>> UiObjectNotFoundException {
>>         System.out.println("I'm scrolling forwards by these steps: " + 
>> steps);
>>         return super.scrollForward(steps);
>>     }
>>
>> And if I start search for an app (that doesn't exist) in the Apps method 
>> I get this output. Notice the Couldn't scroll forwards? at the end are 
>> normal, since I'm trying to scroll to a page that doesn't exist. However, 
>> the first 'Couldn't scroll forwards?' is incorrect -- it's on the first 
>> page and therefore should be able to scroll forwards. (in fact, from 
>> observations it does indeed seem to be scrolling the page)
>>
>> My max search swipes are:
>> 20
>> It doesn't exist on this page
>> I appear to have swiped to the beginning.
>> I'm going forward a page: 0
>> I'm scrolling forwards by these steps: 55
>> Couldn't scroll forwards?
>> I'm going forward a page: 1
>> I'm scrolling forwards by these steps: 55
>> I'm going forward a page: 2
>> I'm scrolling forwards by these steps: 55
>> I'm going forward a page: 3
>> I'm scrolling forwards by these steps: 55
>> I'm going forward a page: 4
>> I'm scrolling forwards by these steps: 55
>> I'm going forward a page: 5
>> I'm scrolling forwards by these steps: 55
>> I'm going forward a page: 6
>> I'm scrolling forwards by these steps: 55
>> I'm going forward a page: 7
>> I'm scrolling forwards by these steps: 55
>> I'm going forward a page: 8
>> I'm scrolling forwards by these steps: 55
>> I'm going forward a page: 9
>> I'm scrolling forwards by these steps: 55
>> I'm going forward a page: 10
>> I'm scrolling forwards by these steps: 55
>> I'm going forward a page: 11
>> I'm scrolling forwards by these steps: 55
>> I'm going forward a page: 12
>> I'm scrolling forwards by these steps: 55
>> Couldn't scroll forwards?
>> I'm going forward a page: 13
>> I'm scrolling forwards by these steps: 55
>> Couldn't scroll forwards?
>> I'm going forward a page: 14
>> I'm scrolling forwards by these steps: 55
>> Couldn't scroll forwards?
>> I'm going forward a page: 15
>> I'm scrolling forwards by these steps: 55
>> Couldn't scroll forwards?
>> I'm going forward a page: 16
>> I'm scrolling forwards by these steps: 55
>> Couldn't scroll forwards?
>> I'm going forward a page: 17
>> I'm scrolling forwards by these steps: 55
>> Couldn't scroll forwards?
>> I'm going forward a page: 18
>> I'm scrolling forwards by these steps: 55
>> Couldn't scroll forwards?
>> I'm going forward a page: 19
>> I'm scrolling forwards by these steps: 55
>> Couldn't scroll forwards?
>>
>> It appears the  public boolean scrollForward(int steps) methods is 
>> erroneously saying it can't scroll forwards on the first attempt, whereas I 
>> believe it is doing from my observations.
>>
>> Here's the source to my example program:
>>
>>         getUiDevice().pressHome();
>>         
>>         UiObject allAppsButton = new UiObject(new 
>> UiSelector().description("Apps"));
>>         allAppsButton.clickAndWaitForNewWindow();
>>         
>>         UiObject appsTab = new UiObject(new UiSelector().text("Apps"));
>>         appsTab.click();
>>         
>>         UiScrollable appsView = new UiScrollable(new 
>> UiSelector().scrollable(true));
>>         appsView.setMaxSearchSwipes(20);
>>         appsView.setAsHorizontalList();
>>         UiObject settingsApp = appsView.getChildByText(
>>                 new 
>> UiSelector().className(android.widget.TextView.class.getName()), 
>>                 "xxSettings",  // Intentionally failing here for the 
>> above demonstration.
>>                 true);
>>         settingsApp.clickAndWaitForNewWindow();
>>
>>  
>> On Wednesday, 4 December 2013 21:22:37 UTC, Aaron wrote:
>>>
>>> I've tested this on api 19 on KitKat using a Nexus 4.
>>>
>>> It still doesn't scroll all the way through the Apps screen (swipes to 
>>> the left once, then once to the right, and then fails), when searching for 
>>> the Settings app, in the case of the example of Google's Android UI testing 
>>> homepage.
>>>
>>> On Tuesday, 26 March 2013 01:20:11 UTC, Guang Zhu wrote:
>>>>
>>>> Hi Julian,
>>>>
>>>> Thanks for looking into this! We changed how end of scroll is detected 
>>>> in API Level 17, and this caused breakage in some cases where such events 
>>>> fail to be properly detected. We are addressing this issue in the next 
>>>> major platform release.
>>>>
>>>> Thanks,
>>>> Guang Zhu
>>>>
>>>> On Tue, Mar 5, 2013 at 1:58 PM, Julian Harty <[email protected]> 
>>>> wrote:
>>>>
>>>>> OK, the evidence is pointing to a bug in Android 4.2.2 - once I 
>>>>> updated my Galaxy Nexus from 4.2.1 to 4.2.2 the test broke. As a 
>>>>> precaution 
>>>>> I then rebuilt the jar file and redeployed it. I'm building with a target 
>>>>> of android-17.
>>>>>
>>>>>
>>>>> On Tuesday, March 5, 2013 3:35:17 PM UTC, Julian Harty wrote:
>>>>>>
>>>>>> An update: I have a Galaxy Nexus running Android 4.2.1 and the demo 
>>>>>> code works on this phone, albeit slowly. I'm about to apply the system 
>>>>>> update to 4.2.2 to this device and will retest once I've done so. Just 
>>>>>> waiting for the battery to charge sufficiently :)
>>>>>>
>>>>>>
>>>>>> On Tuesday, March 5, 2013 2:37:49 PM UTC, Julian Harty wrote:
>>>>>>>
>>>>>>> I have been experimenting with UI Automator using a Nexus 7 tablet 
>>>>>>> and a Nexus 4 (LG) phone, (both running Android 4.2.2) together with 
>>>>>>> the 
>>>>>>> example code from http://developer.android.com/
>>>>>>> tools/testing/testing_ui.html
>>>>>>>
>>>>>>> The example works on on my Nexus 7 tablet, however it fails to 
>>>>>>> scroll to the "Settings" app on my Nexus 4. The main relevant 
>>>>>>> difference 
>>>>>>> between the devices seems to be the "Settings" are on the third page of 
>>>>>>> Apps on my Nexus 4, and on the second page of Apps on my Nexus 7.
>>>>>>>
>>>>>>> On the Nexus 4, the call to getChildByText(...) scrolls the list of 
>>>>>>> Apps once then stops. It fails to find the "Settings" - on my phone 
>>>>>>> "Settings" is on the third page of Apps. I have experimented with using 
>>>>>>> various methods, including appViews.scrollTextIntoView("Settings"); 
>>>>>>> which behaves similarly. I managed to get the test to work with a 
>>>>>>> slight 
>>>>>>> hack, calling appViews.scrollForward(); twice.
>>>>>>>
>>>>>>> I've checked things like: appViews.getMaxSearchSwipes() which 
>>>>>>> returns 30 - more than sufficient to allow the scrolling to work 
>>>>>>> correctly 
>>>>>>> e.g. using scrollTextIntoView(...).
>>>>>>>
>>>>>>> My temporary workaround is to use appViews.scrollForward(); several 
>>>>>>> times to scroll until the "Settings" is visible, then the call to 
>>>>>>> getChildByText(...) works OK.
>>>>>>>
>>>>>>> Note: I'm viewing the source for UiScrollable.java here 
>>>>>>> https://android.googlesource.com/platform/frameworks/testing/+/
>>>>>>> f612e6a05f47b28ae0f5715545658c08dd759dd7/uiautomator/
>>>>>>> library/src/com/android/uiautomator/core/UiScrollable.java - this 
>>>>>>> may not be the same version as used on my device, however it seems like 
>>>>>>> the 
>>>>>>> code *should* work for the example.
>>>>>>>
>>>>>>> Let me know if you'd like me to post my code here. I'm assuming 
>>>>>>> there's little value in doing so since I took it from the android 
>>>>>>> example.
>>>>>>>
>>>>>>> I'd appreciate someone testing the scenario where the Settings is on 
>>>>>>> the 3rd page of results (or later) to see if the bug is reproducible. 
>>>>>>> Also, 
>>>>>>> if there's a reliable and relatively straight-forward way to build the 
>>>>>>> UIAutomator library and deploy it to my devices I'd be happy to do some 
>>>>>>> more testing of newer versions of the codebase, etc.
>>>>>>>
>>>>>>> Thanks
>>>>>>>
>>>>>>> Julian Harty
>>>>>>>
>>>>>>>
>>>>>>>  
>>>>>>>
>>>>>>>
>>>>>>>  -- 
>>>>> You received this message because you are subscribed to the Google 
>>>>> Groups "adt-dev" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>>> an email to [email protected].
>>>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>>>  
>>>>>  
>>>>>
>>>>
>>>>
>>>>
>>>> -- 
>>>> Guang Zhu
>>>> Android Test Engineering
>>>> Google Inc.
>>>>
>>>> Please keep all discussions on related Google Groups, no direct emails. 
>>>> Thanks!
>>>>  
>>>

-- 
You received this message because you are subscribed to the Google Groups 
"adt-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to