From ba5d7f428f66fd52d9733b60c3da35b9209f0c9e Mon Sep 17 00:00:00 2001 From: Josh at WLTechBlog Date: Mon, 18 Aug 2025 14:21:50 -0500 Subject: [PATCH] multiple --- daemon/daemon.go | 46 +++++++++++++++------------------------------- 1 file changed, 15 insertions(+), 31 deletions(-) diff --git a/daemon/daemon.go b/daemon/daemon.go index 7674380..b959030 100644 --- a/daemon/daemon.go +++ b/daemon/daemon.go @@ -3492,39 +3492,23 @@ func (d *Daemon) interactMultiple(tabID, interactionsJSON string, timeout int) ( } case "select": - // For select elements, use page.Eval instead of element.Eval to avoid apply issues - script := fmt.Sprintf(` - (() => { - const element = document.querySelector("%s"); - if (element && element.tagName.toLowerCase() === 'select') { - // Try to select by value first - for (let option of element.options) { - if (option.value === "%s") { - element.value = "%s"; - element.dispatchEvent(new Event('change', { bubbles: true })); - return true; - } - } - // Try to select by text if value didn't work - for (let option of element.options) { - if (option.text === "%s") { - element.value = option.value; - element.dispatchEvent(new Event('change', { bubbles: true })); - return true; - } - } - } - return false; - })() - `, interaction.Selector, interaction.Value, interaction.Value, interaction.Value) - - result, err := page.Eval(script) + // For select elements, use rod's built-in Select method + // Try to select by text first (most common case) + err = element.Select([]string{interaction.Value}, true, rod.SelectorTypeText) if err != nil { - interactionResult.Error = fmt.Sprintf("failed to select option: %v", err) - } else if result.Value.Bool() { - interactionResult.Success = true + // If text selection failed, the value might be the actual option value + // Try to find and select by matching option value using JavaScript + script := fmt.Sprintf("this.value = '%s'", interaction.Value) + _, jsErr := element.Eval(script) + if jsErr == nil { + // Trigger change event + _, _ = element.Eval("this.dispatchEvent(new Event('change', { bubbles: true }))") + interactionResult.Success = true + } else { + interactionResult.Error = fmt.Sprintf("failed to select option: %v", err) + } } else { - interactionResult.Error = fmt.Sprintf("failed to select option: %s", interaction.Value) + interactionResult.Success = true } case "check":