243 lines
7.1 KiB
Bash
Executable File
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!"
|