fix: examples

This commit is contained in:
lilong.129
2025-06-24 15:36:19 +08:00
parent b1719344c0
commit 4522bb2dbf
3 changed files with 58 additions and 11 deletions

View File

@@ -12,7 +12,6 @@ import (
"github.com/httprunner/httprunner/v5/internal/builtin"
"github.com/httprunner/httprunner/v5/internal/config"
"github.com/httprunner/httprunner/v5/uixt"
"github.com/httprunner/httprunner/v5/uixt/ai"
"github.com/httprunner/httprunner/v5/uixt/option"
"github.com/rs/zerolog/log"
)
@@ -124,14 +123,19 @@ func (bot *LLKGameBot) AnalyzeGameInterface() (*GameElement, error) {
return gameElement, nil
}
// convertToGameElement converts AI query result to GameElement
func convertToGameElement(result *ai.QueryResult) (*GameElement, error) {
// convertToGameElement converts AI execution result to GameElement
func convertToGameElement(result *uixt.AIExecutionResult) (*GameElement, error) {
if result == nil {
return nil, fmt.Errorf("query result is nil")
return nil, fmt.Errorf("AI execution result is nil")
}
if result.QueryResult == nil {
return nil, fmt.Errorf("query result is nil in AI execution result")
}
queryResult := result.QueryResult
// Try direct conversion first
if gameElement, ok := result.Data.(*GameElement); ok {
if gameElement, ok := queryResult.Data.(*GameElement); ok {
return gameElement, nil
}
@@ -140,11 +144,11 @@ func convertToGameElement(result *ai.QueryResult) (*GameElement, error) {
var sourceData interface{}
// Use Data if available, otherwise try Content
if result.Data != nil {
sourceData = result.Data
} else if result.Content != "" {
if queryResult.Data != nil {
sourceData = queryResult.Data
} else if queryResult.Content != "" {
var contentData map[string]interface{}
if err := json.Unmarshal([]byte(result.Content), &contentData); err != nil {
if err := json.Unmarshal([]byte(queryResult.Content), &contentData); err != nil {
return nil, fmt.Errorf("failed to parse JSON from Content: %w", err)
}
sourceData = contentData

View File

@@ -2,6 +2,8 @@ package llk
import (
"context"
"encoding/json"
"fmt"
"os"
"testing"
@@ -13,6 +15,47 @@ import (
"github.com/stretchr/testify/require"
)
// convertToGameElementFromQueryResult converts AI query result to GameElement for testing
func convertToGameElementFromQueryResult(result *ai.QueryResult) (*GameElement, error) {
if result == nil {
return nil, fmt.Errorf("query result is nil")
}
// Try direct conversion first
if gameElement, ok := result.Data.(*GameElement); ok {
return gameElement, nil
}
// Convert to JSON and back for flexible parsing
var gameElement GameElement
var sourceData interface{}
// Use Data if available, otherwise try Content
if result.Data != nil {
sourceData = result.Data
} else if result.Content != "" {
var contentData map[string]interface{}
if err := json.Unmarshal([]byte(result.Content), &contentData); err != nil {
return nil, fmt.Errorf("failed to parse JSON from Content: %w", err)
}
sourceData = contentData
} else {
return nil, fmt.Errorf("no data available in query result")
}
// Convert via JSON marshaling/unmarshaling
jsonBytes, err := json.Marshal(sourceData)
if err != nil {
return nil, fmt.Errorf("failed to marshal result data: %w", err)
}
if err := json.Unmarshal(jsonBytes, &gameElement); err != nil {
return nil, fmt.Errorf("failed to unmarshal to GameElement: %w", err)
}
return &gameElement, nil
}
// hasRequiredEnvVars checks if the required environment variables are set for testing
func hasRequiredEnvVars() bool {
// Check for OpenAI environment variables
@@ -83,7 +126,7 @@ Return JSON with: content, dimensions{rows,cols}, elements[{type,position{row,co
require.NoError(t, err, "Failed to query AI model")
// Convert result using enhanced compatibility logic
gameElement, err := convertToGameElement(result)
gameElement, err := convertToGameElementFromQueryResult(result)
require.NoError(t, err, "Failed to convert query result to GameElement")
require.NotNil(t, gameElement, "GameElement should not be nil")

View File

@@ -1 +1 @@
v5.0.0-beta-2506241525
v5.0.0-beta-2506241536