- 我试过用下面的代码刷
- 在运行测试用例时,滑动操作不会发生,我也没有收到任何错误消息
- 我如何从左向右两侧滑动,反之亦然
有两种方法如下:-
方法1(使用TouchActions):-
1. //Swipe Right to Left side of the Media Viewer First Page
WebElement firstPages = driver.findElement(By.id("media-list"));
TouchActions flick = new TouchActions(driver).flick(firstPages,-100,0,0);
flick.perform();
2. //perform swipe gesture
TouchActions swipe = new TouchActions(driver).flick(0, -20);
swipe.perform();
方法2(使用javascript):-
public static void swipe(WebDriver driver) {
JavascriptExecutor js = (JavascriptExecutor) driver;
HashMap<String, Double> swipeObject = new java.util.HashMap<String, Double>();
swipeObject.put("startX", 0.95);
swipeObject.put("startY", 0.5);
swipeObject.put("endX", 0.05);
swipeObject.put("endY", 0.5);
swipeObject.put("duration", 1.8);
js.executeScript("mobile: swipe", swipeObject);
}
尝试以下实现,其中包含标准FlickAction.SPEED_NORMAL参数以及flick的操作生成器:
import org.openqa.selenium.interactions.touch.FlickAction;
private Action getBuilder(WebDriver driver) {
return new Action(driver);
}
WebElement toFlick = driver().findElement(By.id("media-list"));
Action flick = getBuilder(driver()).flick(toFlick, -500, 0, FlickAction.SPEED_NORMAL).build();
flick.perform();
从左向右滑动,反之亦然,可以通过改变X-asis坐标来执行:
- 向左滑动:
Action flick=getBuilder(driver()).flick(toFlick,-500,0,FlickAction.SPEED_NORMAL).build();
- 向右滑动:
Action flick=getBuilder(driver()).flick(toFlick,500,0,FlickAction.SPEED_NORMAL).build();
- 滑动到顶部:
Action flick=getBuilder(driver()).flick(toFlick,0,500,FlickAction.SPEED_NORMAL).build();
- 滑动到底部:
Action flick=getBuilder(driver()).flick(toFlick,0,-500,FlickAction.SPEED_NORMAL).build();
在功能测试JavaScript繁重的网站时,操作完全失败的一个常见原因是这些操作是在网站完成初始化之前执行的。测试这种情况的最简单方法是在执行操作之前添加短暂睡眠。说2秒钟。
如果这解决了问题,那么您就知道在页面初始化和测试代码运行之间存在竞争条件。
在这一点上,您可以重写代码以等待操作成为可能。
我知道这是一个老问题,但我遇到了很多类似的问题。
正如其他人所指出的,这通常是一个时机问题。因此,我发现,如果我等待一个元素出现(即驱动程序已返回控制,页面已呈现),然后在轻击操作之前和之后短暂睡眠,它就可以工作了,当然在我测试过的每个页面/应用程序上都是如此。所以我们的代码看起来有点像这样:
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("some-element-id)));
flickIt(driver, element -100, 0);
private void flickIt(WebDriver driver, WebElement el, int x, int y) {
SyntheticsUtility.sleep(500); // put 0.5s sleeps around it to make sure, need to be stable
TouchActions touch = new TouchActions(driver);
touch.flick(el, x, y, FlickAction.SPEED_NORMAL);
touch.perform();
SyntheticsUtility.sleep(500);
}