@rOKi125, @0x1mason@mariusbob
IF you are looking for solution how driver.scrollTo works you can watch my video, I’m using the latest version of applium jar files
@sujata_kalluri :- Sure I will help on this.
Please give me your code to identify the issue and also let me know what appium version, Client lib are you using ?
Code:
((AndroidDriver)driver).context(“NATIVE_APP”);
Thread.sleep(1000);
((AndroidDriver)driver).scrollTo(val).click(); //the control moves past “val”, after scrolling to desired element
((AndroidDriver)driver).findElementByXPath("//android.widget.GridView/android.view.View["+rowno+"]//android.widget.Image[1]").click();
Thread.sleep(2000);
((AndroidDriver)driver).context(“WEBVIEW”);
Thread.sleep(1000);
@sujata_kalluri :- Hi Sujata,
First of all sorry for the late reply, As per my knowledge driver.scrollTo(value) only working when android.widget.ListView have single text in it and it fails when multiple text is present in each row of listView. In my case I have single entry/text in each line.
So to resolve your issue you can use below method which I implemented for me and it is working fine.
Our app doesn’t use android.widget.ListView, all elements are loaded in android.view.View, I can see all the elements in the uiautomatorviewer element tree. But I have to swipe screen to access the elements which aren’t in visible range. I tried uiautomator scrollintoview method, it does’t work for this case.
I have used below code for scroll in my application. When a click to element does not happen, when element is not visible,an exception occurs using this I added this code. Hope this helps you.
I’ve found scrolling by co-ordinates helps. In Android you scroll from bottom up to get the scroll working. The best way i’ve found to work is - either to get the location of an element :
int topY = element.getLocation().getY()
int bottomY = topY + element.getSize().getHeight()
int centerX = element.getLocation().getX() + (element.getSize().getWidth()/2)
driver.swipe(centerX, bottomY, centerX, topY, duration);
Or - get the size of the screen, divide it up and scroll like that -
Dimension dimensions = driver.manage().window().getSize();
Double screenHeightStart = dimensions.getHeight() * 0.5;
int scrollStart = screenHeighStart.toInt();
Double screenHeightEnd = dmensions.getHeight() * 0.2
int scrollEnd = screenHeightEnd.toInt();
driver.swipe(0,scrollStart,0,scrollEnd,duration); //duration is in milliseconds I believe so go for values like 1000 or 2000
The reason you need to convert the Doubles to ints is because driver.swipe does not accept Double/double values.
@Rjimms, Thanks your solution worked well for Android scroll action. I have tried same code for iOS also, but it doesn’t worked for me. If you know solution for iOS also, please provide. I am searching for reliable solution for iOS scroll and swipe.
Can you try scroll on iOS app with below strategy…
driver = new IOSDriver(new URL(“http://127.0.0.1:4725/wd/hub”), capabilities);
WebDriverWait wait = new WebDriverWait(driver,150);
driver.findElementByAccessibilityId("UICatalog").click();
TouchAction act = new TouchAction(driver);
act.press(driver.findElementByAccessibilityId("Sliders")).moveTo(driver.findElementByAccessibilityId("Alert Controller")).release().perform();
Thread.sleep(4000);
// Just make sure ur locator is correct, area should be scrollable and it should work…
If u have some text in content-desc attribute of Node then above code will work…
Try with className/xpath