如何将元素滚动到适用于iOS的appium 1.7中的特定位置

时间:2017-11-24 11:43:03

标签: appium

下面的代码正在滚动到结束,但我不想滚动直到结束 我想滚动一些特定的位置:

driver.findElementByXPath("//*[@value='UpcomingInstallations']").click();
JavascriptExecutor js = (JavascriptExecutor) driver;
HashMap<String, String> scrollObject = new HashMap<String, String>();
scrollObject.put("direction", "down");
js.executeScript("mobile: scroll", scrollObject);

5 个答案:

答案 0 :(得分:1)

我这样做的方法是在屏幕上查找元素(https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebElement.html#isDisplayed--),如果我没有看到它,请滑动。

while (!displayed)
   swipe

我建议您查看TouchAction类以进行滑动:https://appium.github.io/java-client/io/appium/java_client/TouchAction.html。滑动的首选方法如下:

myTouchAction.press(startX,startY).moveTo(endX,endY).release().perform()

由于设备之间的像素可能不同,因此您需要使用基于总屏幕尺寸百分比的坐标。有关详细信息,请参阅https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebDriver.Window.html#getSize--

答案 1 :(得分:0)

您的滚动代码是正确的,您还需要指定元素名称属性值,下面是它在Appium 1.7中的代码: -

JavascriptExecutor js = (JavascriptExecutor) driver;
HashMap scrollObject = new HashMap();
scrollObject.put("direction", "down");
scrollObject.put("name", "object name value");
js.executeScript("mobile: scroll", scrollObject);

答案 2 :(得分:0)

driver.findElementByXPath("//*[@value='UpcomingInstallations']").click();

JavascriptExecutor js = (JavascriptExecutor) driver;

HashMap scrollObject = new HashMap();

scrollObject.put("direction", "down");

js.executeScript("mobile: scroll", scrollObject);

这肯定有效。

答案 3 :(得分:0)

在我的情况下(使用Java),我对一个简单的UIListView执行了此操作,并且由于不赞成使用driver.swipe方法,因此该功能在Appium-mac-1.15.0-1中有效:

你去了

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

答案 4 :(得分:0)

在滚动对象中,只给出一个定位器值。您的定位器可以是任何可用的,例如:ID,名称,xpath或其他一些可用的。

JavascriptExecutor js = (JavascriptExecutor) driver;
        HashMap<String, String> scrollObject = new HashMap<String, String>();
        scrollObject.put("direction", "down");
        scrollObject.put("xpath", "<your xpath value>");
        js.executeScript("mobile: scroll", scrollObject);