mirror of
https://github.com/httprunner/httprunner.git
synced 2026-07-06 06:51:23 +08:00
add options for GetImage method
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
# Release History
|
# Release History
|
||||||
|
|
||||||
## v4.3.6 (2023-07-31)
|
## v4.3.6-beta (2023-08-01)
|
||||||
|
|
||||||
- feat: support to reset driver (or session only) automatically when UIA2 / WDA crashed or WebDriver request failed
|
- feat: support to reset driver (or session only) automatically when UIA2 / WDA crashed or WebDriver request failed
|
||||||
- feat: `tap_cv` action supports ui type detection and tap
|
- feat: `tap_cv` action supports ui type detection and tap
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
v4.3.5
|
v4.3.6-beta
|
||||||
@@ -110,7 +110,7 @@ func NewDriverExt(device Device, driver WebDriver) (dExt *DriverExt, err error)
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if dExt.ImageService, err = newVEDEMImageService("ocr", "upload", "liveType"); err != nil {
|
if dExt.ImageService, err = newVEDEMImageService(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -160,21 +160,11 @@ func (t OCRTexts) FindTexts(texts []string, options ...ActionOption) (results OC
|
|||||||
return results, nil
|
return results, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func newVEDEMImageService(actions ...string) (*veDEMImageService, error) {
|
func newVEDEMImageService() (*veDEMImageService, error) {
|
||||||
if err := checkEnv(); err != nil {
|
if err := checkEnv(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if len(actions) == 0 {
|
return &veDEMImageService{}, nil
|
||||||
actions = []string{"ocr"}
|
|
||||||
}
|
|
||||||
return &veDEMImageService{
|
|
||||||
actions: actions,
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v *veDEMImageService) WithUITypes(uiTypes ...string) *veDEMImageService {
|
|
||||||
v.uiTypes = uiTypes
|
|
||||||
return v
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// veDEMImageService implements IImageService interface
|
// veDEMImageService implements IImageService interface
|
||||||
@@ -185,19 +175,29 @@ func (v *veDEMImageService) WithUITypes(uiTypes ...string) *veDEMImageService {
|
|||||||
// liveType - get live type
|
// liveType - get live type
|
||||||
// popup - get popup windows
|
// popup - get popup windows
|
||||||
// close - get close popup
|
// close - get close popup
|
||||||
type veDEMImageService struct {
|
// ui - get ui position by type(s)
|
||||||
actions []string
|
type veDEMImageService struct{}
|
||||||
uiTypes []string
|
type (
|
||||||
}
|
actionOptions []string
|
||||||
|
uiTypeOptions []string
|
||||||
|
)
|
||||||
|
|
||||||
func (s *veDEMImageService) GetImage(imageBuf *bytes.Buffer) (imageResult ImageResult, err error) {
|
func (s *veDEMImageService) GetImage(imageBuf *bytes.Buffer, options ...interface{}) (imageResult ImageResult, err error) {
|
||||||
bodyBuf := &bytes.Buffer{}
|
bodyBuf := &bytes.Buffer{}
|
||||||
bodyWriter := multipart.NewWriter(bodyBuf)
|
bodyWriter := multipart.NewWriter(bodyBuf)
|
||||||
for _, action := range s.actions {
|
for _, option := range options {
|
||||||
bodyWriter.WriteField("actions", action)
|
switch ov := option.(type) {
|
||||||
}
|
case actionOptions:
|
||||||
for _, uiType := range s.uiTypes {
|
for _, action := range ov {
|
||||||
bodyWriter.WriteField("uiTypes", uiType)
|
bodyWriter.WriteField("actions", action)
|
||||||
|
}
|
||||||
|
case uiTypeOptions:
|
||||||
|
for _, uiType := range ov {
|
||||||
|
bodyWriter.WriteField("uiTypes", uiType)
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
log.Warn().Interface("option", ov).Msgf("unexpected image service option")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
bodyWriter.WriteField("ocrCluster", "highPrecision")
|
bodyWriter.WriteField("ocrCluster", "highPrecision")
|
||||||
|
|
||||||
@@ -338,7 +338,7 @@ func getLogID(header http.Header) string {
|
|||||||
|
|
||||||
type IImageService interface {
|
type IImageService interface {
|
||||||
// GetImage returns image result including ocr texts, uploaded image url, etc
|
// GetImage returns image result including ocr texts, uploaded image url, etc
|
||||||
GetImage(imageBuf *bytes.Buffer) (imageResult ImageResult, err error)
|
GetImage(imageBuf *bytes.Buffer, options ...interface{}) (imageResult ImageResult, err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetScreenResult takes a screenshot, returns the image recognization result
|
// GetScreenResult takes a screenshot, returns the image recognization result
|
||||||
@@ -346,11 +346,11 @@ func (dExt *DriverExt) GetScreenResult() (screenResult *ScreenResult, err error)
|
|||||||
var bufSource *bytes.Buffer
|
var bufSource *bytes.Buffer
|
||||||
var imagePath string
|
var imagePath string
|
||||||
if bufSource, imagePath, err = dExt.takeScreenShot(
|
if bufSource, imagePath, err = dExt.takeScreenShot(
|
||||||
builtin.GenNameWithTimestamp("%d_ocr")); err != nil {
|
builtin.GenNameWithTimestamp("%d_cv")); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
imageResult, err := dExt.ImageService.GetImage(bufSource)
|
imageResult, err := dExt.ImageService.GetImage(bufSource, actionOptions{"ocr", "upload", "liveType"})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Msg("GetImage from ImageService failed")
|
log.Error().Err(err).Msg("GetImage from ImageService failed")
|
||||||
return
|
return
|
||||||
@@ -495,28 +495,15 @@ func (u UIResults) GetUIResult(options ...ActionOption) (UIResult, error) {
|
|||||||
return uiResults[idx], nil
|
return uiResults[idx], nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// newVEDEMUIService return image service for
|
|
||||||
func newVEDEMUIService(uiTypes []string) (*veDEMImageService, error) {
|
|
||||||
vedemUIService, err := newVEDEMImageService("ui")
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return vedemUIService.WithUITypes(uiTypes...), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (dExt *DriverExt) GetUIResultMap(uiTypes []string) (uiResultMap UIResultMap, err error) {
|
func (dExt *DriverExt) GetUIResultMap(uiTypes []string) (uiResultMap UIResultMap, err error) {
|
||||||
var bufSource *bytes.Buffer
|
var bufSource *bytes.Buffer
|
||||||
var imagePath string
|
var imagePath string
|
||||||
if bufSource, imagePath, err = dExt.takeScreenShot(
|
if bufSource, imagePath, err = dExt.takeScreenShot(
|
||||||
builtin.GenNameWithTimestamp("%d_ocr")); err != nil {
|
builtin.GenNameWithTimestamp("%d_cv")); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
vedemUIService, err := newVEDEMUIService(uiTypes)
|
imageResult, err := dExt.ImageService.GetImage(bufSource, actionOptions{"ui"}, uiTypeOptions(uiTypes))
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
imageResult, err := vedemUIService.GetImage(bufSource)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error().Err(err).Msg("GetImage from ImageService failed")
|
log.Error().Err(err).Msg("GetImage from ImageService failed")
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user