using BotSharp.Plugin.WebDriver.Services; using System.Threading; namespace BotSharp.Plugin.WebDriver.Drivers.PlaywrightDriver; public partial class PlaywrightWebDriver { public async Task ChangeListValue(Agent agent, BrowsingContextIn context, string messageId) { // Retrieve the page raw html and infer the element path var body = await _instance.Page.QuerySelectorAsync("body"); var str = new List(); var inputs = await body.QuerySelectorAllAsync("select"); foreach (var input in inputs) { var html = "(); var htmlElementContextOut = await driverService.LocateElement(agent, string.Join("", str), context.ElementName, messageId); if (htmlElementContextOut.Index < 0) { throw new Exception($"Can't locate the web element {context.ElementName}."); } ILocator element = default; if (!string.IsNullOrEmpty(htmlElementContextOut.ElementId)) { // await _instance.Page.WaitForSelectorAsync($"#{htmlElementContextOut.ElementId}", new PageWaitForSelectorOptions { Timeout = 3 }); element = _instance.Page.Locator($"#{htmlElementContextOut.ElementId}"); } else { element = _instance.Page.Locator(htmlElementContextOut.TagName).Nth(htmlElementContextOut.Index); } try { var isVisible = await element.IsVisibleAsync(); if (!isVisible) { // Select the element you want to make visible (replace with your own selector) var control = await _instance.Page.QuerySelectorAsync($"#{htmlElementContextOut.ElementId}"); // Show the element by modifying its CSS styles await _instance.Page.EvaluateAsync(@"(element) => { element.style.display = 'block'; element.style.visibility = 'visible'; }", control); } await element.FocusAsync(); await element.SelectOptionAsync(new SelectOptionValue { Label = context.UpdateValue }); // Click on the blank area to activate posting // await body.ClickAsync(); if (!isVisible) { // Select the element you want to make visible (replace with your own selector) var control = await _instance.Page.QuerySelectorAsync($"#{htmlElementContextOut.ElementId}"); // Show the element by modifying its CSS styles await _instance.Page.EvaluateAsync(@"(element) => { element.style.display = 'none'; element.style.visibility = 'hidden'; }", control); } } catch (Exception ex) { throw new Exception(ex.Message); } } }