无法使用Java客户端使用Appium滚动Android应用

时间:2018-07-26 07:47:27

标签: java android scroll scrollview appium

我无法使用Appium向下滚动到Android应用中任何页面的底部。尝试了多种方法,包括在Stack Overflow上找到的方法。 (看来这个挑战很普遍。)但是,所有尝试都失败了。

环境:

  • Appium版本:1.6.2
  • Appium客户端:Java(java-client-6.1.0.jar)
  • Android版本:5.1、6.0.1、7.1.1
  • Java版本:jre1.8.0_171
  • 硒版本:selenium-java-3.13.0
  • 应用类型:Cordova(混合);该应用是使用Cordova构建的,但运行System.out.println(driver.getContext());时,结果为NATIVE_APP

请分享可以解决此问题的所有替代方案或改进方案。任何有用的建议,将不胜感激!

以下总结了尝试的各种方法:

  1. 方法:scrollIntoView()(各种实现)
  2. driver.findElementByAndroidUIAutomator("new UiScrollable(new UiSelector()).scrollIntoView(resourceId(\"send-to-email-app\"));").click();
    • 来源:Udemy课程
    • 错误:不滚动且没有错误

  3. 方法:尝试catch> scrollIntoView()
  4.     try { driver.findElementByAndroidUIAutomator("new UiScrollable(new UiSelector()).scrollIntoView(text(\"Send\"))"); }catch(Exception e) { System.out.println("We got an error scrolling!"); }
    • 来源:https://stackoverflow.com/questions/39658626/how-to-scroll-top-to-botton-using-android-driver
    • 错误:部分有效:页面向下滚动但距离不够

  5. 方法:滑动
  6.     driver.swipe(0, Startpoint,0,scrollEnd,1000);
    • 来源:https://stackoverflow.com/questions/39130591/swipe-or-scroll-to-bottom-in-appium-android
    • 错误:不建议使用滑动

  7. 方法:touchAction.longPress + moveTo
  8.     ...touchAction.longPress(fromX, fromY).moveTo(toX, toY).release().perform();
    • 来源:https://stackoverflow.com/questions/44282417/how-to-scroll-with-appium-1-7-1-using-touchaction
    • 错误:“无法解决驱动程序”

  9. 方法:touchAction.longPress + moveTo
  10.     TouchAction touchAction = new TouchAction(driver); touchAction.longPress(10, 10).moveTo(x, y).release().perform();
    • 来源:https://stackoverflow.com/questions/44282417/how-to-scroll-with-appium-1-7-1-using-touchaction
    • 错误:“ TouchAction类型的longPress(LongPressOptions)方法不适用于参数(int,int)”

  11. 方法:touch.longPress + moveTo
  12.     ...TouchAction touch = new TouchAction(driver); touch.longPress(co_ordinates[0], co_ordinates[1]).moveTo(dinates[0], dinates[1]).release().perform();
    • 来源:https://stackoverflow.com/questions/50304699/how-to-scroll-to-specific-element-inlatest-version-of-appium-using-java
    • 错误:“外卖无法解决”

  13. 方法:使用坐标moveTo +
  14.     actions.press(startX, startY).waitAction(Duration.ofSeconds(2)).moveTo(endX, endY).release().perform();
    • 来源:http://www.automationtestinghub.com/appium-scroll-examples/
    • 错误:不建议执行“ press”操作!

  15. 方法:使用新闻方法滑动+ moveTo
  16.     TouchAction().press(el0).moveTo(el1).release();
    • 来源:https://stackoverflow.com/questions/49004686/scroll-text-area-with-terms-and-conditions-on-hybrid-app-with-appium
    • 错误:“未为对象类型定义方法press(AndroidElement)”

  17. 方法:使用坐标touchAction'tap'
  18.     TouchAction touchAction = new TouchAction(driver); touchAction.tap(PointOption.point(x, y)).perform();
    • 来源:https://discuss.appium.io/t/scrolling-to-element-in-android-app-using-java/17208
    • 错误:无;它部分起作用:页面向下滚动但距离不够!

  19. 方法:UiScrollable>指定父级可滚动框架和子级元素
  20.     MobileElement doeButton = driver.findElement(MobileBy.AndroidUIAutomator( "new UiScrollable(new UiSelector().text(\"Android scrollbar test\")).getChildByText(" + "new UiSelector().className(\"android.widget.TextView\"), \"Doe\")"));
    • 来源:https://stackoverflow.com/a/51003840/9214050
    • 错误:“无法解析UiSelector参数:使用反射调用此方法时出现问题”

  21. 方法:UiScrollable>指定父级可滚动框架和'scrollIntoView'子元素
  22.     MobileElement sendEmailButton = driver.findElement(MobileBy.AndroidUIAutomator( "new UiScrollable(new UiSelector().resourceId(\"content\")).scrollIntoView(" + "new UiSelector().resourceId(\"add-task-button\"))")); sendEmailButton.click();
    • 来源:https://stackoverflow.com/a/51003840/9214050
    • 错误:不滚动且没有错误

  23. 方法:使用CSS样式将页面元素的“可滚动”属性从“ false”更改为“ true”
    • 来源:http://burnignorance.com/html-tips/making-a-smooth-scroll-view-for-android-ios-in-html/
    • 错误:没有,但应用程序不会滚动到页面底部。

  24. 方法:触摸操作:“移动:滑动”,“移动:滚动”(http://appium.io/docs/en/writing-running-appium/touch-actions/)
  25.     JavascriptExecutor js = (JavascriptExecutor) driver; HashMap params = new HashMap(); params.put("direction", "up"); js.executeScript("mobile: swipe", params);
    • 来源:https://stackoverflow.com/questions/32387357/i-cant-make-swipe-gesture-work-for-me-in-appium-using-java#
    • 错误:“未知的移动命令“ scroll”。仅支持shell,startLogsBroadcast,stopLogsBroadcast命令。”

  26. 方法:HashMap + scrollObject.put
  27.     JavascriptExecutor js = (JavascriptExecutor) driver; HashMap scrollObject = new HashMap(); scrollObject.put("direction", "down"); js.executeScript("mobile: scroll", scrollObject);
    • 来源:http://appium.io/docs/en/writing-running-appium/touch-actions/
    • 错误:“未知的移动命令“ scroll”。仅支持shell,startLogsBroadcast,stopLogsBroadcast命令。”

  28. 方法:将应用程序的上下文从“本机”调整为“网络视图”(因为它是Cordova应用程序)
  29.     appCapabilities.setCapability("autoWebview", "true");
    • 来源:https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md
    • 错误:“线程“主”中的异常” org.openqa.selenium.WebDriverException:无法创建新会话,因为找不到包含HttpClient,InputStream和long的'createSession'或无法访问。 / li>
    • 错误:“ org.openqa.selenium.WebDriverException:处理命令时发生未知的服务器端错误。原始错误:找不到可自动执行Chrome '58 .0.3029'的Chromedriver。请参见https://github.com /appium/appium/blob/master/docs/en/writing-running-appium/web/chromedriver.md了解更多详细信息。(警告:服务器未提供任何堆栈跟踪信息)”

1 个答案:

答案 0 :(得分:3)

作为上述建议选项的一种变体,这是与TouchActionpress方法结合使用的另一种实现moveTo的方法。这导致屏幕向下滑动。您可能需要简单地将坐标调整为最适合客户的方式:

new TouchAction(driver).press(PointOption.point(550, 640)).waitAction().moveTo(PointOption.point(550, 60)).release().perform();

有关其他信息,您可以查看以下参考: