feat: add PushImage/ClearImages in IDriver

This commit is contained in:
lilong.129
2025-02-18 19:33:57 +08:00
parent 7b052f0d98
commit 5d91b69603
7 changed files with 104 additions and 4 deletions

View File

@@ -147,6 +147,19 @@ func (d *Device) Usb() (string, error) {
return "", errors.New("does not have attribute: usb")
}
func (d *Device) SdkVersion() (string, error) {
if d.HasAttribute("sdkVersion") {
return d.attrs["sdkVersion"], nil
}
sdkVersion, err := d.RunShellCommand("getprop", "ro.build.version.sdk")
sdkVersion = strings.TrimSpace(sdkVersion)
if err != nil {
return "", errors.New("does not have attribute: sdkVersion")
}
d.attrs["sdkVersion"] = sdkVersion
return sdkVersion, nil
}
func (d *Device) transportId() (string, error) {
if d.HasAttribute("transport_id") {
return d.attrs["transport_id"], nil

View File

@@ -254,7 +254,7 @@ func (dev *AndroidDevice) installCommon(apkPath string, args ...string) error {
}
func (dev *AndroidDevice) Uninstall(packageName string) error {
_, err := dev.Device.RunShellCommand("uninstall", packageName)
_, err := dev.Device.Uninstall(packageName)
return err
}
@@ -339,6 +339,23 @@ func (dev *AndroidDevice) GetPackageInfo(packageName string) (types.AppInfo, err
return appInfo, nil
}
func (dev *AndroidDevice) GetAppInfo(packageName string) (app types.AppInfo, err error) {
packageInfo, err := dev.RunShellCommand(
"CLASSPATH=/data/local/tmp/evalite", "app_process", "/",
"com.bytedance.iesqa.eval_process.PackageService", packageName, "2>/dev/null")
if packageInfo == "" {
return app, nil
}
if err != nil {
return app, err
}
err = json.Unmarshal([]byte(strings.TrimSpace(packageInfo)), &app)
if err != nil {
log.Error().Err(err).Str("packageInfo", packageInfo)
}
return
}
func (dev *AndroidDevice) getPackageVersion(packageName string) (string, error) {
output, err := dev.Device.RunShellCommand("dumpsys", "package", packageName, "|", "grep", "versionName")
if err != nil {

View File

@@ -10,6 +10,7 @@ import (
"io/fs"
"os"
"os/exec"
"path"
"path/filepath"
"regexp"
"strconv"
@@ -423,7 +424,11 @@ func (ad *ADBDriver) Input(text string, opts ...option.ActionOption) error {
return nil
}
// adb shell input text <text>
_, err = ad.runShellCommand("input", "text", text)
return ad.input(text, opts...)
}
func (ad *ADBDriver) input(text string, _ ...option.ActionOption) error {
_, err := ad.runShellCommand("input", "text", text)
if err != nil {
return errors.Wrap(err, "send keys failed")
}
@@ -456,7 +461,7 @@ func (ad *ADBDriver) SendUnicodeKeys(text string, opts ...option.ActionOption) (
log.Warn().Err(err).Msgf("encode text with modified utf7 failed")
return
}
err = ad.Input("\""+strings.ReplaceAll(encodedStr, "\"", "\\\"")+"\"", opts...)
err = ad.input("\""+strings.ReplaceAll(encodedStr, "\"", "\\\"")+"\"", opts...)
return
}
@@ -850,6 +855,29 @@ func (ad *ADBDriver) TearDown() error {
return nil
}
func (ad *ADBDriver) OpenUrl(url string) (err error) {
_, err = ad.runShellCommand(
"am", "start", "-W", "-a", "android.intent.action.VIEW",
"-d", fmt.Sprintf("'%s'", url))
return
}
func (ad *ADBDriver) PushImage(localPath string) error {
remotePath := path.Join("/sdcard/DCIM/Camera/", path.Base(localPath))
if err := ad.Device.PushFile(localPath, remotePath); err != nil {
return err
}
_, _ = ad.Device.RunShellCommand("am", "broadcast",
"-a", "android.intent.action.MEDIA_SCANNER_SCAN_FILE",
"-d", fmt.Sprintf("file://%s", remotePath))
return nil
}
func (ad *ADBDriver) ClearImages() error {
_, _ = ad.Device.RunShellCommand("rm", "-rf", "/sdcard/DCIM/Camera/*")
return nil
}
type ExportPoint struct {
Start int `json:"start" yaml:"start"`
End int `json:"end" yaml:"end"`

View File

@@ -66,6 +66,10 @@ type IDriver interface {
AppTerminate(packageName string) (bool, error)
AppClear(packageName string) error
// image related
PushImage(localPath string) error
ClearImages() error
// triggers the log capture and returns the log entries
StartCaptureLog(identifier ...string) error
StopCaptureLog() (result interface{}, err error)

View File

@@ -287,3 +287,13 @@ func (hd *HDCDriver) SetRotation(rotation types.Rotation) (err error) {
err = types.ErrDriverNotImplemented
return
}
func (hd *HDCDriver) PushImage(localPath string) error {
log.Warn().Msg("PushImage not implemented in HDCDriver")
return nil
}
func (hd *HDCDriver) ClearImages() error {
log.Warn().Msg("ClearImages not implemented in HDCDriver")
return nil
}

View File

@@ -12,6 +12,7 @@ import (
"net/http"
"os"
"os/exec"
"path"
"path/filepath"
"strconv"
"strings"
@@ -926,6 +927,33 @@ func (wd *WDADriver) StartCaptureLog(identifier ...string) error {
return nil
}
func (wd *WDADriver) PushImage(localPath string) error {
localFile, err := os.Open(localPath)
if err != nil {
return err
}
defer localFile.Close()
imageBytes, err := io.ReadAll(localFile)
data := map[string]interface{}{
"file_name": path.Base(localPath),
"file_data": base64.StdEncoding.EncodeToString(imageBytes),
}
if err != nil {
return err
}
_, err = wd.Session.POST(data, "/gtf/albums/add")
return err
}
func (wd *WDADriver) ClearImages() error {
data := map[string]interface{}{}
_, err := wd.Session.POST(data, "/gtf/albums/clear")
return err
}
type wdaResponse struct {
Status int `json:"status"`
SessionID string `json:"sessionId"`