Как выполнить салфетки в Selendroid?

  • Я пробовал использовать ниже кодировки для прокрутки.
  • При запуске тестового примера действие салфетки не происходит, и я также не получаю сообщение об ошибке.
  • Как я могу прокручивать обе стороны слева направо и наоборот.

Существует два метода: -

Способ 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);
        }

Ответ 1

Попробуйте выполнить реализацию, которая включает стандартный аргумент FlickAction.SPEED_NORMAL, а также создатель действий для щелчка:

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:

  • Проведите пальцем влево:

Действие flick = getBuilder (driver()). flick (toFlick, -500, 0,  FlickAction.SPEED_NORMAL).build();

  • Проведите по экрану вправо:

Действие flick = getBuilder (driver()). flick (toFlick, 500, 0, FlickAction.SPEED_NORMAL).build();

  • Проведите вверх:

Действие flick = getBuilder (driver()). flick (toFlick, 0, 500, FlickAction.SPEED_NORMAL).build();

  • Проведите по экрану снизу:

Действие flick = getBuilder (driver()). flick (toFlick, 0, -500, FlickAction.SPEED_NORMAL).build();

Ответ 2

Общей причиной того, что действия просто полностью не работают при функциональном тестировании тяжелых веб-сайтов JavaScript, является то, что действия предпринимаются до того, как сайт завершил инициализацию. Самый простой способ проверить это - это добавить короткий сон перед выполнением действия. Скажите 2 секунды.

Если это решает проблему, вы знаете, что у вас есть условие гонки между инициализацией страницы и вашим тестовым кодом.

В этот момент вы можете переписать свой код, чтобы дождаться возможного действия.

Ответ 3

Я знаю, что это старый вопрос, но я столкнулся с рядом подобных проблем.

Как указывали другие, это вообще время. Поэтому я обнаружил, что, если я ожидаю, что элемент будет присутствовать (т.е. Драйвер вернул элемент управления и отобразил страницу), а затем сделал короткий сон как до, так и после действия flick, он работает, безусловно, на каждой странице/приложении Я тестировал его. Поэтому наш код выглядит примерно так:

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);
}