11
  1. 我尝试使用以下编码进行刷卡。
  2. 在运行测试用例时,不会发生滑动操作,我也没有收到任何错误消息。
  3. 如何从左到右在两侧滑动,反之亦然。

有两种方法如下:-

方法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);
        }
4

3 回答 3

2

尝试以下实现,其中包括标准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 轴坐标来执行从左到右的滑动,反之亦然:

  • 向左滑动:

动作轻弹 = getBuilder(driver()).flick(toFlick, -500 , 0, FlickAction.SPEED_NORMAL).build();

  • 向右滑动:

动作轻弹 = getBuilder(driver()).flick(toFlick, 500 , 0, FlickAction.SPEED_NORMAL).build();

  • 滑动到顶部:

动作轻弹 = getBuilder(driver()).flick(toFlick, 0, 500 , FlickAction.SPEED_NORMAL).build();

  • 滑动到底部:

动作轻弹 = getBuilder(driver()).flick(toFlick, 0, -500 , FlickAction.SPEED_NORMAL).build();

于 2015-04-20T09:39:06.470 回答
0

在对 JavaScript 繁重的网站进行功能测试时,操作完全无法正常工作的一个常见原因是,这些操作是在网站完成初始化之前采取的。测试这种情况的最简单方法是在执行操作之前添加一个短暂的睡眠。说 2 秒。

如果这解决了问题,那么您就知道在页面初始化和测试代码运行之间存在竞争条件。

此时,您可以重写代码以等待操作成为可能

于 2015-04-20T09:22:32.967 回答
0

我知道这是一个老问题,但我遇到了许多类似的问题。

正如其他人所指出的,这通常是一个时间问题。所以我发现如果我等待一个元素出现(即驱动程序已经返回控制并且页面已经呈现),然后在轻弹动作之前和之后做了一个短暂的睡眠,它肯定会在每个页面/应用程序上工作我已经用它测试过了。所以我们的代码看起来有点像这样:

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);
}
于 2016-07-28T15:31:29.357 回答