mirror of
https://github.com/httprunner/httprunner.git
synced 2026-06-25 17:44:02 +08:00
change: fix logs
This commit is contained in:
@@ -1 +1 @@
|
||||
v5.0.0-beta-2506052000
|
||||
v5.0.0-beta-2506052026
|
||||
|
||||
@@ -742,6 +742,7 @@ func (ad *ADBDriver) ForegroundInfo() (app types.AppInfo, err error) {
|
||||
}
|
||||
|
||||
func (ad *ADBDriver) SetIme(imeRegx string) error {
|
||||
log.Info().Str("imeRegx", imeRegx).Msg("ADBDriver.SetIme")
|
||||
imeList := ad.ListIme()
|
||||
ime := ""
|
||||
for _, imeName := range imeList {
|
||||
|
||||
@@ -201,6 +201,7 @@ func (wd *BrowserDriver) CreateNetListener() (*websocket.Conn, error) {
|
||||
}
|
||||
|
||||
func (wd *BrowserDriver) CloseTab(pageIndex int) (err error) {
|
||||
log.Info().Int("pageIndex", pageIndex).Msg("BrowserDriver.CloseTab")
|
||||
data := map[string]interface{}{
|
||||
"page_index": pageIndex,
|
||||
}
|
||||
@@ -210,6 +211,7 @@ func (wd *BrowserDriver) CloseTab(pageIndex int) (err error) {
|
||||
}
|
||||
|
||||
func (wd *BrowserDriver) HoverBySelector(selector string, options ...option.ActionOption) (err error) {
|
||||
log.Info().Str("selector", selector).Msg("BrowserDriver.HoverBySelector")
|
||||
data := map[string]interface{}{
|
||||
"selector": selector,
|
||||
}
|
||||
@@ -222,6 +224,7 @@ func (wd *BrowserDriver) HoverBySelector(selector string, options ...option.Acti
|
||||
}
|
||||
|
||||
func (wd *BrowserDriver) TapBySelector(selector string, options ...option.ActionOption) (err error) {
|
||||
log.Info().Str("selector", selector).Msg("BrowserDriver.TapBySelector")
|
||||
data := map[string]interface{}{
|
||||
"selector": selector,
|
||||
}
|
||||
@@ -234,6 +237,7 @@ func (wd *BrowserDriver) TapBySelector(selector string, options ...option.Action
|
||||
}
|
||||
|
||||
func (wd *BrowserDriver) SecondaryClick(x, y float64) (err error) {
|
||||
log.Info().Float64("x", x).Float64("y", y).Msg("BrowserDriver.SecondaryClick")
|
||||
data := map[string]interface{}{
|
||||
"x": x,
|
||||
"y": y,
|
||||
@@ -243,6 +247,7 @@ func (wd *BrowserDriver) SecondaryClick(x, y float64) (err error) {
|
||||
}
|
||||
|
||||
func (wd *BrowserDriver) SecondaryClickBySelector(selector string, options ...option.ActionOption) (err error) {
|
||||
log.Info().Str("selector", selector).Msg("BrowserDriver.SecondaryClickBySelector")
|
||||
data := map[string]interface{}{
|
||||
"selector": selector,
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ import (
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
func (dExt *XTDriver) StartToGoal(ctx context.Context, text string, opts ...option.ActionOption) error {
|
||||
func (dExt *XTDriver) StartToGoal(ctx context.Context, prompt string, opts ...option.ActionOption) error {
|
||||
options := option.NewActionOptions(opts...)
|
||||
log.Info().Int("max_retry_times", options.MaxRetryTimes).Msg("StartToGoal")
|
||||
var attempt int
|
||||
@@ -34,7 +34,7 @@ func (dExt *XTDriver) StartToGoal(ctx context.Context, text string, opts ...opti
|
||||
default:
|
||||
}
|
||||
|
||||
if err := dExt.AIAction(ctx, text, opts...); err != nil {
|
||||
if err := dExt.AIAction(ctx, prompt, opts...); err != nil {
|
||||
// Check if this is a LLM service request error that should be retried
|
||||
if errors.Is(err, code.LLMRequestServiceError) {
|
||||
log.Warn().Err(err).Int("attempt", attempt).
|
||||
@@ -50,9 +50,11 @@ func (dExt *XTDriver) StartToGoal(ctx context.Context, text string, opts ...opti
|
||||
}
|
||||
}
|
||||
|
||||
func (dExt *XTDriver) AIAction(ctx context.Context, text string, opts ...option.ActionOption) error {
|
||||
func (dExt *XTDriver) AIAction(ctx context.Context, prompt string, opts ...option.ActionOption) error {
|
||||
log.Info().Str("prompt", prompt).Msg("performing AI action")
|
||||
|
||||
// plan next action
|
||||
result, err := dExt.PlanNextAction(ctx, text, opts...)
|
||||
result, err := dExt.PlanNextAction(ctx, prompt, opts...)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -95,7 +97,7 @@ func (dExt *XTDriver) AIAction(ctx context.Context, text string, opts ...option.
|
||||
return nil
|
||||
}
|
||||
|
||||
func (dExt *XTDriver) PlanNextAction(ctx context.Context, text string, opts ...option.ActionOption) (*ai.PlanningResult, error) {
|
||||
func (dExt *XTDriver) PlanNextAction(ctx context.Context, prompt string, opts ...option.ActionOption) (*ai.PlanningResult, error) {
|
||||
if dExt.LLMService == nil {
|
||||
return nil, errors.New("LLM service is not initialized")
|
||||
}
|
||||
@@ -127,7 +129,7 @@ func (dExt *XTDriver) PlanNextAction(ctx context.Context, text string, opts ...o
|
||||
}
|
||||
|
||||
planningOpts := &ai.PlanningOptions{
|
||||
UserInstruction: text,
|
||||
UserInstruction: prompt,
|
||||
Message: &schema.Message{
|
||||
Role: schema.User,
|
||||
MultiContent: []schema.ChatMessagePart{
|
||||
|
||||
@@ -96,6 +96,7 @@ func (dExt *XTDriver) SwipeToTapTexts(texts []string, opts ...option.ActionOptio
|
||||
return errors.New("no text to tap")
|
||||
}
|
||||
|
||||
log.Info().Strs("texts", texts).Msg("swipe to tap texts")
|
||||
opts = append(opts, option.WithMatchOne(true), option.WithRegex(true))
|
||||
actionOptions := option.NewActionOptions(opts...)
|
||||
actionOptions.Identifier = ""
|
||||
@@ -136,6 +137,8 @@ func (dExt *XTDriver) SwipeToTapTexts(texts []string, opts ...option.ActionOptio
|
||||
}
|
||||
|
||||
func (dExt *XTDriver) SwipeToTapApp(appName string, opts ...option.ActionOption) error {
|
||||
log.Info().Str("appName", appName).Msg("swipe to tap app")
|
||||
|
||||
// go to home screen
|
||||
if err := dExt.Home(); err != nil {
|
||||
return errors.Wrap(err, "go to home screen failed")
|
||||
|
||||
@@ -39,7 +39,6 @@ func (t *ToolStartToGoal) Implement() server.ToolHandlerFunc {
|
||||
}
|
||||
|
||||
// Start to goal logic
|
||||
log.Info().Str("prompt", unifiedReq.Prompt).Msg("starting to goal")
|
||||
err = driverExt.StartToGoal(ctx, unifiedReq.Prompt)
|
||||
if err != nil {
|
||||
return mcp.NewToolResultError(fmt.Sprintf("Failed to achieve goal: %s", err.Error())), nil
|
||||
@@ -98,7 +97,6 @@ func (t *ToolAIAction) Implement() server.ToolHandlerFunc {
|
||||
}
|
||||
|
||||
// AI action logic
|
||||
log.Info().Str("prompt", unifiedReq.Prompt).Msg("performing AI action")
|
||||
err = driverExt.AIAction(ctx, unifiedReq.Prompt)
|
||||
if err != nil {
|
||||
return mcp.NewToolResultError(fmt.Sprintf("AI action failed: %s", err.Error())), nil
|
||||
|
||||
@@ -84,7 +84,6 @@ func (t *ToolLaunchApp) Implement() server.ToolHandlerFunc {
|
||||
}
|
||||
|
||||
// Launch app action logic
|
||||
log.Info().Str("packageName", unifiedReq.PackageName).Msg("launching app")
|
||||
err = driverExt.AppLaunch(unifiedReq.PackageName)
|
||||
if err != nil {
|
||||
return mcp.NewToolResultError(fmt.Sprintf("Launch app failed: %s", err.Error())), nil
|
||||
@@ -141,7 +140,6 @@ func (t *ToolTerminateApp) Implement() server.ToolHandlerFunc {
|
||||
}
|
||||
|
||||
// Terminate app action logic
|
||||
log.Info().Str("packageName", unifiedReq.PackageName).Msg("terminating app")
|
||||
success, err := driverExt.AppTerminate(unifiedReq.PackageName)
|
||||
if err != nil {
|
||||
return mcp.NewToolResultError(fmt.Sprintf("Terminate app failed: %s", err.Error())), nil
|
||||
@@ -197,7 +195,6 @@ func (t *ToolAppInstall) Implement() server.ToolHandlerFunc {
|
||||
}
|
||||
|
||||
// App install action logic
|
||||
log.Info().Str("appUrl", unifiedReq.AppUrl).Msg("installing app")
|
||||
err = driverExt.GetDevice().Install(unifiedReq.AppUrl)
|
||||
if err != nil {
|
||||
return mcp.NewToolResultError(fmt.Sprintf("App install failed: %s", err.Error())), nil
|
||||
@@ -253,7 +250,6 @@ func (t *ToolAppUninstall) Implement() server.ToolHandlerFunc {
|
||||
}
|
||||
|
||||
// App uninstall action logic
|
||||
log.Info().Str("packageName", unifiedReq.PackageName).Msg("uninstalling app")
|
||||
err = driverExt.GetDevice().Uninstall(unifiedReq.PackageName)
|
||||
if err != nil {
|
||||
return mcp.NewToolResultError(fmt.Sprintf("App uninstall failed: %s", err.Error())), nil
|
||||
@@ -309,7 +305,6 @@ func (t *ToolAppClear) Implement() server.ToolHandlerFunc {
|
||||
}
|
||||
|
||||
// App clear action logic
|
||||
log.Info().Str("packageName", unifiedReq.PackageName).Msg("clearing app")
|
||||
err = driverExt.AppClear(unifiedReq.PackageName)
|
||||
if err != nil {
|
||||
return mcp.NewToolResultError(fmt.Sprintf("App clear failed: %s", err.Error())), nil
|
||||
|
||||
@@ -8,7 +8,6 @@ import (
|
||||
"github.com/httprunner/httprunner/v5/uixt/types"
|
||||
"github.com/mark3labs/mcp-go/mcp"
|
||||
"github.com/mark3labs/mcp-go/server"
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
// ToolPressButton implements the press_button tool call.
|
||||
@@ -40,7 +39,6 @@ func (t *ToolPressButton) Implement() server.ToolHandlerFunc {
|
||||
}
|
||||
|
||||
// Press button action logic
|
||||
log.Info().Str("button", string(unifiedReq.Button)).Msg("pressing button")
|
||||
err = driverExt.PressButton(types.DeviceButton(unifiedReq.Button))
|
||||
if err != nil {
|
||||
return mcp.NewToolResultError(fmt.Sprintf("Press button failed: %s", err.Error())), nil
|
||||
@@ -91,7 +89,6 @@ func (t *ToolHome) Implement() server.ToolHandlerFunc {
|
||||
}
|
||||
|
||||
// Home action logic
|
||||
log.Info().Msg("pressing home button")
|
||||
err = driverExt.Home()
|
||||
if err != nil {
|
||||
return mcp.NewToolResultError(fmt.Sprintf("Home button press failed: %s", err.Error())), nil
|
||||
@@ -135,7 +132,6 @@ func (t *ToolBack) Implement() server.ToolHandlerFunc {
|
||||
}
|
||||
|
||||
// Back action logic
|
||||
log.Info().Msg("pressing back button")
|
||||
err = driverExt.Back()
|
||||
if err != nil {
|
||||
return mcp.NewToolResultError(fmt.Sprintf("Back button press failed: %s", err.Error())), nil
|
||||
|
||||
@@ -7,7 +7,6 @@ import (
|
||||
"github.com/httprunner/httprunner/v5/uixt/option"
|
||||
"github.com/mark3labs/mcp-go/mcp"
|
||||
"github.com/mark3labs/mcp-go/server"
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
// ToolInput implements the input tool call.
|
||||
@@ -43,7 +42,6 @@ func (t *ToolInput) Implement() server.ToolHandlerFunc {
|
||||
}
|
||||
|
||||
// Input action logic
|
||||
log.Info().Str("text", unifiedReq.Text).Msg("inputting text")
|
||||
err = driverExt.Input(unifiedReq.Text)
|
||||
if err != nil {
|
||||
return mcp.NewToolResultError(fmt.Sprintf("Input failed: %s", err.Error())), nil
|
||||
@@ -97,7 +95,6 @@ func (t *ToolSetIme) Implement() server.ToolHandlerFunc {
|
||||
}
|
||||
|
||||
// Set IME action logic
|
||||
log.Info().Str("ime", unifiedReq.Ime).Msg("setting IME")
|
||||
err = driverExt.SetIme(unifiedReq.Ime)
|
||||
if err != nil {
|
||||
return mcp.NewToolResultError(fmt.Sprintf("Set IME failed: %s", err.Error())), nil
|
||||
|
||||
@@ -129,7 +129,6 @@ func (t *ToolGetSource) Implement() server.ToolHandlerFunc {
|
||||
}
|
||||
|
||||
// Get source action logic
|
||||
log.Info().Str("packageName", unifiedReq.PackageName).Msg("getting source")
|
||||
_, err = driverExt.Source(option.WithProcessName(unifiedReq.PackageName))
|
||||
if err != nil {
|
||||
return mcp.NewToolResultError(fmt.Sprintf("Get source failed: %s", err.Error())), nil
|
||||
|
||||
@@ -331,7 +331,6 @@ func (t *ToolSwipeToTapApp) Implement() server.ToolHandlerFunc {
|
||||
}
|
||||
|
||||
// Swipe to tap app action logic
|
||||
log.Info().Str("appName", unifiedReq.AppName).Msg("swipe to tap app")
|
||||
err = driverExt.SwipeToTapApp(unifiedReq.AppName, opts...)
|
||||
if err != nil {
|
||||
return mcp.NewToolResultError(fmt.Sprintf("Swipe to tap app failed: %s", err.Error())), nil
|
||||
@@ -410,7 +409,6 @@ func (t *ToolSwipeToTapText) Implement() server.ToolHandlerFunc {
|
||||
}
|
||||
|
||||
// Swipe to tap text action logic
|
||||
log.Info().Str("text", unifiedReq.Text).Msg("swipe to tap text")
|
||||
err = driverExt.SwipeToTapTexts([]string{unifiedReq.Text}, opts...)
|
||||
if err != nil {
|
||||
return mcp.NewToolResultError(fmt.Sprintf("Swipe to tap text failed: %s", err.Error())), nil
|
||||
|
||||
@@ -8,7 +8,6 @@ import (
|
||||
"github.com/httprunner/httprunner/v5/uixt/option"
|
||||
"github.com/mark3labs/mcp-go/mcp"
|
||||
"github.com/mark3labs/mcp-go/server"
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
// ToolTapXY implements the tap_xy tool call.
|
||||
@@ -135,8 +134,6 @@ func (t *ToolTapAbsXY) Implement() server.ToolHandlerFunc {
|
||||
}
|
||||
|
||||
// Tap absolute XY action logic
|
||||
log.Info().Float64("x", unifiedReq.X).Float64("y", unifiedReq.Y).Msg("tapping at absolute coordinates")
|
||||
|
||||
err = driverExt.TapAbsXY(unifiedReq.X, unifiedReq.Y, opts...)
|
||||
if err != nil {
|
||||
return mcp.NewToolResultError(fmt.Sprintf("Tap absolute XY failed: %s", err.Error())), nil
|
||||
@@ -221,7 +218,6 @@ func (t *ToolTapByOCR) Implement() server.ToolHandlerFunc {
|
||||
}
|
||||
|
||||
// Tap by OCR action logic
|
||||
log.Info().Str("text", unifiedReq.Text).Msg("tapping by OCR")
|
||||
err = driverExt.TapByOCR(unifiedReq.Text, opts...)
|
||||
if err != nil {
|
||||
return mcp.NewToolResultError(fmt.Sprintf("Tap by OCR failed: %s", err.Error())), nil
|
||||
@@ -287,9 +283,6 @@ func (t *ToolTapByCV) Implement() server.ToolHandlerFunc {
|
||||
opts = append(opts, option.WithPreMarkOperation(true))
|
||||
}
|
||||
|
||||
// Tap by CV action logic
|
||||
log.Info().Msg("tapping by CV")
|
||||
|
||||
// For TapByCV, we need to check if there are UI types in the options
|
||||
// In the original DoAction, it requires ScreenShotWithUITypes to be set
|
||||
// We'll add a basic implementation that triggers CV recognition
|
||||
|
||||
@@ -161,7 +161,6 @@ func (t *ToolSleepRandom) Implement() server.ToolHandlerFunc {
|
||||
}
|
||||
|
||||
// Sleep random action logic
|
||||
log.Info().Floats64("params", unifiedReq.Params).Msg("sleeping for random duration")
|
||||
sleepStrict(time.Now(), getSimulationDuration(unifiedReq.Params))
|
||||
|
||||
return mcp.NewToolResultText(fmt.Sprintf("Successfully slept for random duration with params: %v", unifiedReq.Params)), nil
|
||||
@@ -210,7 +209,6 @@ func (t *ToolClosePopups) Implement() server.ToolHandlerFunc {
|
||||
}
|
||||
|
||||
// Close popups action logic
|
||||
log.Info().Msg("closing popups")
|
||||
err = driverExt.ClosePopupsHandler()
|
||||
if err != nil {
|
||||
return mcp.NewToolResultError(fmt.Sprintf("Close popups failed: %s", err.Error())), nil
|
||||
|
||||
@@ -101,7 +101,6 @@ func (t *ToolSecondaryClick) Implement() server.ToolHandlerFunc {
|
||||
}
|
||||
|
||||
// Secondary click action logic
|
||||
log.Info().Float64("x", unifiedReq.X).Float64("y", unifiedReq.Y).Msg("performing secondary click")
|
||||
err = driverExt.SecondaryClick(unifiedReq.X, unifiedReq.Y)
|
||||
if err != nil {
|
||||
return mcp.NewToolResultError(fmt.Sprintf("Secondary click failed: %s", err.Error())), nil
|
||||
@@ -159,7 +158,6 @@ func (t *ToolHoverBySelector) Implement() server.ToolHandlerFunc {
|
||||
}
|
||||
|
||||
// Hover by selector action logic
|
||||
log.Info().Str("selector", unifiedReq.Selector).Msg("hovering by selector")
|
||||
err = driverExt.HoverBySelector(unifiedReq.Selector)
|
||||
if err != nil {
|
||||
return mcp.NewToolResultError(fmt.Sprintf("Hover by selector failed: %s", err.Error())), nil
|
||||
@@ -215,7 +213,6 @@ func (t *ToolTapBySelector) Implement() server.ToolHandlerFunc {
|
||||
}
|
||||
|
||||
// Tap by selector action logic
|
||||
log.Info().Str("selector", unifiedReq.Selector).Msg("tapping by selector")
|
||||
err = driverExt.TapBySelector(unifiedReq.Selector)
|
||||
if err != nil {
|
||||
return mcp.NewToolResultError(fmt.Sprintf("Tap by selector failed: %s", err.Error())), nil
|
||||
@@ -271,7 +268,6 @@ func (t *ToolSecondaryClickBySelector) Implement() server.ToolHandlerFunc {
|
||||
}
|
||||
|
||||
// Secondary click by selector action logic
|
||||
log.Info().Str("selector", unifiedReq.Selector).Msg("performing secondary click by selector")
|
||||
err = driverExt.SecondaryClickBySelector(unifiedReq.Selector)
|
||||
if err != nil {
|
||||
return mcp.NewToolResultError(fmt.Sprintf("Secondary click by selector failed: %s", err.Error())), nil
|
||||
@@ -332,7 +328,6 @@ func (t *ToolWebCloseTab) Implement() server.ToolHandlerFunc {
|
||||
}
|
||||
|
||||
// Web close tab action logic
|
||||
log.Info().Int("tabIndex", unifiedReq.TabIndex).Msg("closing web tab")
|
||||
browserDriver, ok := driverExt.IDriver.(*BrowserDriver)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("web close tab is only supported for browser drivers")
|
||||
|
||||
Reference in New Issue
Block a user