【问题标题】:TouchAction methods did not work for my mobile testsTouchAction 方法不适用于我的移动测试
【发布时间】:2016-10-13 11:21:31
【问题描述】:

我有一个 UI 滑块组件。单击旋钮时,我可以左右拖动滑块。 我需要在移动设备上测试此功能。我正在使用使用 saucelabs 的 iOS 和 android 模拟器。

我尝试了以下代码:

    slider = appium.findElement(By.id("numInput"));
    int xStart = slider.getLocation().getX();
    int yStart = slider.getLocation().getY();
    int end= xStart + slider.getSize().getWidth();

    System.out.println(slider.getAttribute("aria-valuenow"));

    TouchAction action = new TouchAction(appium);
    int moveTo=(int)(end*0.1);
    action.longPress(xStart,yStart).moveTo(moveTo,yStart).perform();
    System.out.println(slider.getAttribute("aria-valuenow"));

但是遇到错误: org.openqa.selenium.WebDriverException :方法未实现。 在行:action.longPress(xStart,yStart).moveTo(moveTo,yStart).perform();

然后我做了一些研究,发现我需要切换到 Native_App 才能让它工作

但是当我切换到 Native App 时:

    slider = appium.findElement(By.id("numInput"));
    int xStart = slider.getLocation().getX();
    int yStart = slider.getLocation().getY();
    int end= xStart + slider.getSize().getWidth();

    System.out.println(slider.getAttribute("aria-valuenow"));//slider val
    String originalContext = appium.getContext();
    appium.context("NATIVE_APP");
    TouchAction action = new TouchAction(appium);
    int moveTo=(int)(end*0.1);
    action.longPress(xStart,yStart).moveTo(moveTo,yStart).perform();
    System.out.println(slider.getAttribute("aria-valuenow"));

另一个错误:System.out.println(slider.getAttribute("aria-valuenow")); org.openqa.selenium.NoSuchElementException:使用给定的搜索参数无法在页面上找到元素。

滑块也不会移动。

能力:

    caps.setCapability(MobileCapabilityType.DEVICE_NAME,iPhone 6 Plus Simulator);
    caps.setCapability(MobileCapabilityType.PLATFORM_VERSION, 9.3);
    caps.setCapability(MobileCapabilityType.BROWSER_NAME,Safari);
    caps.setCapability(MobileCapabilityType.APPIUM_VERSION, 1.5.3)
    if (appiumDriver.equalsIgnoreCase("iOS")) {
                appium = new IOSDriver(new URL(URL), caps);
     } else if (appiumDriver.equalsIgnoreCase("android")) {
                appium = new AndroidDriver(new URL(URL), caps);
     }

【问题讨论】:

  • 第二个错误可能是因为你找不到元素slider。您能否将代码调试到错误所在的行并检查slider = null
  • 所以我调试了我的代码。我发现浏览器在 action.longPress(xStart,yStart).moveTo(moveTo,yStart).perform(); 之后立即关闭因此,当我找到一个元素时,它不存在。碰巧知道为什么会这样吗? @JaysonP

标签: selenium appium


【解决方案1】:

您可以使用 swipe 方法代替 TouchAction。

driver.swipe(startx, starty, endx, starty, 500);

【讨论】:

  • 这对我不起作用。如果我在没有上下文切换到 Native_App 的情况下使用滑动方法。
  • 它抛出一个错误:方法未实现所以我做了一个上下文切换。但随后未找到 WebElement。org.openqa.selenium.NoSuchElementException: An element could not be located on the page using the given search parameters.
【解决方案2】:

下面的代码对我有用,你可以试一试,touchShortcuts 在这里真的很神奇。

((TouchShortcuts) driver).swipe(startx, starty, endx, starty, 500);

【讨论】:

    猜你喜欢
    • 2020-08-17
    • 2021-09-25
    • 2015-06-06
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    相关资源
    最近更新 更多