namespace BotSharp.Plugin.WebDriver.UtilFunctions; public class UtilWebActionOnElementFn : IFunctionCallback { public string Name => "util-web-action_on_element"; public string Indication => "Do action on element."; private readonly IServiceProvider _services; private readonly ILogger _logger; public UtilWebActionOnElementFn( IServiceProvider services, ILogger logger) { _services = services; _logger = logger; } public async Task Execute(RoleDialogModel message) { var locatorArgs = JsonSerializer.Deserialize(message.FunctionArgs); var actionArgs = JsonSerializer.Deserialize(message.FunctionArgs); if (actionArgs.Action == BroswerActionEnum.InputText) { // Replace variable in input text if (actionArgs.Content.StartsWith("@")) { var config = _services.GetRequiredService(); var key = actionArgs.Content.Replace("@", string.Empty); actionArgs.Content = key.Replace(key, config[key]); } } actionArgs.WaitTime = 2; var conv = _services.GetRequiredService(); var browser = _services.GetRequiredService(); var webDriverService = _services.GetRequiredService(); var msg = new MessageInfo { AgentId = message.CurrentAgentId, MessageId = message.MessageId, ContextId = webDriverService.GetMessageContext(message), }; var result = await browser.ActionOnElement(msg, locatorArgs, actionArgs); message.Content = $"{actionArgs.Action} executed {(result.IsSuccess ? "success" : "failed")}"; var path = webDriverService.GetScreenshotFilePath(message.MessageId); message.Data = await browser.ScreenshotAsync(msg, path); return true; } }