From e011741d6bea65a6d8ed511c94eaf0c901eff4a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=99=E6=B3=93=E9=93=AE?= Date: Tue, 9 Apr 2024 17:03:50 +0800 Subject: [PATCH] feat: android swipe and tap with duration --- hrp/pkg/uixt/android_test.go | 2 +- hrp/pkg/uixt/android_uia2_driver.go | 23 +++++++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/hrp/pkg/uixt/android_test.go b/hrp/pkg/uixt/android_test.go index 50220107..ac177bf6 100644 --- a/hrp/pkg/uixt/android_test.go +++ b/hrp/pkg/uixt/android_test.go @@ -206,7 +206,7 @@ func TestDriver_Swipe(t *testing.T) { t.Fatal(err) } - err = driver.Swipe(400, 1000, 400, 500) + err = driver.Swipe(400, 1000, 400, 500, WithPressDuration(2000)) if err != nil { t.Fatal(err) } diff --git a/hrp/pkg/uixt/android_uia2_driver.go b/hrp/pkg/uixt/android_uia2_driver.go index 58f6b733..dcfda888 100644 --- a/hrp/pkg/uixt/android_uia2_driver.go +++ b/hrp/pkg/uixt/android_uia2_driver.go @@ -291,6 +291,10 @@ func (ud *uiaDriver) TapFloat(x, y float64, options ...ActionOption) (err error) x += actionOptions.getRandomOffset() y += actionOptions.getRandomOffset() + duration := 100.0 + if actionOptions.PressDuration > 0 { + duration = actionOptions.PressDuration + } data := map[string]interface{}{ "actions": []interface{}{ map[string]interface{}{ @@ -300,7 +304,7 @@ func (ud *uiaDriver) TapFloat(x, y float64, options ...ActionOption) (err error) "actions": []interface{}{ map[string]interface{}{"type": "pointerMove", "duration": 0, "x": x, "y": y, "origin": "viewport"}, map[string]interface{}{"type": "pointerDown", "duration": 0, "button": 0}, - map[string]interface{}{"type": "pause", "duration": 100}, + map[string]interface{}{"type": "pause", "duration": duration}, map[string]interface{}{"type": "pointerUp", "duration": 0, "button": 0}, }, }, @@ -382,7 +386,21 @@ func (ud *uiaDriver) Swipe(fromX, fromY, toX, toY int, options ...ActionOption) func (ud *uiaDriver) SwipeFloat(fromX, fromY, toX, toY float64, options ...ActionOption) error { // register(postHandler, new Swipe("/wd/hub/session/:sessionId/touch/perform")) actionOptions := NewActionOptions(options...) + if len(actionOptions.Offset) == 4 { + fromX += float64(actionOptions.Offset[0]) + fromY += float64(actionOptions.Offset[1]) + toX += float64(actionOptions.Offset[2]) + toY += float64(actionOptions.Offset[3]) + } + fromX += actionOptions.getRandomOffset() + fromY += actionOptions.getRandomOffset() + toX += actionOptions.getRandomOffset() + toY += actionOptions.getRandomOffset() + duration := 200.0 + if actionOptions.PressDuration > 0 { + duration = actionOptions.PressDuration + } data := map[string]interface{}{ "actions": []interface{}{ map[string]interface{}{ @@ -392,7 +410,7 @@ func (ud *uiaDriver) SwipeFloat(fromX, fromY, toX, toY float64, options ...Actio "actions": []interface{}{ map[string]interface{}{"type": "pointerMove", "duration": 0, "x": fromX, "y": fromY, "origin": "viewport"}, map[string]interface{}{"type": "pointerDown", "duration": 0, "button": 0}, - map[string]interface{}{"type": "pointerMove", "duration": 200, "x": toX, "y": toY, "origin": "viewport"}, + map[string]interface{}{"type": "pointerMove", "duration": duration, "x": toX, "y": toY, "origin": "viewport"}, map[string]interface{}{"type": "pointerUp", "duration": 0, "button": 0}, }, }, @@ -449,6 +467,7 @@ func (ud *uiaDriver) GetPasteboard(contentType PasteboardType) (raw *bytes.Buffe return } +// SendKeys Android input does not support setting frequency. func (ud *uiaDriver) SendKeys(text string, options ...ActionOption) (err error) { // register(postHandler, new SendKeysToElement("/wd/hub/session/:sessionId/keys")) // https://github.com/appium/appium-uiautomator2-server/blob/master/app/src/main/java/io/appium/uiautomator2/handler/SendKeysToElement.java#L76-L85