Как выполнить салфетки в 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);
}