feat: 优化ext getDriver和GetDevice策略

This commit is contained in:
余泓铮 2025-02-25 17:53:11 +08:00
parent ebdd676e61
commit 1094d1d95e
5 changed files with 15 additions and 12 deletions

View File

@ -16,7 +16,7 @@ type IStubDriver interface {
LogoutNoneUI(packageName string) error LogoutNoneUI(packageName string) error
} }
func NewXTDriver(driver uixt.IDriver, opts ...ai.AIServiceOption) *XTDriver { func NewXTDriver(driver IStubDriver, opts ...ai.AIServiceOption) *XTDriver {
services := ai.NewAIService(opts...) services := ai.NewAIService(opts...)
driverExt := &XTDriver{ driverExt := &XTDriver{
XTDriver: &uixt.XTDriver{ XTDriver: &uixt.XTDriver{
@ -24,11 +24,13 @@ func NewXTDriver(driver uixt.IDriver, opts ...ai.AIServiceOption) *XTDriver {
CVService: services.ICVService, CVService: services.ICVService,
LLMService: services.ILLMService, LLMService: services.ILLMService,
}, },
IStubDriver: driver,
} }
return driverExt return driverExt
} }
type XTDriver struct { type XTDriver struct {
IStubDriver
*uixt.XTDriver *uixt.XTDriver
} }
@ -48,7 +50,7 @@ func (dExt *XTDriver) Install(filePath string, opts ...option.InstallOption) err
if _, ok := dExt.GetDevice().(*uixt.AndroidDevice); ok { if _, ok := dExt.GetDevice().(*uixt.AndroidDevice); ok {
stopChan := make(chan struct{}) stopChan := make(chan struct{})
go func() { go func() {
ticker := time.NewTicker(3 * time.Second) ticker := time.NewTicker(5 * time.Second)
defer ticker.Stop() defer ticker.Stop()
for { for {
@ -56,6 +58,7 @@ func (dExt *XTDriver) Install(filePath string, opts ...option.InstallOption) err
case <-ticker.C: case <-ticker.C:
go func() { go func() {
_ = dExt.TapByOCR("^(.*无视风险安装|正在扫描.*|我知道了|稍后继续|稍后提醒|继续安装|知道了|确定|继续|完成|点击继续安装|继续安装旧版本|替换|.*正在安装|安装|授权本次安装|重新安装|仍要安装|更多详情|我知道了|已了解此应用未经检测.)$", option.WithRegex(true), option.WithIgnoreNotFoundError(true)) _ = dExt.TapByOCR("^(.*无视风险安装|正在扫描.*|我知道了|稍后继续|稍后提醒|继续安装|知道了|确定|继续|完成|点击继续安装|继续安装旧版本|替换|.*正在安装|安装|授权本次安装|重新安装|仍要安装|更多详情|我知道了|已了解此应用未经检测.)$", option.WithRegex(true), option.WithIgnoreNotFoundError(true))
//_ = dExt.IDriver.TapByHierarchy("^(.*无视风险安装|正在扫描.*|我知道了|稍后继续|稍后提醒|继续安装|知道了|确定|继续|完成|点击继续安装|继续安装旧版本|替换|.*正在安装|安装|授权本次安装|重新安装|仍要安装|更多详情|我知道了|已了解此应用未经检测.)$", option.WithRegex(true), option.WithIgnoreNotFoundError(true))
}() }()
case <-stopChan: case <-stopChan:
log.Info().Msg("install complete") log.Info().Msg("install complete")

View File

@ -25,7 +25,7 @@ func (r *Router) appInfoHandler(c *gin.Context) {
RenderErrorValidateRequest(c, err) RenderErrorValidateRequest(c, err)
return return
} }
device, err := GetDevice(c) device, err := r.GetDevice(c)
if err != nil { if err != nil {
return return
} }

View File

@ -19,7 +19,7 @@ func (p RouterBaseMethod) GetDriver(c *gin.Context) (driverExt uixt.IXTDriver, e
var device uixt.IDevice var device uixt.IDevice
var driver uixt.IDriver var driver uixt.IDriver
if !exists { if !exists {
device, err = GetDevice(c) device, err = p.GetDevice(c)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -39,7 +39,7 @@ func (p RouterBaseMethod) GetDriver(c *gin.Context) (driverExt uixt.IXTDriver, e
return driverExt, nil return driverExt, nil
} }
func GetDevice(c *gin.Context) (device uixt.IDevice, err error) { func (p RouterBaseMethod) GetDevice(c *gin.Context) (device uixt.IDevice, err error) {
platform := c.Param("platform") platform := c.Param("platform")
serial := c.Param("serial") serial := c.Param("serial")
if serial == "" { if serial == "" {
@ -96,7 +96,7 @@ func RenderError(c *gin.Context, err error) {
c.JSON(http.StatusInternalServerError, c.JSON(http.StatusInternalServerError,
HttpResponse{ HttpResponse{
Code: code.GetErrorCode(err), Code: code.GetErrorCode(err),
Message: err.Error(), Message: "grey " + err.Error(),
}, },
) )
c.Abort() c.Abort()
@ -111,7 +111,7 @@ func RenderErrorInitDriver(c *gin.Context, err error) {
c.JSON(http.StatusInternalServerError, c.JSON(http.StatusInternalServerError,
HttpResponse{ HttpResponse{
Code: errCode, Code: errCode,
Message: "init driver failed", Message: "grey init driver failed",
}, },
) )
c.Abort() c.Abort()
@ -121,7 +121,7 @@ func RenderErrorValidateRequest(c *gin.Context, err error) {
log.Error().Err(err).Msg("validate request failed") log.Error().Err(err).Msg("validate request failed")
c.JSON(http.StatusBadRequest, HttpResponse{ c.JSON(http.StatusBadRequest, HttpResponse{
Code: code.GetErrorCode(code.InvalidParamError), Code: code.GetErrorCode(code.InvalidParamError),
Message: fmt.Sprintf("validate request param failed: %s", err.Error()), Message: fmt.Sprintf("grey validate request param failed: %s", err.Error()),
}) })
c.Abort() c.Abort()
} }

View File

@ -1,9 +1,8 @@
package server_ext package server_ext
import ( import (
"strings"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"strings"
"github.com/httprunner/httprunner/v5/pkg/uixt" "github.com/httprunner/httprunner/v5/pkg/uixt"
"github.com/httprunner/httprunner/v5/pkg/uixt/ai" "github.com/httprunner/httprunner/v5/pkg/uixt/ai"
@ -16,9 +15,9 @@ func (p RouterBaseMethodExt) GetDriver(c *gin.Context) (driverExt uixt.IXTDriver
serial := c.Param("serial") serial := c.Param("serial")
deviceObj, exists := c.Get("device") deviceObj, exists := c.Get("device")
var device uixt.IDevice var device uixt.IDevice
var driver uixt.IDriver var driver driver_ext.IStubDriver
if !exists { if !exists {
device, err = server.GetDevice(c) device, err = p.GetDevice(c)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -29,6 +29,7 @@ type RouterBaseMethod struct {
type IRouterBaseMethod interface { type IRouterBaseMethod interface {
GetDriver(c *gin.Context) (driver uixt.IXTDriver, err error) GetDriver(c *gin.Context) (driver uixt.IXTDriver, err error)
GetDevice(c *gin.Context) (driver uixt.IDevice, err error)
} }
func (r *Router) Init() { func (r *Router) Init() {