change: add back action of mobile ui automation

This commit is contained in:
xucong.053
2022-11-09 16:36:36 +08:00
parent df2e255d8f
commit 093a4f5206
5 changed files with 47 additions and 5 deletions

View File

@@ -233,9 +233,12 @@ func (ud *uiaDriver) Scale() (scale float64, err error) {
}
// PressBack simulates a short press on the BACK button.
func (ud *uiaDriver) PressBack() (err error) {
func (ud *uiaDriver) PressBack(options ...DataOption) (err error) {
// register(postHandler, new PressBack("/wd/hub/session/:sessionId/back"))
_, err = ud.httpPOST(nil, "/session", ud.sessionId, "back")
if err != nil {
_, err = ud.adbDevice.RunShellCommand("input", "keyevent", "4")
}
return
}

View File

@@ -53,6 +53,7 @@ const (
ACTION_DoubleTap MobileMethod = "double_tap"
ACTION_Swipe MobileMethod = "swipe"
ACTION_Input MobileMethod = "input"
ACTION_Back MobileMethod = "back"
// custom actions
ACTION_SwipeToTapApp MobileMethod = "swipe_to_tap_app" // swipe left & right to find app and tap
@@ -618,6 +619,8 @@ func (dExt *DriverExt) DoAction(action MobileAction) error {
options = append(options, WithDataIdentifier(action.Identifier))
}
return dExt.Driver.Input(param, options...)
case ACTION_Back:
return dExt.Driver.PressBack()
case CtlSleep:
if param, ok := action.Params.(json.Number); ok {
seconds, _ := param.Float64()
@@ -651,10 +654,10 @@ func (dExt *DriverExt) DoAction(action MobileAction) error {
}
func (dExt *DriverExt) getAbsScope(x1, y1, x2, y2 float64) (int, int, int, int) {
return int(x1 * float64(dExt.windowSize.Width) * dExt.scale),
int(y1 * float64(dExt.windowSize.Height) * dExt.scale),
int(x2 * float64(dExt.windowSize.Width) * dExt.scale),
int(y2 * float64(dExt.windowSize.Height) * dExt.scale)
return int(x1 * float64(dExt.windowSize.Width)),
int(y1 * float64(dExt.windowSize.Height)),
int(x2 * float64(dExt.windowSize.Width)),
int(y2 * float64(dExt.windowSize.Height))
}
func (dExt *DriverExt) DoValidation(check, assert, expected string, message ...string) bool {

View File

@@ -1046,6 +1046,9 @@ type WebDriver interface {
// PressButton Presses the corresponding hardware button on the device
PressButton(devBtn DeviceButton) error
// PressBack Presses the back button
PressBack(options ...DataOption) error
// IOHIDEvent Emulated triggering of the given low-level IOHID device event.
// duration: The event duration in float seconds (XCTest uses 0.005 for a single press event)
IOHIDEvent(pageID EventPageID, usageID EventUsageID, duration ...float64) error

View File

@@ -526,6 +526,27 @@ func (wd *wdaDriver) KeyboardDismiss(keyNames ...string) (err error) {
return
}
// PressBack simulates a short press on the BACK button.
func (wd *wdaDriver) PressBack(options ...DataOption) (err error) {
windowSize, err := wd.WindowSize()
if err != nil {
return
}
data := map[string]interface{}{
"fromX": float64(windowSize.Width) * 0,
"fromY": float64(windowSize.Height) * 0.5,
"toX": float64(windowSize.Width) * 0.6,
"toY": float64(windowSize.Height) * 0.5,
}
// new data options in post data for extra WDA configurations
d := NewData(data, options...)
_, err = wd.httpPOST(d.Data, "/session", wd.sessionId, "/wda/dragfromtoforduration")
return
}
func (wd *wdaDriver) PressButton(devBtn DeviceButton) (err error) {
// [[FBRoute POST:@"/wda/pressButton"] respondWithTarget:self action:@selector(handlePressButtonCommand:)]
data := map[string]interface{}{"name": devBtn}