mirror of
https://github.com/httprunner/httprunner.git
synced 2026-05-11 18:11:21 +08:00
refactor: exit with AndroidShellExecError code for adb shell failure
This commit is contained in:
@@ -63,7 +63,7 @@ var (
|
||||
var (
|
||||
AndroidDeviceConnectionError = errors.New("android device connection error") // 60
|
||||
AndroidDeviceUSBDriverError = errors.New("android device USB driver error") // 61
|
||||
AndroidShellExecError = errors.New("android shell exec error") // 62
|
||||
AndroidShellExecError = errors.New("android adb shell exec error") // 62
|
||||
AndroidScreenShotError = errors.New("android screenshot error") // 65
|
||||
AndroidCaptureLogError = errors.New("android capture log error") // 66
|
||||
)
|
||||
|
||||
@@ -3,16 +3,17 @@ package gadb
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/binary"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/rs/zerolog/log"
|
||||
|
||||
"github.com/httprunner/httprunner/v4/hrp/internal/builtin"
|
||||
"github.com/httprunner/httprunner/v4/hrp/internal/code"
|
||||
)
|
||||
|
||||
type DeviceFileInfo struct {
|
||||
@@ -244,7 +245,10 @@ func (d *Device) ReverseForwardKillAll() error {
|
||||
|
||||
func (d *Device) RunShellCommand(cmd string, args ...string) (string, error) {
|
||||
raw, err := d.RunShellCommandWithBytes(cmd, args...)
|
||||
return string(raw), err
|
||||
if err != nil {
|
||||
return "", errors.Wrap(code.AndroidShellExecError, err.Error())
|
||||
}
|
||||
return string(raw), nil
|
||||
}
|
||||
|
||||
func (d *Device) RunShellCommandWithBytes(cmd string, args ...string) ([]byte, error) {
|
||||
@@ -548,7 +552,7 @@ func (d *Device) InstallAPK(apk io.ReadSeeker) (string, error) {
|
||||
|
||||
res, err := d.RunShellCommand("pm", "install", "-f", remote)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("error installing: %v", err)
|
||||
return "", errors.Wrap(err, "install apk failed")
|
||||
}
|
||||
if haserr(res) {
|
||||
return "", errors.New(res)
|
||||
|
||||
@@ -59,7 +59,7 @@ func (ad *adbDriver) WindowSize() (size Size, err error) {
|
||||
// adb shell wm size
|
||||
resp, err := ad.adbClient.RunShellCommand("wm", "size")
|
||||
if err != nil {
|
||||
return
|
||||
return size, errors.Wrap(err, "get window size failed")
|
||||
}
|
||||
|
||||
// Physical size: 1080x2340
|
||||
@@ -84,12 +84,15 @@ func (ad *adbDriver) Scale() (scale float64, err error) {
|
||||
func (ad *adbDriver) PressBack(options ...ActionOption) (err error) {
|
||||
// adb shell input keyevent 4
|
||||
_, err = ad.adbClient.RunShellCommand("input", "keyevent", fmt.Sprintf("%d", KCBack))
|
||||
return
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "press back failed")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (ad *adbDriver) StartCamera() (err error) {
|
||||
if _, err = ad.adbClient.RunShellCommand("rm", "-r", "/sdcard/DCIM/Camera"); err != nil {
|
||||
return err
|
||||
return errors.Wrap(err, "remove /sdcard/DCIM/Camera failed")
|
||||
}
|
||||
time.Sleep(5 * time.Second)
|
||||
var version string
|
||||
@@ -176,7 +179,7 @@ func (ad *adbDriver) AppTerminate(packageName string) (successful bool, err erro
|
||||
// adb shell am force-stop <packagename>
|
||||
_, err = ad.adbClient.RunShellCommand("am", "force-stop", packageName)
|
||||
if err != nil {
|
||||
return false, err
|
||||
return false, errors.Wrap(err, "force-stop app failed")
|
||||
}
|
||||
|
||||
if ad.lastLaunchedPackageName == packageName {
|
||||
@@ -198,9 +201,14 @@ func (ad *adbDriver) TapFloat(x, y float64, options ...ActionOption) (err error)
|
||||
}
|
||||
|
||||
// adb shell input tap x y
|
||||
xStr := fmt.Sprintf("%.1f", x)
|
||||
yStr := fmt.Sprintf("%.1f", y)
|
||||
_, err = ad.adbClient.RunShellCommand(
|
||||
"input", "tap", fmt.Sprintf("%.1f", x), fmt.Sprintf("%.1f", y))
|
||||
return
|
||||
"input", "tap", xStr, yStr)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, fmt.Sprintf("tap <%s, %s> failed", xStr, yStr))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (ad *adbDriver) DoubleTap(x, y int) error {
|
||||
@@ -241,7 +249,10 @@ func (ad *adbDriver) SwipeFloat(fromX, fromY, toX, toY float64, options ...Actio
|
||||
fmt.Sprintf("%.1f", fromX), fmt.Sprintf("%.1f", fromY),
|
||||
fmt.Sprintf("%.1f", toX), fmt.Sprintf("%.1f", toY),
|
||||
)
|
||||
return err
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "swipe failed")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (ad *adbDriver) ForceTouch(x, y int, pressure float64, second ...float64) error {
|
||||
@@ -266,7 +277,10 @@ func (ad *adbDriver) GetPasteboard(contentType PasteboardType) (raw *bytes.Buffe
|
||||
func (ad *adbDriver) SendKeys(text string, options ...ActionOption) (err error) {
|
||||
// adb shell input text <text>
|
||||
_, err = ad.adbClient.RunShellCommand("input", "text", text)
|
||||
return
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "send keys failed")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (ad *adbDriver) Input(text string, options ...ActionOption) (err error) {
|
||||
@@ -382,7 +396,7 @@ func (ad *adbDriver) GetForegroundApp() (app AppInfo, err error) {
|
||||
output, err := ad.adbClient.RunShellCommand("dumpsys", "activity", "activities")
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msg("failed to dumpsys activities")
|
||||
return AppInfo{}, errors.Wrap(code.AndroidShellExecError, err.Error())
|
||||
return AppInfo{}, errors.Wrap(err, "dumpsys activities failed")
|
||||
}
|
||||
|
||||
lines := strings.Split(string(output), "\n")
|
||||
|
||||
@@ -163,7 +163,7 @@ func (ud *uiaDriver) WindowSize() (size Size, err error) {
|
||||
// register(getHandler, new GetDeviceSize("/wd/hub/session/:sessionId/window/:windowHandle/size"))
|
||||
var rawResp rawResponse
|
||||
if rawResp, err = ud.httpGET("/session", ud.sessionId, "window/:windowHandle/size"); err != nil {
|
||||
return Size{}, err
|
||||
return Size{}, errors.Wrap(err, "get window size failed with uiautomator2")
|
||||
}
|
||||
reply := new(struct{ Value struct{ Size } })
|
||||
if err = json.Unmarshal(rawResp, reply); err != nil {
|
||||
|
||||
@@ -86,7 +86,7 @@ func NewDriverExt(device Device, driver WebDriver) (dExt *DriverExt, err error)
|
||||
// get device window size
|
||||
dExt.windowSize, err = dExt.Driver.WindowSize()
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(err, "failed to get windows size")
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if dExt.OCRService, err = newVEDEMOCRService(); err != nil {
|
||||
|
||||
@@ -137,7 +137,7 @@ func (wd *wdaDriver) WindowSize() (size Size, err error) {
|
||||
// [[FBRoute GET:@"/window/size"] respondWithTarget:self action:@selector(handleGetWindowSize:)]
|
||||
var rawResp rawResponse
|
||||
if rawResp, err = wd.httpGET("/session", wd.sessionId, "/window/size"); err != nil {
|
||||
return Size{}, err
|
||||
return Size{}, errors.Wrap(err, "get window size failed with wda")
|
||||
}
|
||||
reply := new(struct{ Value struct{ Size } })
|
||||
if err = json.Unmarshal(rawResp, reply); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user