mirror of
https://github.com/httprunner/httprunner.git
synced 2026-05-12 02:21:29 +08:00
fix: duplicate getting screen orientation
This commit is contained in:
@@ -1 +1 @@
|
||||
v5.0.0+2412081202
|
||||
v5.0.0+2412081242
|
||||
|
||||
@@ -143,18 +143,19 @@ func (ad *adbDriver) getWindowSize() (size Size, err error) {
|
||||
}
|
||||
|
||||
func (ad *adbDriver) WindowSize() (size Size, err error) {
|
||||
if ad.windowSize != nil {
|
||||
size = *ad.windowSize
|
||||
} else {
|
||||
size, err = ad.getWindowSize()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
ad.windowSize = &size
|
||||
if !ad.windowSize.IsNil() {
|
||||
// use cached window size
|
||||
return ad.windowSize, nil
|
||||
}
|
||||
|
||||
size, err = ad.getWindowSize()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
orientation, err2 := ad.Orientation()
|
||||
if err2 != nil {
|
||||
// Notice: do not return err if get window orientation failed
|
||||
orientation = OrientationPortrait
|
||||
log.Warn().Err(err2).Msgf(
|
||||
"get window orientation failed, use default %s", orientation)
|
||||
@@ -162,7 +163,8 @@ func (ad *adbDriver) WindowSize() (size Size, err error) {
|
||||
if orientation != OrientationPortrait {
|
||||
size.Width, size.Height = size.Height, size.Width
|
||||
}
|
||||
// Notice: do not return err if get window orientation failed
|
||||
|
||||
ad.windowSize = size // cache window size
|
||||
return size, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -223,21 +223,21 @@ func (ud *uiaDriver) BatteryInfo() (batteryInfo BatteryInfo, err error) {
|
||||
|
||||
func (ud *uiaDriver) WindowSize() (size Size, err error) {
|
||||
// register(getHandler, new GetDeviceSize("/wd/hub/session/:sessionId/window/:windowHandle/size"))
|
||||
if ud.windowSize != nil {
|
||||
size = *ud.windowSize
|
||||
} else {
|
||||
var rawResp rawResponse
|
||||
if rawResp, err = ud.httpGET("/session", ud.session.ID, "window/:windowHandle/size"); err != nil {
|
||||
return Size{}, errors.Wrap(err, "get window size failed by UIA2 request")
|
||||
}
|
||||
reply := new(struct{ Value struct{ Size } })
|
||||
if err = json.Unmarshal(rawResp, reply); err != nil {
|
||||
return Size{}, errors.Wrap(err, "get window size failed by UIA2 response")
|
||||
}
|
||||
size = reply.Value.Size
|
||||
ud.windowSize = &size
|
||||
if !ud.windowSize.IsNil() {
|
||||
// use cached window size
|
||||
return ud.windowSize, nil
|
||||
}
|
||||
|
||||
var rawResp rawResponse
|
||||
if rawResp, err = ud.httpGET("/session", ud.session.ID, "window/:windowHandle/size"); err != nil {
|
||||
return Size{}, errors.Wrap(err, "get window size failed by UIA2 request")
|
||||
}
|
||||
reply := new(struct{ Value struct{ Size } })
|
||||
if err = json.Unmarshal(rawResp, reply); err != nil {
|
||||
return Size{}, errors.Wrap(err, "get window size failed by UIA2 response")
|
||||
}
|
||||
size = reply.Value.Size
|
||||
|
||||
// check orientation
|
||||
orientation, err := ud.Orientation()
|
||||
if err != nil {
|
||||
@@ -247,7 +247,9 @@ func (ud *uiaDriver) WindowSize() (size Size, err error) {
|
||||
if orientation != OrientationPortrait {
|
||||
size.Width, size.Height = size.Height, size.Width
|
||||
}
|
||||
return
|
||||
|
||||
ud.windowSize = size // cache window size
|
||||
return size, nil
|
||||
}
|
||||
|
||||
// PressBack simulates a short press on the BACK button.
|
||||
|
||||
@@ -64,7 +64,7 @@ type Driver struct {
|
||||
|
||||
// cache to avoid repeated query
|
||||
scale float64
|
||||
windowSize *Size
|
||||
windowSize Size
|
||||
driverResults []*DriverResult
|
||||
|
||||
// cache session data
|
||||
|
||||
@@ -5,7 +5,6 @@ import (
|
||||
|
||||
"github.com/httprunner/httprunner/v4/hrp/code"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
func (dExt *DriverExt) Drag(fromX, fromY, toX, toY float64, options ...ActionOption) (err error) {
|
||||
@@ -16,30 +15,15 @@ func (dExt *DriverExt) Drag(fromX, fromY, toX, toY float64, options ...ActionOpt
|
||||
width := windowSize.Width
|
||||
height := windowSize.Height
|
||||
|
||||
orientation, err := dExt.Driver.Orientation()
|
||||
if err != nil {
|
||||
log.Warn().Err(err).Msgf("drag from (%v, %v) to (%v, %v) get orientation failed, use default orientation",
|
||||
fromX, fromY, toX, toY)
|
||||
orientation = OrientationPortrait
|
||||
}
|
||||
|
||||
if !assertRelative(fromX) || !assertRelative(fromY) ||
|
||||
!assertRelative(toX) || !assertRelative(toY) {
|
||||
return fmt.Errorf("fromX(%f), fromY(%f), toX(%f), toY(%f) must be less than 1",
|
||||
fromX, fromY, toX, toY)
|
||||
}
|
||||
// 左转和右转都是"LANDSCAPE"
|
||||
if orientation == OrientationPortrait {
|
||||
fromX = float64(width) * fromX
|
||||
fromY = float64(height) * fromY
|
||||
toX = float64(width) * toX
|
||||
toY = float64(height) * toY
|
||||
} else {
|
||||
fromX = float64(height) * fromX
|
||||
fromY = float64(width) * fromY
|
||||
toX = float64(height) * toX
|
||||
toY = float64(width) * toY
|
||||
}
|
||||
fromX = float64(width) * fromX
|
||||
fromY = float64(height) * fromY
|
||||
toX = float64(width) * toX
|
||||
toY = float64(height) * toY
|
||||
|
||||
return dExt.Driver.Drag(fromX, fromY, toX, toY, options...)
|
||||
}
|
||||
|
||||
@@ -244,6 +244,10 @@ type Size struct {
|
||||
Height int `json:"height"`
|
||||
}
|
||||
|
||||
func (s Size) IsNil() bool {
|
||||
return s.Width == 0 && s.Height == 0
|
||||
}
|
||||
|
||||
type Screen struct {
|
||||
StatusBarSize Size `json:"statusBarSize"`
|
||||
Scale float64 `json:"scale"`
|
||||
|
||||
@@ -187,37 +187,29 @@ func (wd *wdaDriver) BatteryInfo() (batteryInfo BatteryInfo, err error) {
|
||||
|
||||
func (wd *wdaDriver) WindowSize() (size Size, err error) {
|
||||
// [[FBRoute GET:@"/window/size"] respondWithTarget:self action:@selector(handleGetWindowSize:)]
|
||||
if wd.windowSize != nil {
|
||||
size = *wd.windowSize
|
||||
} else {
|
||||
var rawResp rawResponse
|
||||
if rawResp, err = wd.httpGET("/session", wd.session.ID, "/window/size"); err != nil {
|
||||
return Size{}, errors.Wrap(err, "get window size failed by WDA request")
|
||||
}
|
||||
reply := new(struct{ Value struct{ Size } })
|
||||
if err = json.Unmarshal(rawResp, reply); err != nil {
|
||||
return Size{}, errors.Wrap(err, "get window size failed by WDA response")
|
||||
}
|
||||
size = reply.Value.Size
|
||||
scale, err := wd.Scale()
|
||||
if err != nil {
|
||||
return Size{}, errors.Wrap(err, "get window size scale failed")
|
||||
}
|
||||
size.Height = size.Height * int(scale)
|
||||
size.Width = size.Width * int(scale)
|
||||
wd.windowSize = &size
|
||||
if !wd.windowSize.IsNil() {
|
||||
// use cached window size
|
||||
return wd.windowSize, nil
|
||||
}
|
||||
|
||||
// check orientation
|
||||
orientation, err := wd.Orientation()
|
||||
var rawResp rawResponse
|
||||
if rawResp, err = wd.httpGET("/session", wd.session.ID, "/window/size"); err != nil {
|
||||
return Size{}, errors.Wrap(err, "get window size failed by WDA request")
|
||||
}
|
||||
reply := new(struct{ Value struct{ Size } })
|
||||
if err = json.Unmarshal(rawResp, reply); err != nil {
|
||||
return Size{}, errors.Wrap(err, "get window size failed by WDA response")
|
||||
}
|
||||
size = reply.Value.Size
|
||||
scale, err := wd.Scale()
|
||||
if err != nil {
|
||||
log.Warn().Err(err).Msgf("window size get orientation failed, use default orientation")
|
||||
orientation = OrientationPortrait
|
||||
return Size{}, errors.Wrap(err, "get window size scale failed")
|
||||
}
|
||||
if orientation != OrientationPortrait {
|
||||
size.Width, size.Height = size.Height, size.Width
|
||||
}
|
||||
return
|
||||
size.Height = size.Height * int(scale)
|
||||
size.Width = size.Width * int(scale)
|
||||
|
||||
wd.windowSize = size // cache window size
|
||||
return wd.windowSize, nil
|
||||
}
|
||||
|
||||
func (wd *wdaDriver) Screen() (screen Screen, err error) {
|
||||
|
||||
Reference in New Issue
Block a user