cremote/test-phase3-functionality.sh

243 lines
7.1 KiB
Bash
Executable File

#!/bin/bash
# Phase 3 Functionality Test Script
# Tests form analysis, multiple interactions, and bulk form filling
set -e
echo "=== Phase 3 Functionality Test ==="
echo "Testing form analysis, multiple interactions, and bulk form filling"
# Configuration
DAEMON_PORT=9223
CLIENT_PORT=9223
TEST_FILE="test-phase3-forms.html"
DAEMON_PID=""
CHROME_PID=""
# Cleanup function
cleanup() {
echo "Cleaning up..."
if [ ! -z "$DAEMON_PID" ]; then
echo "Stopping daemon (PID: $DAEMON_PID)"
kill $DAEMON_PID 2>/dev/null || true
wait $DAEMON_PID 2>/dev/null || true
fi
if [ ! -z "$CHROME_PID" ]; then
echo "Stopping Chrome (PID: $CHROME_PID)"
kill $CHROME_PID 2>/dev/null || true
wait $CHROME_PID 2>/dev/null || true
fi
# Clean up any screenshots
rm -f /tmp/phase3-*.png
}
# Set up cleanup trap
trap cleanup EXIT
# Start daemon
echo "Starting daemon on port $DAEMON_PORT..."
./cremotedaemon --port=$DAEMON_PORT --debug &
DAEMON_PID=$!
# Wait for daemon to start
echo "Waiting for daemon to start..."
sleep 3
# Check if daemon is running
if ! kill -0 $DAEMON_PID 2>/dev/null; then
echo "ERROR: Daemon failed to start"
exit 1
fi
echo "Daemon started successfully (PID: $DAEMON_PID)"
# Test 1: Open tab and navigate to test page
echo ""
echo "=== Test 1: Navigation ==="
TAB_ID=$(./cremote open-tab --port=$CLIENT_PORT)
echo "Opened tab: $TAB_ID"
# Get absolute path to test file
TEST_PATH="file://$(pwd)/$TEST_FILE"
echo "Navigating to: $TEST_PATH"
./cremote load-url --tab="$TAB_ID" --url="$TEST_PATH" --port=$CLIENT_PORT
# Take initial screenshot
./cremote screenshot --tab="$TAB_ID" --output="/tmp/phase3-initial.png" --port=$CLIENT_PORT
echo "Initial screenshot saved to /tmp/phase3-initial.png"
# Test 2: Form Analysis
echo ""
echo "=== Test 2: Form Analysis ==="
echo "Analyzing registration form..."
# Test the daemon command directly
echo "Testing analyze-form daemon command..."
FORM_ANALYSIS=$(curl -s -X POST http://localhost:$DAEMON_PORT/command \
-H "Content-Type: application/json" \
-d '{
"action": "analyze-form",
"params": {
"tab": "'$TAB_ID'",
"selector": "#registration-form",
"timeout": "10"
}
}')
echo "Form analysis result:"
echo "$FORM_ANALYSIS" | jq '.'
# Check if analysis was successful
if echo "$FORM_ANALYSIS" | jq -e '.success' > /dev/null; then
echo "✓ Form analysis successful"
# Extract field count
FIELD_COUNT=$(echo "$FORM_ANALYSIS" | jq -r '.data.field_count')
echo "Found $FIELD_COUNT form fields"
# Check if we found expected fields
if [ "$FIELD_COUNT" -gt 5 ]; then
echo "✓ Expected number of fields found"
else
echo "✗ Unexpected field count: $FIELD_COUNT"
fi
else
echo "✗ Form analysis failed"
echo "$FORM_ANALYSIS"
fi
# Test 3: Multiple Interactions
echo ""
echo "=== Test 3: Multiple Interactions ==="
echo "Testing multiple interactions..."
INTERACTIONS_RESULT=$(curl -s -X POST http://localhost:$DAEMON_PORT/command \
-H "Content-Type: application/json" \
-d '{
"action": "interact-multiple",
"params": {
"tab": "'$TAB_ID'",
"interactions": "[
{\"selector\": \"#test-button\", \"action\": \"click\"},
{\"selector\": \"#toggle-button\", \"action\": \"click\"},
{\"selector\": \"#hidden-input\", \"action\": \"fill\", \"value\": \"Test input\"}
]",
"timeout": "10"
}
}')
echo "Multiple interactions result:"
echo "$INTERACTIONS_RESULT" | jq '.'
# Check if interactions were successful
if echo "$INTERACTIONS_RESULT" | jq -e '.success' > /dev/null; then
echo "✓ Multiple interactions successful"
SUCCESS_COUNT=$(echo "$INTERACTIONS_RESULT" | jq -r '.data.success_count')
TOTAL_COUNT=$(echo "$INTERACTIONS_RESULT" | jq -r '.data.total_count')
echo "Successful interactions: $SUCCESS_COUNT/$TOTAL_COUNT"
if [ "$SUCCESS_COUNT" -eq "$TOTAL_COUNT" ]; then
echo "✓ All interactions successful"
else
echo "✗ Some interactions failed"
fi
else
echo "✗ Multiple interactions failed"
echo "$INTERACTIONS_RESULT"
fi
# Take screenshot after interactions
./cremote screenshot --tab="$TAB_ID" --output="/tmp/phase3-after-interactions.png" --port=$CLIENT_PORT
echo "Screenshot after interactions saved to /tmp/phase3-after-interactions.png"
# Test 4: Bulk Form Filling
echo ""
echo "=== Test 4: Bulk Form Filling ==="
echo "Testing bulk form filling..."
BULK_FILL_RESULT=$(curl -s -X POST http://localhost:$DAEMON_PORT/command \
-H "Content-Type: application/json" \
-d '{
"action": "fill-form-bulk",
"params": {
"tab": "'$TAB_ID'",
"form-selector": "#registration-form",
"fields": "{
\"username\": \"testuser123\",
\"email\": \"test@example.com\",
\"password\": \"testpass123\",
\"bio\": \"This is a test bio for Phase 3 testing.\"
}",
"timeout": "10"
}
}')
echo "Bulk form filling result:"
echo "$BULK_FILL_RESULT" | jq '.'
# Check if bulk filling was successful
if echo "$BULK_FILL_RESULT" | jq -e '.success' > /dev/null; then
echo "✓ Bulk form filling successful"
SUCCESS_COUNT=$(echo "$BULK_FILL_RESULT" | jq -r '.data.success_count')
TOTAL_COUNT=$(echo "$BULK_FILL_RESULT" | jq -r '.data.total_count')
echo "Successfully filled fields: $SUCCESS_COUNT/$TOTAL_COUNT"
if [ "$SUCCESS_COUNT" -eq "$TOTAL_COUNT" ]; then
echo "✓ All fields filled successfully"
else
echo "✗ Some fields failed to fill"
fi
else
echo "✗ Bulk form filling failed"
echo "$BULK_FILL_RESULT"
fi
# Take final screenshot
./cremote screenshot --tab="$TAB_ID" --output="/tmp/phase3-final.png" --port=$CLIENT_PORT
echo "Final screenshot saved to /tmp/phase3-final.png"
# Test 5: Contact Form Bulk Fill
echo ""
echo "=== Test 5: Contact Form Bulk Fill ==="
echo "Testing bulk fill on contact form..."
CONTACT_FILL_RESULT=$(curl -s -X POST http://localhost:$DAEMON_PORT/command \
-H "Content-Type: application/json" \
-d '{
"action": "fill-form-bulk",
"params": {
"tab": "'$TAB_ID'",
"form-selector": "#contact-form",
"fields": "{
\"name\": \"John Doe\",
\"email\": \"john@example.com\",
\"message\": \"This is a test message for the contact form.\"
}",
"timeout": "10"
}
}')
echo "Contact form bulk filling result:"
echo "$CONTACT_FILL_RESULT" | jq '.'
if echo "$CONTACT_FILL_RESULT" | jq -e '.success' > /dev/null; then
echo "✓ Contact form bulk filling successful"
else
echo "✗ Contact form bulk filling failed"
fi
# Summary
echo ""
echo "=== Test Summary ==="
echo "Phase 3 functionality tests completed."
echo "Screenshots saved:"
echo " - Initial: /tmp/phase3-initial.png"
echo " - After interactions: /tmp/phase3-after-interactions.png"
echo " - Final: /tmp/phase3-final.png"
echo ""
echo "All Phase 3 tests completed successfully!"