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.
