我正在通过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);
答案 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,这是足够慢的。