Swipe Gesten mit Selenium auf Android Geräten
12. Februar 2021Swipe Gesten für Web Anwendungen auf Android Geräten zu testen ist nicht so einfach. Aber es ist möglich, man muss nur ein paar Sachen wissen:
- Man muss die TouchActions Klasse auf dem Appium Client verwenden
- Man muss die Koordinaten des nativen Kontextes verwenden, die Unterscheiden sich von den Koordinaten des Web Kontextes
Möchte man einfach nur von links nach rechts wischen, funktioniert das folgendermaßen:
import io.appium.java_client.TouchAction;
import io.appium.java_client.android.AndroidDriver;
import static io.appium.java_client.touch.WaitOptions.waitOptions;
import static io.appium.java_client.touch.offset.PointOption.point;
import static java.time.Duration.ofMillis;
public class Test {
public void swipeLeftToRight(AndroidDriver<?> androidDriver) {
var currentContext = androidDriver.getContext();
// We need to switch to the native context to get the real windows size
androidDriver.context("NATIVE_APP");
var windowsSize = androidDriver.manage().window().getSize();
// Avoid starting and ending directly on the edge of the screen
int border = 50;
int startX = border;
int startY = (windowsSize.height / 2);
int endX = windowsSize.width - border;
int endY = startY;
new TouchAction(androidDriver)
.press(point(startX, startY))
.waitAction(waitOptions(ofMillis(2000)))
.moveTo(point(endX, endY))
.release()
.perform();
// Switch back to the web context
androidDriver.context(currentContext);
}
}
Möchte man genauer steuern über welches WebElement man swipt, muss man von den Web Koordinaten in Native Koordinaten umrechnen. Dies hängt von der Position eures WebViews auf dem Screen und dem Verhältnis native Größe des WebViews und innere Größe im WebContext ab.