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();
}
我的 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();
}