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>();
|
2025-03-19 20:59:11 +00:00
|
|
|
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,
|
2025-03-19 20:59:11 +00:00
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
}
|