227 lines
6.0 KiB
Bash
Executable File
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!"
|