#!/usr/bin/env python3 """ Debug script to test form detection on QuBeCare login page """ import asyncio import logging import json from mcp_chrome_client import MCPChromeClient # Simple config for testing def get_test_config(): return { 'mcp_server_type': 'http', 'mcp_server_url': 'http://127.0.0.1:12306/mcp', 'mcp_server_command': None, 'mcp_server_args': [] } async def debug_qubecare_form(): """Debug form detection on QuBeCare login page""" # Set up logging logging.basicConfig(level=logging.DEBUG) logger = logging.getLogger(__name__) # Initialize MCP Chrome client config = get_test_config() client = MCPChromeClient(config) try: # Navigate to the QuBeCare login page logger.info("Navigating to QuBeCare login page...") result = await client._navigate_mcp("https://app.qubecare.ai/provider/login") logger.info(f"Navigation result: {result}") # Wait for page to load await asyncio.sleep(3) # Try to get form fields using different methods logger.info("=== Method 1: get_form_fields ===") form_fields = await client.get_form_fields() logger.info(f"Form fields result: {form_fields}") logger.info("=== Method 2: get_cached_input_fields ===") cached_fields = await client.get_cached_input_fields() logger.info(f"Cached input fields: {cached_fields}") logger.info("=== Method 3: refresh_input_fields ===") refresh_result = await client.refresh_input_fields() logger.info(f"Refresh result: {refresh_result}") # Try to get page content to see what's actually there logger.info("=== Method 4: Get page content ===") try: page_content = await client._call_mcp_tool("chrome_get_web_content", { "selector": "body", "textOnly": False }) logger.info(f"Page content structure: {json.dumps(page_content, indent=2)}") except Exception as e: logger.error(f"Error getting page content: {e}") # Try to find specific input elements logger.info("=== Method 5: Look for specific input selectors ===") common_selectors = [ "input[type='email']", "input[type='password']", "input[name*='email']", "input[name*='password']", "input[name*='username']", "input[name*='login']", "#email", "#password", "#username", ".email", ".password", "input", "form input" ] for selector in common_selectors: try: element_info = await client._call_mcp_tool("chrome_get_web_content", { "selector": selector, "textOnly": False }) if element_info and element_info.get("content"): logger.info(f"Found elements with selector '{selector}': {element_info}") except Exception as e: logger.debug(f"No elements found for selector '{selector}': {e}") # Try to get interactive elements logger.info("=== Method 6: Get all interactive elements ===") try: interactive = await client._call_mcp_tool("chrome_get_interactive_elements", { "types": ["input", "textarea", "select", "button"] }) logger.info(f"Interactive elements: {json.dumps(interactive, indent=2)}") except Exception as e: logger.error(f"Error getting interactive elements: {e}") # Check if page is fully loaded logger.info("=== Method 7: Check page load status ===") try: page_status = await client._call_mcp_tool("chrome_execute_script", { "script": "return {readyState: document.readyState, title: document.title, url: window.location.href, forms: document.forms.length, inputs: document.querySelectorAll('input').length}" }) logger.info(f"Page status: {page_status}") except Exception as e: logger.error(f"Error checking page status: {e}") except Exception as e: logger.error(f"Error during debugging: {e}") finally: # Clean up try: await client.close() except: pass if __name__ == "__main__": asyncio.run(debug_qubecare_form())