当前位置: 首页 > 知识库问答 >
问题:

在appium中使用触摸操作向下滚动移动应用程序时显示异常

白成济
2023-03-14

我试图向下滚动移动应用程序,以便点击屏幕下方的按钮。我使用了下面的触摸动作进行滚动,但它给出了一个例外。还有其他方法吗?任何人请帮我向下滚动移动应用程序。

示例

异常在线程"main"org.openqa.selenium.InvalidElementState异常:刷卡没有成功完成

DesiredCapabilities androidCapabilities = new DesiredCapabilities();
AppiumDriver<MobileElement> appiumDriver;
androidCapabilities.setCapability("automationName",PropertyUtility.getProperty("AndroidAutomationName"));       androidCapabilities.setCapability("platformName",PropertyUtility.getProperty("AndroidPlatformName"));
    androidCapabilities.setCapability("platformVersion", PropertyUtility.getProperty("AndroidPlatformVersion"));
    androidCapabilities.setCapability("deviceName", PropertyUtility.getProperty("AndroidDeviceName"));
    androidCapabilities.setCapability("app",PropertyUtility.getProperty("AndroidAppPath"));
    androidCapabilities.setCapability("noReset", true);
    androidCapabilities.setCapability("newCommandTimeout", "60");
    appiumDriver = new AndroidDriver<>(new URL("http://0.0.0.0:4723/wd/hub"), androidCapabilities);

    Dimension dim=appiumDriver.manage().window().getSize();
    System.out.println(dim);
    int x=dim.getWidth()/2;
    int startY=(int) (dim.getHeight()*(.8));
    int endY=(int) (dim.getHeight()*(.2));
TouchAction action=new TouchAction(appiumDriver);
action.press(PointOption.point(x,startY)).waitAction(WaitOptions.waitOptions(Duration.ofMillis(1000))).moveTo(PointOption.point(x, endY)).release().perform();

配置

appium 1.15 java客户端: 7.3.0

共有1个答案

公孙高畅
2023-03-14

您可以执行滚动以查找特定元素,如下所示:

public void scrollToElementByText(String text) {
        try {
            ((AndroidDriver)driver).findElementByAndroidUIAutomator("newUiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"" + text + "\").instance(0))");
        } catch (Exception e) {
            ...
        }
    }

显然,您可以使用任何属性来查找元素(id、辅助功能id等),然后在该元素上单击()。或者您可以简单地向下滚动并对要显示的元素执行一些检查,如果没有,继续向下滚动:

private void swipe(int xStart, int yStart, int xStop, int yStop) {
    try {
        new TouchAction(driver)
                .press(point(xStart, yStart))
                .moveTo(point(xStop, yStop)).release().perform();
    } catch (Exception e) {
       ...
    }
}

public void scrollDown() {
    swipe(5,
            (getWindowSize().getHeight()) - 200,
            5,
            100);
}

public void scrollToElement(MobileElement el) {
    while (true) {
        if (!el.isDisplayed()) {
            //element is not displayed, keep scrolling
            scrollDown();
        } else {
            //element found
            break;
        }
    }
}

但要小心,因为使用最后一种方法可以得到无限循环(实现自己的逻辑来打破该循环)。

 类似资料:
  • 我的目标是在下拉列表中向下滚动,直到用户可以看到TN等状态。当scrollTo()方法工作时,这在Appium中是可能的,但在当前的Appium构建中,它们被弃用。我试过驾驶。但是什么也没发生。我不太熟悉iOS谓词,但也尝试过使用它们。 到目前为止,替代方案已经尝试过,但都没有奏效: #1 #2:

  • 我正在尝试用Java向下滚动APK页面。我正在使用Appium和Selenium。 我试过: 和

  • 我正在Android应用程序上进行自动化测试,需要滚动才能看到需要滚动的字段 我尝试从这里使用以下代码: 运行此代码后,会出现以下错误: 嗯,我知道我已经通过了中的驱动程序,该驱动程序的类型是。 我该怎么解决这个问题?

  • 下面是我的代码: 在从Eclipse IDE运行类时,得到以下错误:

  • 我试图在一个libgdx游戏中实现触摸滚动。我有一个很宽的图像,是一个房间的全景。我希望能够滚动图像,让用户可以看到房间的四周。我有它,所以我可以滚动一定的距离,但当一个新的触摸拖动事件被注册的图像被移回到原来的位置。 这就是我实现它的方式 } 在InputProcessor中 在这个问题LibGdx如何使用OrthographicCamera?滚动的帮助下,我做到了这一步?。然而,这并没有真正解

  • 当用户使用滚动列表时,我实现了显示/隐藏工具栏。现在,我正在使用android应用程序中的显示/隐藏工具栏,用户可以触摸屏幕上的任意位置。我已经尝试过这个代码,它运行良好: 但唯一的问题是工具栏在隐藏或显示时不会出现动画。我希望工具栏在隐藏和显示时向上滑动和向下滑动。