Appium:如何使用 Java 在 iOS 应用程序中向下滚动下拉菜单

Appium: How to scroll down drop down in an iOS app using Java

我的 objective 通过下拉菜单向下滚动,直到用户看到 TN 等状态。当 scrollTo() 方法起作用时,这在 Appium 中是可能的,但它们在当前的 Appium 构建中已被弃用。我尝试了 driver.swipe() 但没有任何反应。我不太熟悉 iOS 谓词,但也尝试过使用它们。

到目前为止尝试了替代方案,但 none 有效:

#1

MobileElement element = wd.findElementByIosUIAutomation(
                ".tableViews()[0]" + ".scrollToElementWithPredicate(\"name CONTAINS 'TN'\")");
        element.tap(1, 1);

#2:

JavascriptExecutor js = (JavascriptExecutor) wd; HashMap <String, String> scrollObject = new HashMap <String, String>();
scrollObject.put("element", ((RemoteWebElement)
wd.findElementByAccessibilityId("TN")).getId()); js.executeScript(
"mobile: scroll", scrollObject);

你能试试这个吗?

String uiAutoLocator = ".tableViews()[0].firstWithPredicate(\"name CONTAINS 'TN'\")";
driver.executeScript(uiAutoLocator + ".scrollToVisible();");

确保定位器 uiAutoLocator 产生了一个元素。

好的,我找到了解决方案,但考虑到缺乏解决方案,很难找到:

String path = "UIATarget.localTarget().frontMostApp().mainWindow().popover().tableViews()[0].cells()[\"TN\"]";
driver.executeScript(path + ".scrollToVisible();");

MobileElement state = driver.findElementByIosUIAutomation(path);
state.tap(1, 1);

在我的例子中,我为一个简单的 UIListView 执行了此操作,它适用于此目的,因为 driver.swipe 方法已被弃用:

好了

public static void scrollDownIos(IOSDriver<IOSElement> driver, double scrollPercentageStart, double scrollPercentageEnd) 
{
    Dimension size = driver.manage().window().getSize();
    int x = size.getWidth()/2;
    int starty = (int) (size.getHeight() * scrollPercentageStart);
    int endy = (int) (size.getHeight() * scrollPercentageEnd);
    (new TouchAction(driver)).press(PointOption.point(x, starty))
    .waitAction(WaitOptions.waitOptions(Duration.ofMillis(2000)))
    .moveTo(PointOption.point(x, endy))
    .release()
    .perform();
}