Appium滑动手势无法在Android列表中运行

时间:2016-03-14 14:25:04

标签: android appium

我正在通过mac工作一个真正的Android设备,从eclipse执行java命令,一切都很好,除了滑动命令,这是我的代码:

wd = new AndroidDriver<MobileElement>(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
wd.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);

//enter user name (works)
wd.findElement(By.xpath("//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.ScrollView[1]/android.widget.LinearLayout[1]/android.widget.EditText[1]")).sendKeys(username);

//enter password(works)
wd.findElement(By.xpath("//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.ScrollView[1]/android.widget.LinearLayout[1]/android.widget.EditText[2]")).sendKeys(password);

//click login(works)
wd.findElement(By.xpath("//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.ScrollView[1]/android.widget.LinearLayout[1]/android.widget.Button[1]")).click();

//try to swipe a list (does not work)
wd.swipe(300, 300, 1, 300, 1500);

4 个答案:

答案 0 :(得分:1)

添加评论,有两件事:

1。确保您指定的(x,y) coordinates实际存在于屏幕上。

2。减少执行滑动的持续时间,请尝试此操作

wd.swipe(300, 300, 1, 300, 10);

3。一个关键的事情,您尝试使用的方法的定义:

public void swipe(int startx, int starty, int endx, int endy, int duration) {
    TouchAction touchAction = new TouchAction(this);

    // appium converts press-wait-moveto-release to a swipe action
    touchAction.press(startx, starty).waitAction(duration)
            .moveTo(endx, endy).release();

    touchAction.perform();
}

看看这个和你的意见: startx = 300 ; starty = 300 ; endx = 1 ; endy = 300您好像正在做 swipe left at height 300 ,我们将假设是您期待的,如果不是,需要改变坐标。

答案 1 :(得分:1)

对于任何面临类似问题的人来说,这是如何解决的, 我只是在列表中添加了一个随机断言,因为我发现刷卡功能会立即执行,而不像其他函数在执行之前等待上一个任务完成(可能是一个bug)。

tldr:我在滑动之前添加了这个

String firstName =  wd.findElementByName("aerobics 101").getText();
Assert.assertEquals("aerobics 101", firstName);

示例:

[1] wd.findElement(By.xpath("//android.widget.LinearLayout[1]/android.widget.FrameLayout[1]/android.widget.LinearLayout[1]/android.widget.ScrollView[1]/android.widget.LinearLayout[1]/android.widget.EditText[2]")).sendKeys(password);

  

系统在 [1] [2]

之间等待30秒

<强> [2]     wd.findElement(By.xpath(&#34; // android.widget.LinearLayout [1] /android.widget.FrameLayout [1] /android.widget.LinearLayout [1] /android.widget.ScrollView [1] / android.widget.LinearLayout [1] /android.widget.Button [1]&#34;))点击();

  

[2] [3] 之间没有等待!!!!!!!

<强> [3]

wd.swipe(300, 300, 1, 300, 1500);

答案 2 :(得分:0)

在当前屏幕上按名称查找2个角(左侧和右侧)元素并使用此方法滑动:

public void swipeScreen(String name, String move) {
    WebElement longPress = driver.findElementByName(name);
    WebElement moveTo = driver.findElementByName(move);
    TouchAction action = new TouchAction(driver).longPress(longPress, 20000).moveTo(moveTo).release();
    action.perform();
}

答案 3 :(得分:0)

首先,我会采用屏幕的尺寸:

Dimension dimension = driver.manage()。window()。getSize();

完成此操作后,使用维度实例获取x和y值。         int middleX = dimension.getWidth()/ 2;         int middleY = dimension.getHeight()/ 2;         int quarterY = dimension.getHeight()/ 4;         driver.swipe(middleX,middleY,middleX,quarterY,duration);

在持续时间内,我会使用800或1000,这是足够慢的。