BotSharp/src/Plugins/BotSharp.Plugin.WebDriver/UtilFunctions/UtilWebActionOnElementFn.cs
2025-03-19 15:59:11 -05:00

56 lines
2 KiB
C#

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<UtilWebActionOnElementFn> logger)
{
_services = services;
_logger = logger;
}
public async Task<bool> Execute(RoleDialogModel message)
{
var locatorArgs = JsonSerializer.Deserialize<ElementLocatingArgs>(message.FunctionArgs);
var actionArgs = JsonSerializer.Deserialize<ElementActionArgs>(message.FunctionArgs);
if (actionArgs.Action == BroswerActionEnum.InputText)
{
// Replace variable in input text
if (actionArgs.Content.StartsWith("@"))
{
var config = _services.GetRequiredService<IConfiguration>();
var key = actionArgs.Content.Replace("@", string.Empty);
actionArgs.Content = key.Replace(key, config[key]);
}
}
actionArgs.WaitTime = 2;
var conv = _services.GetRequiredService<IConversationService>();
var browser = _services.GetRequiredService<IWebBrowser>();
var webDriverService = _services.GetRequiredService<WebDriverService>();
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;
}
}