Verifies that:
- Cross-origin iframe DOM extraction works (finds multiple CDP targets)
- Elements from cross-origin iframes appear in the selector_map
- Elements inside cross-origin iframes can be clicked successfully
- Target/session switching works correctly for cross-origin actions
The test uses example.com as the cross-origin iframe source and
clicks the "Learn more" link inside the iframe to verify end-to-end
functionality.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Introduced a new HTML template for testing stacked DOM elements, including open and closed shadow DOMs, same-origin and cross-origin iframes, and a final button.
- Implemented a test case to validate click functionality through these stacked elements, ensuring that all interactive elements are clickable and that the click counter reflects the expected number of clicks.
- Enhanced the browser session configuration to accommodate a taller window size for better visibility of stacked elements.
This update aims to improve the robustness of DOM interaction tests and ensure comprehensive coverage of complex scenarios in the browser automation framework.
- Introduced new HTML templates for DOM serializer tests, including a main page and an iframe template.
- Enhanced logging in the BrowserSession to provide clearer insights when fetching the CDP client for target nodes, improving traceability during debugging.
- Updated tests to utilize the new HTML templates, ensuring better structure and maintainability.
This update aims to enhance the robustness of the DOM serializer tests and improve error handling in session management.
- Added check for failure messages in extracted_content
- Now catches both error field and 'not available'/'failed' in content
- Test will now fail in CI as expected, revealing click issues
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Tests DOM serializer extracts elements from:
- Regular DOM (buttons, inputs, links)
- Shadow DOM (elements inside shadow roots)
- Same-origin iframes
- Cross-origin iframes
- Tests clicking elements using tools.click(index) for each category
- Test fails if clicks don't work (currently failing - needs fix)
- Verifies 12 total interactive elements are found
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Simplified test implementations by replacing ActionModel usage with direct calls to Tools methods (e.g., navigate, click, upload_file).
- Enhanced readability and maintainability of test code by removing unnecessary model definitions.
- Utilized new helper methods for element lookup by ID, improving efficiency in finding elements during tests.
This change aligns with recent updates to the Tools API, making tests cleaner and more intuitive.
Fixes dropdown selections not persisting in Vue.js, React, and other
reactive frameworks. The issue was that only 'change' events were
dispatched, but Vue's v-model requires 'input' events to register changes.
**Root Cause:**
Dropdown selection handler only dispatched 'change' events, missing the
'input' event required by reactive frameworks.
**Solution:**
Enhanced event dispatching sequence in default_action_watchdog.py:
1. Focus element first
2. Set value and selected state
3. Dispatch 'input' event (critical for Vue v-model and React)
4. Dispatch 'change' event (standard for select elements)
5. Blur element for validation
**Tests:**
Added comprehensive integration tests in tests/ci/interaction/:
- test_dropdown_vue_submit.py: Vue.js 3 with v-model
- test_dropdown_react_submit.py: React 18 with controlled components
Both tests verify dropdown selections persist through the reactive
framework's state management and form submission works correctly.
Closes#3415🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Prevents 40 parallel runners from racing to install chromium simultaneously on cache miss.
Before: 40 runners × 2min = 80 runner-minutes wasted on first run
After: 1 runner installs (2min), then 40 runners use cached version (10s each)
Savings on cache miss: ~78 runner-minutes per workflow run