cremote/test-phase1-element-checkin...

227 lines
6.0 KiB
Bash
Executable File

#!/bin/bash
# Test script for Phase 1 Element Checking functionality
# This script tests the new element checking commands in cremote
set -e
echo "=== Phase 1 Element Checking Test ==="
echo "Starting cremote daemon..."
# Start the daemon in the background
./cremotedaemon --debug &
DAEMON_PID=$!
# Wait for daemon to start
sleep 3
echo "Daemon started with PID: $DAEMON_PID"
# Function to cleanup on exit
cleanup() {
echo "Cleaning up..."
if [ ! -z "$DAEMON_PID" ]; then
kill $DAEMON_PID 2>/dev/null || true
wait $DAEMON_PID 2>/dev/null || true
fi
echo "Cleanup complete"
}
trap cleanup EXIT
# Test the new functionality using cremote client
echo ""
echo "=== Testing Element Checking Commands ==="
# Open a tab and load our test page
echo "Opening tab and loading test page..."
TAB_ID=$(./cremote open-tab)
echo "Tab ID: $TAB_ID"
# Get the absolute path to the test file
TEST_FILE="file://$(pwd)/test-element-checking.html"
echo "Loading: $TEST_FILE"
./cremote load-url --tab "$TAB_ID" --url "$TEST_FILE"
# Wait for page to load
sleep 2
echo ""
echo "=== Test 1: Check if elements exist ==="
# Test element existence
echo "Checking if main title exists..."
./cremote eval-js --tab "$TAB_ID" --code "
const result = {
exists: document.querySelector('#main-title') !== null,
count: document.querySelectorAll('#main-title').length
};
console.log('Element check result:', JSON.stringify(result));
result;
"
echo ""
echo "=== Test 2: Check visibility states ==="
# Test visible element
echo "Checking visible paragraph..."
./cremote eval-js --tab "$TAB_ID" --code "
const element = document.querySelector('#visible-paragraph');
const result = {
exists: element !== null,
visible: element ? window.getComputedStyle(element).display !== 'none' : false,
visibilityStyle: element ? window.getComputedStyle(element).visibility : null
};
console.log('Visible paragraph check:', JSON.stringify(result));
result;
"
# Test hidden element
echo "Checking hidden paragraph..."
./cremote eval-js --tab "$TAB_ID" --code "
const element = document.querySelector('#hidden-paragraph');
const result = {
exists: element !== null,
visible: element ? window.getComputedStyle(element).display !== 'none' : false,
displayStyle: element ? window.getComputedStyle(element).display : null
};
console.log('Hidden paragraph check:', JSON.stringify(result));
result;
"
echo ""
echo "=== Test 3: Check form element states ==="
# Test enabled vs disabled inputs
echo "Checking enabled input..."
./cremote eval-js --tab "$TAB_ID" --code "
const element = document.querySelector('#text-input');
const result = {
exists: element !== null,
enabled: element ? !element.disabled : false,
value: element ? element.value : null
};
console.log('Enabled input check:', JSON.stringify(result));
result;
"
echo "Checking disabled input..."
./cremote eval-js --tab "$TAB_ID" --code "
const element = document.querySelector('#disabled-input');
const result = {
exists: element !== null,
enabled: element ? !element.disabled : false,
disabled: element ? element.disabled : null
};
console.log('Disabled input check:', JSON.stringify(result));
result;
"
echo ""
echo "=== Test 4: Check selected/checked states ==="
# Test checked checkbox
echo "Checking checked checkbox..."
./cremote eval-js --tab "$TAB_ID" --code "
const element = document.querySelector('#checkbox1');
const result = {
exists: element !== null,
checked: element ? element.checked : false,
type: element ? element.type : null
};
console.log('Checked checkbox:', JSON.stringify(result));
result;
"
# Test unchecked checkbox
echo "Checking unchecked checkbox..."
./cremote eval-js --tab "$TAB_ID" --code "
const element = document.querySelector('#checkbox2');
const result = {
exists: element !== null,
checked: element ? element.checked : false
};
console.log('Unchecked checkbox:', JSON.stringify(result));
result;
"
echo ""
echo "=== Test 5: Count multiple elements ==="
# Count elements with class 'item'
echo "Counting elements with class 'item'..."
./cremote eval-js --tab "$TAB_ID" --code "
const elements = document.querySelectorAll('.item');
const result = {
count: elements.length,
elements: Array.from(elements).map(el => ({
tagName: el.tagName,
textContent: el.textContent.trim(),
dataId: el.getAttribute('data-id')
}))
};
console.log('Item count result:', JSON.stringify(result));
result;
"
echo ""
echo "=== Test 6: Get element attributes ==="
# Get attributes of custom element
echo "Getting attributes of custom element..."
./cremote eval-js --tab "$TAB_ID" --code "
const element = document.querySelector('#custom-element');
const result = {
exists: element !== null,
attributes: {}
};
if (element) {
// Get all attributes
for (let attr of element.attributes) {
result.attributes[attr.name] = attr.value;
}
// Get some computed styles
const styles = window.getComputedStyle(element);
result.computedStyles = {
display: styles.display,
color: styles.color,
fontSize: styles.fontSize
};
}
console.log('Custom element attributes:', JSON.stringify(result));
result;
"
echo ""
echo "=== Test 7: Focus testing ==="
# Test focus state
echo "Testing focus state..."
./cremote eval-js --tab "$TAB_ID" --code "
// Focus the test button
const button = document.querySelector('#test-button');
button.focus();
// Check if it's focused
const result = {
buttonExists: button !== null,
activeElement: document.activeElement ? document.activeElement.id : null,
isFocused: document.activeElement === button
};
console.log('Focus test result:', JSON.stringify(result));
result;
"
echo ""
echo "=== All tests completed successfully! ==="
echo "The element checking functionality appears to be working correctly."
echo "Ready for Phase 1 MCP tool testing."
# Take a screenshot for verification
echo "Taking screenshot for verification..."
./cremote screenshot --tab "$TAB_ID" --output "test-phase1-screenshot.png"
echo "Screenshot saved as test-phase1-screenshot.png"
echo ""
echo "Test completed successfully!"