mirror of
https://github.com/httprunner/httprunner.git
synced 2026-09-05 07:26:55 +08:00
refactor: ForegroundInfo
This commit is contained in:
@@ -7,6 +7,7 @@ toolchain go1.23.7
|
|||||||
require (
|
require (
|
||||||
github.com/Masterminds/semver v1.5.0
|
github.com/Masterminds/semver v1.5.0
|
||||||
github.com/andybalholm/brotli v1.0.4
|
github.com/andybalholm/brotli v1.0.4
|
||||||
|
github.com/antchfx/xmlquery v1.4.4
|
||||||
github.com/bytedance/sonic v1.13.2
|
github.com/bytedance/sonic v1.13.2
|
||||||
github.com/charmbracelet/glamour v0.8.0
|
github.com/charmbracelet/glamour v0.8.0
|
||||||
github.com/charmbracelet/huh v0.3.0
|
github.com/charmbracelet/huh v0.3.0
|
||||||
@@ -47,7 +48,6 @@ require (
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/alecthomas/chroma/v2 v2.14.0 // indirect
|
github.com/alecthomas/chroma/v2 v2.14.0 // indirect
|
||||||
github.com/antchfx/xmlquery v1.4.4 // indirect
|
|
||||||
github.com/antchfx/xpath v1.3.3 // indirect
|
github.com/antchfx/xpath v1.3.3 // indirect
|
||||||
github.com/atotto/clipboard v0.1.4 // indirect
|
github.com/atotto/clipboard v0.1.4 // indirect
|
||||||
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
|
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
v5.0.0-250629
|
v5.0.0-250630
|
||||||
|
|||||||
+39
-16
@@ -622,9 +622,13 @@ func (ad *ADBDriver) tapByTextUsingHierarchy(hierarchy *Hierarchy, text string,
|
|||||||
|
|
||||||
func (ud *ADBDriver) TapByXpath(xpath string, opts ...option.ActionOption) (err error) {
|
func (ud *ADBDriver) TapByXpath(xpath string, opts ...option.ActionOption) (err error) {
|
||||||
source, err := ud.Source()
|
source, err := ud.Source()
|
||||||
|
if err != nil {
|
||||||
|
log.Error().Err(err).Msg("failed to get source")
|
||||||
|
return err
|
||||||
|
}
|
||||||
doc, err := xmlquery.Parse(strings.NewReader(source))
|
doc, err := xmlquery.Parse(strings.NewReader(source))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Str("serial", ud.Device.Serial())
|
log.Error().Err(err).Msg("failed to parse source")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
targetNodes := xmlquery.Find(doc, xpath)
|
targetNodes := xmlquery.Find(doc, xpath)
|
||||||
@@ -644,10 +648,12 @@ func (ud *ADBDriver) TapByXpath(xpath string, opts ...option.ActionOption) (err
|
|||||||
|
|
||||||
centerX := float64(x1+x2) / 2
|
centerX := float64(x1+x2) / 2
|
||||||
centerY := float64(y1+y2) / 2
|
centerY := float64(y1+y2) / 2
|
||||||
log.Info().Str("serial", ud.Device.Serial()).Str("xpath", xpath).Str("bounds", bounds).Msg("find node by xpath success")
|
log.Info().Str("xpath", xpath).Str("bounds", bounds).Msg("find node by xpath success")
|
||||||
return ud.TapAbsXY(centerX, centerY, opts...)
|
return ud.TapAbsXY(centerX, centerY, opts...)
|
||||||
}
|
}
|
||||||
return
|
|
||||||
|
log.Error().Str("xpath", xpath).Msg("failed to find node by xpath")
|
||||||
|
return errors.New("failed to find node by xpath")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ad *ADBDriver) searchNodes(nodes []Layout, text string, opts ...option.ActionOption) []Bounds {
|
func (ad *ADBDriver) searchNodes(nodes []Layout, text string, opts ...option.ActionOption) []Bounds {
|
||||||
@@ -756,27 +762,44 @@ func (ad *ADBDriver) GetSession() *DriverSession {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (ad *ADBDriver) ForegroundInfo() (app types.AppInfo, err error) {
|
func (ad *ADBDriver) ForegroundInfo() (app types.AppInfo, err error) {
|
||||||
packageInfo, err := ad.runShellCommand("CLASSPATH=/data/local/tmp/evalite", "app_process", "/", "com.bytedance.iesqa.eval_process.PackageService", "2>/dev/null")
|
// Get foreground app package info using evalite service
|
||||||
|
packageInfo, err := ad.getForegroundPackageInfo()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
packageInfo, err = ad.runShellCommand("CLASSPATH=/data/local/tmp/evalite", "app_process", "/", "com.bytedance.iesqa.eval_process.PackageService", "2>/dev/null")
|
log.Error().Err(err).Msg("failed to get foreground app info")
|
||||||
if err != nil {
|
return app, err
|
||||||
log.Error().Err(err).Str("serial", ad.Device.Serial()).Msg("failed to get foreground app")
|
|
||||||
return app, err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
log.Info().Str("serial", ad.Device.Serial()).Msg("foreground app output: " + packageInfo)
|
|
||||||
if strings.TrimSpace(packageInfo) == "" {
|
// Parse package info JSON
|
||||||
log.Error().Str("serial", ad.Device.Serial()).Msg("foreground app output is empty")
|
packageInfo = strings.TrimSpace(packageInfo)
|
||||||
return app, errors.New("foreground app output is empty")
|
if packageInfo == "" {
|
||||||
|
err = errors.New("foreground app output is empty")
|
||||||
|
log.Error().Err(err).Msg("get foreground app info failed")
|
||||||
|
return app, err
|
||||||
}
|
}
|
||||||
err = json.Unmarshal([]byte(strings.TrimSpace(packageInfo)), &app)
|
if err = json.Unmarshal([]byte(packageInfo), &app); err != nil {
|
||||||
if err != nil {
|
log.Error().Err(err).Str("packageInfo", packageInfo).Msg("failed to parse package info")
|
||||||
log.Error().Err(err).Str("serial", ad.Device.Serial()).Str("packageInfo", packageInfo).Msg("failed to parse package info")
|
|
||||||
return app, err
|
return app, err
|
||||||
}
|
}
|
||||||
return app, nil
|
return app, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// getForegroundPackageInfo executes the evalite service command to get foreground app info
|
||||||
|
func (ad *ADBDriver) getForegroundPackageInfo() (string, error) {
|
||||||
|
const maxRetries = 2
|
||||||
|
var lastErr error
|
||||||
|
for i := 0; i < maxRetries; i++ {
|
||||||
|
packageInfo, err := ad.runShellCommand("CLASSPATH=/data/local/tmp/evalite",
|
||||||
|
"app_process", "/", "com.bytedance.iesqa.eval_process.PackageService", "2>/dev/null")
|
||||||
|
if err == nil {
|
||||||
|
return packageInfo, nil
|
||||||
|
}
|
||||||
|
lastErr = err
|
||||||
|
log.Warn().Err(err).Int("attempt", i+1).Msg("failed to get foreground package info, retrying")
|
||||||
|
}
|
||||||
|
|
||||||
|
return "", lastErr
|
||||||
|
}
|
||||||
|
|
||||||
func (ad *ADBDriver) SetIme(imeRegx string) error {
|
func (ad *ADBDriver) SetIme(imeRegx string) error {
|
||||||
log.Info().Str("imeRegx", imeRegx).Msg("ADBDriver.SetIme")
|
log.Info().Str("imeRegx", imeRegx).Msg("ADBDriver.SetIme")
|
||||||
imeList := ad.ListIme()
|
imeList := ad.ListIme()
|
||||||
|
|||||||
Reference in New Issue
Block a user