""" 🤖 Fagun Browser Automation Testing Agent - Web Interface ========================================================= Web UI components for the Fagun Browser Automation Testing Agent. Author: Mejbaur Bahar Fagun Role: Software Engineer in Test LinkedIn: https://www.linkedin.com/in/mejbaur/ """ import gradio as gr from src.webui.webui_manager import WebuiManager from src.webui.components.agent_settings_tab import create_agent_settings_tab from src.webui.components.browser_settings_tab import create_browser_settings_tab from src.webui.components.browser_use_agent_tab import create_browser_use_agent_tab theme_map = { "Default": gr.themes.Default(), "Soft": gr.themes.Soft(), "Monochrome": gr.themes.Monochrome(), "Glass": gr.themes.Glass(), "Origin": gr.themes.Origin(), "Citrus": gr.themes.Citrus(), "Ocean": gr.themes.Ocean(), "Base": gr.themes.Base() } def create_ui(theme_name="Ocean"): css = """ .gradio-container { width: 70vw !important; max-width: 70% !important; margin-left: auto !important; margin-right: auto !important; padding-top: 100px !important; } .header-text { text-align: center; margin-bottom: 20px; position: fixed !important; top: 0 !important; left: 0 !important; right: 0 !important; z-index: 1000 !important; background-color: var(--body-background-fill) !important; padding: 20px 0 !important; border-bottom: 2px solid var(--border-color-primary) !important; box-shadow: 0 2px 4px rgba(0,0,0,0.1) !important; line-height: 1.2 !important; } .header-text h1 { margin: 0 0 10px 0 !important; font-size: 2.5em !important; line-height: 1.1 !important; } .header-text h3 { margin: 0 !important; font-size: 1.2em !important; line-height: 1.2 !important; opacity: 0.9 !important; } .tab-header-text { text-align: center; } .theme-section { margin-bottom: 10px; padding: 15px; border-radius: 10px; } /* Hide default Gradio footer */ .gradio-container footer { display: none !important; } .gradio-container .footer { display: none !important; } /* Override hide-container behavior for header */ .hide-container { display: block !important; visibility: visible !important; opacity: 1 !important; } /* Ensure header is always visible */ .header-text, .header-text * { display: block !important; visibility: visible !important; opacity: 1 !important; position: fixed !important; top: 0 !important; left: 0 !important; right: 0 !important; z-index: 1000 !important; } /* Override any Gradio hiding classes for header */ .header-text.hide-container, .header-text.svelte-11xb1hd, .header-text.padded, .header-text.auto-margin { display: block !important; visibility: visible !important; opacity: 1 !important; position: fixed !important; top: 0 !important; left: 0 !important; right: 0 !important; z-index: 1000 !important; } """ # dark mode in default js_func = """ function refresh() { const url = new URL(window.location); if (url.searchParams.get('__theme') !== 'dark') { url.searchParams.set('__theme', 'dark'); window.location.href = url.href; } } """ ui_manager = WebuiManager() with gr.Blocks( title="Fagun Browser Automation Testing Agent", theme=theme_map[theme_name], css=css, js=js_func, head=""" """, ) as demo: with gr.Row(): gr.Markdown( """ # 🤖 Fagun Browser Automation Testing Agent """, elem_classes=["header-text"], ) with gr.Tabs() as tabs: with gr.TabItem("⚙️ Agent Settings"): create_agent_settings_tab(ui_manager) with gr.TabItem("🌐 Browser Settings"): create_browser_settings_tab(ui_manager) with gr.TabItem("🤖 Run Agent"): create_browser_use_agent_tab(ui_manager) # Custom Footer with gr.Row(): gr.HTML( """
""" ) return demo