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