我有一个Android应用,其中我的活动包含列表视图。我正在使用自动化测试用例进行滑动以删除列表视图项。我已经编写了以下代码来获取列表视图:
List<WebElement> list = driver.findElements(By.id("com.xyz.email:id/conversation_list_view"));
list.get(0).click();
该代码应单击第一个列表视图项,但无法按预期工作。
我写了另一个代码以滑动删除列表视图项:
MobileElement emailCell = (MobileElement) driver.findElementByXPath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.support.v4.widget.DrawerLayout/android.widget.LinearLayout/android.widget.FrameLayout[2]/android.widget.FrameLayout/android.widget.RelativeLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.ListView/android.widget.FrameLayout/android.view.View");
androidPhone.swipeOnElement("left", emailCell);
我准备好一个名为“ swipeOnElement”的函数,该函数从右向左滑动项目。
Dimension size = driver.manage().window().getSize();
double endX = 0;
double endY = 0;
int elementX = element.getCenter().x;
int elementY = element.getCenter().y;
int finalX;
int finalY;
switch (direction) {
case "left":
endX = size.width;
break;
case "right":
endX = 0;
break;
case "up":
endY = 0;
break;
case "down":
endY = size.height;
break;
}
if (direction == "left" | direction == "right") {
finalX = (int) endX;
finalY = elementY;
} else {
finalX = elementX;
finalY = (int) endY;
}
System.out.println("startY=" + elementY);
System.out.println("startX=" + elementX);
System.out.println("endY=" + finalY);
System.out.println("endX=" + finalX);
new TouchAction(driver)
.press(element)
.waitAction(300)
.moveTo(finalX, finalY)
.release()
.perform();
delay(1000);
此功能很好。运行良好。但是,当我在列表视图项上尝试它时,它无法按预期工作。我不知道为什么会这样。请帮忙!!!
答案 0 :(得分:0)
在这里我找到了解决方法:
有一个名为TouchAction的类,您必须在其中以功能链的形式提供参数和函数。
new TouchAction(driver)
.press(mobileElement)
.waitAction(300)
.moveTo(0,100)
.release()
.perform();
此处驱动程序是AppiumDriver的对象,而mobileElement是MobileElement的对象。 moveTo函数正是整个刷卡动作的基础。它需要滑动的开始位置和结束位置。
答案 1 :(得分:-1)
尝试
swipeLeft(MobileElement mobileElement) {
LOGGER.info("Swiping Left ...");
Dimension size = getWindowSize();
int x1 = (int) (size.width * 0.01);
new TouchAction(driver).press(mobileElement).waitAction(Duration.ofSeconds(1)).moveTo(x1,0).release().perform();
}