mirror of
https://github.com/httprunner/httprunner.git
synced 2026-07-07 15:31:23 +08:00
feat: add uixt tool swipe
This commit is contained in:
@@ -1 +1 @@
|
|||||||
v5.0.0-beta-2505211725
|
v5.0.0-beta-2505211747
|
||||||
|
|||||||
@@ -167,10 +167,10 @@ func (ums *MCPServer4XTDriver) addTools() {
|
|||||||
|
|
||||||
// Swipe Tool
|
// Swipe Tool
|
||||||
swipeParams := append(
|
swipeParams := append(
|
||||||
[]mcp.ToolOption{mcp.WithDescription("Swipes on the device screen from one point to another.")},
|
[]mcp.ToolOption{mcp.WithDescription("Swipe on the screen")},
|
||||||
commonToolOptions...,
|
commonToolOptions...,
|
||||||
)
|
)
|
||||||
swipeParams = append(swipeParams, generateMCPOptions(types.DragRequest{})...)
|
swipeParams = append(swipeParams, generateMCPOptions(types.SwipeRequest{})...)
|
||||||
swipeTool := mcp.NewTool("swipe", swipeParams...)
|
swipeTool := mcp.NewTool("swipe", swipeParams...)
|
||||||
ums.mcpServer.AddTool(swipeTool, ums.handleSwipe)
|
ums.mcpServer.AddTool(swipeTool, ums.handleSwipe)
|
||||||
ums.tools = append(ums.tools, swipeTool)
|
ums.tools = append(ums.tools, swipeTool)
|
||||||
@@ -354,22 +354,54 @@ func (ums *MCPServer4XTDriver) handleSwipe(ctx context.Context, request mcp.Call
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
var swipeReq types.DragRequest
|
var swipeReq types.SwipeRequest
|
||||||
if err := mapToStruct(request.Params.Arguments, &swipeReq); err != nil {
|
if err := mapToStruct(request.Params.Arguments, &swipeReq); err != nil {
|
||||||
return mcp.NewToolResultError("parse parameters error: " + err.Error()), nil
|
return mcp.NewToolResultError("parse parameters error: " + err.Error()), nil
|
||||||
}
|
}
|
||||||
actionOptions := []option.ActionOption{}
|
|
||||||
if swipeReq.Duration > 0 {
|
// enum direction: up, down, left, right
|
||||||
actionOptions = append(actionOptions, option.WithDuration(swipeReq.Duration/1000.0))
|
switch swipeReq.Direction {
|
||||||
|
case "up":
|
||||||
|
err = driverExt.Swipe(0.5, 0.5, 0.5, 0.1)
|
||||||
|
case "down":
|
||||||
|
err = driverExt.Swipe(0.5, 0.5, 0.5, 0.9)
|
||||||
|
case "left":
|
||||||
|
err = driverExt.Swipe(0.5, 0.5, 0.1, 0.5)
|
||||||
|
case "right":
|
||||||
|
err = driverExt.Swipe(0.5, 0.5, 0.9, 0.5)
|
||||||
|
default:
|
||||||
|
return mcp.NewToolResultError(fmt.Sprintf("get unexpected swipe direction: %s", swipeReq.Direction)), nil
|
||||||
}
|
}
|
||||||
err = driverExt.Swipe(swipeReq.FromX, swipeReq.FromY,
|
if err != nil {
|
||||||
swipeReq.ToX, swipeReq.ToY, actionOptions...)
|
return mcp.NewToolResultError("Swipe failed: " + err.Error()), nil
|
||||||
|
}
|
||||||
|
return mcp.NewToolResultText(
|
||||||
|
fmt.Sprintf("swipe %s success", swipeReq.Direction),
|
||||||
|
), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// handleDrag handles the drag tool call.
|
||||||
|
func (ums *MCPServer4XTDriver) handleDrag(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
|
||||||
|
driverExt, err := ums.setupXTDriver(ctx, request.Params.Arguments)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
var dragReq types.DragRequest
|
||||||
|
if err := mapToStruct(request.Params.Arguments, &dragReq); err != nil {
|
||||||
|
return mcp.NewToolResultError("parse parameters error: " + err.Error()), nil
|
||||||
|
}
|
||||||
|
actionOptions := []option.ActionOption{}
|
||||||
|
if dragReq.Duration > 0 {
|
||||||
|
actionOptions = append(actionOptions, option.WithDuration(dragReq.Duration/1000.0))
|
||||||
|
}
|
||||||
|
err = driverExt.Swipe(dragReq.FromX, dragReq.FromY,
|
||||||
|
dragReq.ToX, dragReq.ToY, actionOptions...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return mcp.NewToolResultError("Swipe failed: " + err.Error()), nil
|
return mcp.NewToolResultError("Swipe failed: " + err.Error()), nil
|
||||||
}
|
}
|
||||||
return mcp.NewToolResultText(
|
return mcp.NewToolResultText(
|
||||||
fmt.Sprintf("swipe (%f,%f)->(%f,%f) success",
|
fmt.Sprintf("swipe (%f,%f)->(%f,%f) success",
|
||||||
swipeReq.FromX, swipeReq.FromY, swipeReq.ToX, swipeReq.ToY),
|
dragReq.FromX, dragReq.FromY, dragReq.ToX, dragReq.ToY),
|
||||||
), nil
|
), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,10 @@ type DragRequest struct {
|
|||||||
PressDuration float64 `json:"press_duration" desc:"Press duration in milliseconds (optional)"`
|
PressDuration float64 `json:"press_duration" desc:"Press duration in milliseconds (optional)"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type SwipeRequest struct {
|
||||||
|
Direction string `json:"direction" binding:"required" desc:"The direction of the swipe. Supported directions: up, down, left, right"`
|
||||||
|
}
|
||||||
|
|
||||||
type AppClearRequest struct {
|
type AppClearRequest struct {
|
||||||
PackageName string `json:"packageName" binding:"required"`
|
PackageName string `json:"packageName" binding:"required"`
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user