Skip to content

Add better handling for native dropdowns #140

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

Zach10za
Copy link

@Zach10za Zach10za commented Jul 8, 2025

This PR adds better handling for native dropdowns. This feature was recently introduced in the JS repo: browserbase/stagehand#842 so this change is a simple port to python.

This should resolve this issue: #135

Why

Currently native os-level dropdowns are not able to be acted on. My understanding is these UI elements are rendered by the OS and are not part of the DOM which makes them invisible to playwright.

What changed

A straight port of the JS PR: browserbase/stagehand#842

TL;DR: Add a new method selectOptionFromDropdown and instructions in the prompt for how to use it. The method uses Playwright's select_option locator method.

There is one exception: I didn't overwrite elements with combobox role to select role in the _clean_structural_nodes as is in the JS PR. This function has a slightly different implementation than it's JS counterpart and so I didn't want to mess with it especially because the JS PR didn't include a test case for it. Let me know if you want me to add this for the sake of staying consistent with the other repo.

Test plan

I ported over the test cases from the JS PR:

  1. Function is used properly on native dropdowns (LOCAL + BROWSERBASE)
  2. Function is skipped properly on hidden and custom dropdowns (LOCAL)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant