mirror of
https://github.com/httprunner/httprunner.git
synced 2026-05-31 13:29:35 +08:00
change: convertToAbsolutePoint, convertToAbsoluteCoordinates
This commit is contained in:
@@ -315,11 +315,9 @@ func (ad *ADBDriver) TapAbsXY(x, y float64, opts ...option.ActionOption) error {
|
||||
func (ad *ADBDriver) DoubleTap(x, y float64, opts ...option.ActionOption) error {
|
||||
var err error
|
||||
actionOptions := option.NewActionOptions(opts...)
|
||||
if actionOptions.Relative {
|
||||
x, y, err = convertToAbsolutePoint(ad, x, y)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
x, y, err = convertToAbsolutePoint(ad, x, y)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
x, y = actionOptions.ApplyOffset(x, y)
|
||||
|
||||
@@ -362,11 +360,9 @@ func (ad *ADBDriver) TouchAndHold(x, y float64, opts ...option.ActionOption) (er
|
||||
|
||||
func (ad *ADBDriver) Drag(fromX, fromY, toX, toY float64, opts ...option.ActionOption) (err error) {
|
||||
actionOptions := option.NewActionOptions(opts...)
|
||||
if actionOptions.Relative {
|
||||
fromX, fromY, toX, toY, err = convertToAbsoluteCoordinates(ad, fromX, fromY, toX, toY)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fromX, fromY, toX, toY, err = convertToAbsoluteCoordinates(ad, fromX, fromY, toX, toY)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
duration := 200.0
|
||||
@@ -392,12 +388,9 @@ func (ad *ADBDriver) Drag(fromX, fromY, toX, toY float64, opts ...option.ActionO
|
||||
|
||||
func (ad *ADBDriver) Swipe(fromX, fromY, toX, toY float64, opts ...option.ActionOption) error {
|
||||
var err error
|
||||
actionOptions := option.NewActionOptions(opts...)
|
||||
if actionOptions.Relative {
|
||||
fromX, fromY, toX, toY, err = convertToAbsoluteCoordinates(ad, fromX, fromY, toX, toY)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fromX, fromY, toX, toY, err = convertToAbsoluteCoordinates(ad, fromX, fromY, toX, toY)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// adb shell input swipe fromX fromY toX toY
|
||||
|
||||
@@ -255,11 +255,9 @@ func (ud *UIA2Driver) Orientation() (orientation types.Orientation, err error) {
|
||||
func (ud *UIA2Driver) DoubleTap(x, y float64, opts ...option.ActionOption) error {
|
||||
var err error
|
||||
actionOptions := option.NewActionOptions(opts...)
|
||||
if actionOptions.Relative {
|
||||
x, y, err = convertToAbsolutePoint(ud, x, y)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
x, y, err = convertToAbsolutePoint(ud, x, y)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
x, y = actionOptions.ApplyOffset(x, y)
|
||||
|
||||
@@ -351,12 +349,9 @@ func (ud *UIA2Driver) TouchAndHold(x, y float64, opts ...option.ActionOption) (e
|
||||
// steps, the swipe will take around 0.5 seconds to complete.
|
||||
func (ud *UIA2Driver) Drag(fromX, fromY, toX, toY float64, opts ...option.ActionOption) error {
|
||||
var err error
|
||||
actionOptions := option.NewActionOptions(opts...)
|
||||
if actionOptions.Relative {
|
||||
fromX, fromY, toX, toY, err = convertToAbsoluteCoordinates(ud, fromX, fromY, toX, toY)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fromX, fromY, toX, toY, err = convertToAbsoluteCoordinates(ud, fromX, fromY, toX, toY)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
data := map[string]interface{}{
|
||||
"startX": fromX,
|
||||
@@ -381,11 +376,9 @@ func (ud *UIA2Driver) Swipe(fromX, fromY, toX, toY float64, opts ...option.Actio
|
||||
// register(postHandler, new Swipe("/wd/hub/session/:sessionId/touch/perform"))
|
||||
var err error
|
||||
actionOptions := option.NewActionOptions(opts...)
|
||||
if actionOptions.Relative {
|
||||
fromX, fromY, toX, toY, err = convertToAbsoluteCoordinates(ud, fromX, fromY, toX, toY)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fromX, fromY, toX, toY, err = convertToAbsoluteCoordinates(ud, fromX, fromY, toX, toY)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
duration := 200.0
|
||||
|
||||
@@ -40,48 +40,62 @@ func convertToAbsoluteScope(driver IDriver, opts ...option.ActionOption) []optio
|
||||
}
|
||||
|
||||
func convertToAbsolutePoint(driver IDriver, x, y float64) (absX, absY float64, err error) {
|
||||
if !assertRelative(x) || !assertRelative(y) {
|
||||
err = errors.Wrap(code.InvalidCaseError,
|
||||
fmt.Sprintf("x(%f), y(%f) must be less than 1", x, y))
|
||||
return
|
||||
// absolute coordinates
|
||||
if x > 1 || y > 1 {
|
||||
return x, y, nil
|
||||
}
|
||||
|
||||
windowSize, err := driver.WindowSize()
|
||||
if err != nil {
|
||||
err = errors.Wrap(code.DeviceGetInfoError, err.Error())
|
||||
return
|
||||
// relative coordinates
|
||||
if assertRelative(x) && assertRelative(y) {
|
||||
windowSize, err := driver.WindowSize()
|
||||
if err != nil {
|
||||
err = errors.Wrap(code.DeviceGetInfoError, err.Error())
|
||||
return 0, 0, err
|
||||
}
|
||||
|
||||
absX = math.Round(float64(windowSize.Width)*x*10) / 10
|
||||
absY = math.Round(float64(windowSize.Height)*y*10) / 10
|
||||
return absX, absY, nil
|
||||
}
|
||||
|
||||
absX = math.Round(float64(windowSize.Width)*x*10) / 10
|
||||
absY = math.Round(float64(windowSize.Height)*y*10) / 10
|
||||
// invalid coordinates
|
||||
err = errors.Wrap(code.InvalidCaseError,
|
||||
fmt.Sprintf("invalid coordinates x(%f), y(%f)", x, y))
|
||||
return
|
||||
}
|
||||
|
||||
func convertToAbsoluteCoordinates(driver IDriver, fromX, fromY, toX, toY float64) (
|
||||
absFromX, absFromY, absToX, absToY float64, err error) {
|
||||
|
||||
if !assertRelative(fromX) || !assertRelative(fromY) ||
|
||||
!assertRelative(toX) || !assertRelative(toY) {
|
||||
err = errors.Wrap(code.InvalidCaseError,
|
||||
fmt.Sprintf("fromX(%f), fromY(%f), toX(%f), toY(%f) must be less than 1",
|
||||
fromX, fromY, toX, toY))
|
||||
return
|
||||
// absolute coordinates
|
||||
if fromX > 1 || toX > 1 || fromY > 1 || toY > 1 {
|
||||
return fromX, fromY, toX, toY, nil
|
||||
}
|
||||
|
||||
windowSize, err := driver.WindowSize()
|
||||
if err != nil {
|
||||
err = errors.Wrap(code.DeviceGetInfoError, err.Error())
|
||||
return
|
||||
// relative coordinates
|
||||
if assertRelative(fromX) && assertRelative(fromY) &&
|
||||
assertRelative(toX) && assertRelative(toY) {
|
||||
windowSize, err := driver.WindowSize()
|
||||
if err != nil {
|
||||
err = errors.Wrap(code.DeviceGetInfoError, err.Error())
|
||||
return 0, 0, 0, 0, err
|
||||
}
|
||||
width := windowSize.Width
|
||||
height := windowSize.Height
|
||||
|
||||
absFromX = float64(width) * fromX
|
||||
absFromY = float64(height) * fromY
|
||||
absToX = float64(width) * toX
|
||||
absToY = float64(height) * toY
|
||||
|
||||
return absFromX, absFromY, absToX, absToY, nil
|
||||
}
|
||||
width := windowSize.Width
|
||||
height := windowSize.Height
|
||||
|
||||
absFromX = float64(width) * fromX
|
||||
absFromY = float64(height) * fromY
|
||||
absToX = float64(width) * toX
|
||||
absToY = float64(height) * toY
|
||||
|
||||
return absFromX, absFromY, absToX, absToY, nil
|
||||
// invalid coordinates
|
||||
err = errors.Wrap(code.InvalidCaseError,
|
||||
fmt.Sprintf("invalid coordinates fromX(%f), fromY(%f), toX(%f), toY(%f)",
|
||||
fromX, fromY, toX, toY))
|
||||
return
|
||||
}
|
||||
|
||||
func assertRelative(p float64) bool {
|
||||
|
||||
@@ -177,11 +177,9 @@ func (hd *HDCDriver) Drag(fromX, fromY, toX, toY float64, opts ...option.ActionO
|
||||
func (hd *HDCDriver) Swipe(fromX, fromY, toX, toY float64, opts ...option.ActionOption) error {
|
||||
var err error
|
||||
actionOptions := option.NewActionOptions(opts...)
|
||||
if actionOptions.Relative {
|
||||
fromX, fromY, toX, toY, err = convertToAbsoluteCoordinates(hd, fromX, fromY, toX, toY)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fromX, fromY, toX, toY, err = convertToAbsoluteCoordinates(hd, fromX, fromY, toX, toY)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
duration := 200
|
||||
|
||||
@@ -615,11 +615,9 @@ func (wd *WDADriver) DoubleTap(x, y float64, opts ...option.ActionOption) error
|
||||
// [[FBRoute POST:@"/wda/doubleTap"] respondWithTarget:self action:@selector(handleDoubleTapCoordinate:)]
|
||||
var err error
|
||||
actionOptions := option.NewActionOptions(opts...)
|
||||
if actionOptions.Relative {
|
||||
x, y, err = convertToAbsolutePoint(wd, x, y)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
x, y, err = convertToAbsolutePoint(wd, x, y)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
x, y = actionOptions.ApplyOffset(x, y)
|
||||
|
||||
@@ -647,12 +645,9 @@ func (wd *WDADriver) TouchAndHold(x, y float64, opts ...option.ActionOption) (er
|
||||
func (wd *WDADriver) Drag(fromX, fromY, toX, toY float64, opts ...option.ActionOption) error {
|
||||
// [[FBRoute POST:@"/wda/dragfromtoforduration"] respondWithTarget:self action:@selector(handleDragCoordinate:)]
|
||||
var err error
|
||||
actionOptions := option.NewActionOptions(opts...)
|
||||
if actionOptions.Relative {
|
||||
fromX, fromY, toX, toY, err = convertToAbsoluteCoordinates(wd, fromX, fromY, toX, toY)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fromX, fromY, toX, toY, err = convertToAbsoluteCoordinates(wd, fromX, fromY, toX, toY)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
fromX = wd.toScale(fromX)
|
||||
fromY = wd.toScale(fromY)
|
||||
|
||||
@@ -19,7 +19,6 @@ type ActionOptions struct {
|
||||
Direction interface{} `json:"direction,omitempty" yaml:"direction,omitempty"` // used by swipe to tap text or app
|
||||
Timeout int `json:"timeout,omitempty" yaml:"timeout,omitempty"` // TODO: wait timeout in seconds for mobile action
|
||||
Frequency int `json:"frequency,omitempty" yaml:"frequency,omitempty"`
|
||||
Relative bool `json:"relative,omitempty" yaml:"relative,omitempty"` // use relative coordinate
|
||||
|
||||
ScreenOptions
|
||||
|
||||
@@ -56,9 +55,6 @@ func (o *ActionOptions) Options() []ActionOption {
|
||||
if o.Steps != 0 {
|
||||
options = append(options, WithSteps(o.Steps))
|
||||
}
|
||||
if o.Relative {
|
||||
options = append(options, WithRelative(true))
|
||||
}
|
||||
|
||||
switch v := o.Direction.(type) {
|
||||
case string:
|
||||
@@ -260,13 +256,6 @@ func WithDirection(direction string) ActionOption {
|
||||
}
|
||||
}
|
||||
|
||||
// WithRelative set relative coordinate, (0, 0) is the top-left corner of the screen
|
||||
func WithRelative(relative bool) ActionOption {
|
||||
return func(o *ActionOptions) {
|
||||
o.Relative = relative
|
||||
}
|
||||
}
|
||||
|
||||
// WithCustomDirection inputs sx, sy, ex, ey
|
||||
func WithCustomDirection(sx, sy, ex, ey float64) ActionOption {
|
||||
return func(o *ActionOptions) {
|
||||
|
||||
Reference in New Issue
Block a user