【问题标题】:Appium - Swipe not working on the android device through java codeAppium - 通过Java代码在Android设备上滑动不起作用
【发布时间】:2017-03-15 14:57:59
【问题描述】:

我是 Appium 自动化的新手。我正在尝试在 android 设备屏幕上执行滑动,但下面的代码不起作用

 JavascriptExecutor js = (JavascriptExecutor) driver;
    HashMap<String, Double> swipeObject = new HashMap<String, Double>();
    swipeObject.put("startX", 0.95);
    swipeObject.put("startY", 0.5);
    swipeObject.put("endX", 0.05);
    swipeObject.put("endY", 0.5);
    swipeObject.put("duration", 2.0);
    js.executeScript("mobile: swipe", swipeObject);

JavascriptExecutor js = (JavascriptExecutor) driver;
    HashMap<String, Double> swipeObject = new HashMap<String, Double>();
    swipeObject.put("startX", 600.00);
    swipeObject.put("startY", 685.00);
    swipeObject.put("endX", 198.00);
    swipeObject.put("endY", 550.00);
    swipeObject.put("duration", 2.0);
    js.executeScript("mobile: swipe", swipeObject);;

抛出错误

org.openqa.selenium.WebDriverException: Not yet implemented. Please help us: http://appium.io/get-involved.html (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 16 milliseconds
Build info: version: '2.35.0', revision: '8df0c6b', time: '2013-08-12 15:43:19'
System info: os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_25'
Driver info: org.openqa.selenium.remote.RemoteWebDriver

如果有其他可用的滑动方式,请提供链接。

提前致谢。

【问题讨论】:

  • 在 Ruby 语言中,这行代码适用于我在 Android 设备上滑动。检查这是否有帮助。 driver.execute_script 'mobile: swipe', :startX => 700, :startY => 900, :endX => 100, :endY => 900, :duration => 0.8
  • 我使用的是最新版本的 Appium "AppiumForWindows-1.3.4.1",上面的代码在 "AppiumForWindows-1.2.4.1" 上运行良好。

标签: java android appium


【解决方案1】:

请使用(下面的代码会从左到右滑动)

    driver.context("NATIVE_APP");
    Dimension size = driver.manage().window().getSize();
    int startX = (int)(size.width * 0.10);
    int endX = (int)(size.width * 0.80);
    int startY = size.height/2;
    driver.swipe(startX, startY, endX, startY, 1000);

【讨论】:

  • 当然在上面的例子中 startY = endY。通常是这样的:driver.swipe(startX, startY, endX, endY, 1000);
【解决方案2】:

在红宝石郎中: swipe(start_x: 0.5, start_y: 0.5, end_x: 0.5, end_y: 0.5, duration: 6) 对我有用。

在 Java 中,您可以在 TouchShortcuts 界面中使用“滑动”方法。请参考http://appium.github.io/java-client/

【讨论】:

    【解决方案3】:

    您应该使用 driver.swipe(0.95, 0.5, 0.05, 0.5, 2.0),因为不推荐使用除 mobile:scroll/scrollTo 之外的其他手势。

    https://github.com/appium/appium/blob/master/docs/en/advanced-concepts/migrating-to-1-0.md 特别值得注意的是,手势方法已被新的 TouchAction / MultiAction API 取代,它允许以更强大和更通用的方式将手势自动化组合在一起。有关 TouchAction / MultiAction 的使用说明,请参阅您的 Appium 客户端。

    您可以在此处查看更多信息:https://github.com/appium/appium/issues/4199

    【讨论】:

      【解决方案4】:

      driver.swipe(435, 396, 112, 496, 900);这是在 Android 设备中滚动屏幕的最佳方式。

      【讨论】:

        【解决方案5】:

        在 Java 中,我将以下代码用于 AndroidDriver

        androidDriver = new AndroidDriver(capabilities);
        WebElement element = androidDriver.findElement(By.xpath(locator));
        String originalContext = androidDriver.getContext();
        int bottomY = element3.getLocation().getY();
        int bottomX = element3.getLocation().getX();
        androidDriver.context("NATIVE_APP");
        androidDriver.swipe(28, 550, 28, 1, 900);
        androidDriver.context(originalContext);
        

        我只更改 x & y 坐标进行修改。可能需要改进以适应不同的屏幕尺寸,但这是可行的。

        【讨论】:

          猜你喜欢
          • 2016-02-26
          • 2018-11-11
          • 1970-01-01
          • 2019-06-26
          • 2019-06-15
          • 2020-11-04
          • 2016-09-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多