BotSharp/src/Plugins/BotSharp.Plugin.WebDriver/UtilFunctions/UtilWebActionOnElementFn.cs

56 lines
2 KiB
C#
Raw Normal View History

2025-02-03 23:43:04 +00:00
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)
{
2025-02-04 21:56:25 +00:00
// 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]);
}
2025-02-03 23:43:04 +00:00
}
2025-02-04 21:56:25 +00:00
2025-02-03 23:43:04 +00:00
actionArgs.WaitTime = 2;
var conv = _services.GetRequiredService<IConversationService>();
var browser = _services.GetRequiredService<IWebBrowser>();
var webDriverService = _services.GetRequiredService<WebDriverService>();
2025-02-04 21:56:25 +00:00
var msg = new MessageInfo
2025-02-03 23:43:04 +00:00
{
AgentId = message.CurrentAgentId,
MessageId = message.MessageId,
ContextId = webDriverService.GetMessageContext(message),
2025-02-04 21:56:25 +00:00
};
var result = await browser.ActionOnElement(msg, locatorArgs, actionArgs);
2025-02-03 23:43:04 +00:00
message.Content = $"{actionArgs.Action} executed {(result.IsSuccess ? "success" : "failed")}";
2025-02-04 21:56:25 +00:00
var path = webDriverService.GetScreenshotFilePath(message.MessageId);
message.Data = await browser.ScreenshotAsync(msg, path);
2025-02-03 23:43:04 +00:00
return true;
}
}