BotSharp/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.cs

72 lines
2.2 KiB
C#
Raw Normal View History

2024-01-03 19:40:41 +00:00
namespace BotSharp.Plugin.WebDriver.Drivers.PlaywrightDriver;
public partial class PlaywrightWebDriver : IWebBrowser
2024-01-03 19:40:41 +00:00
{
2024-08-05 00:15:27 +00:00
private IServiceProvider _services => _instance.Services;
2024-01-03 19:40:41 +00:00
private readonly PlaywrightInstance _instance;
2024-02-01 03:29:13 +00:00
private readonly ILogger _logger;
2024-01-23 23:14:57 +00:00
public PlaywrightInstance Instance => _instance;
2024-01-03 19:40:41 +00:00
public Agent Agent => _agent;
private Agent _agent;
2024-02-01 03:29:13 +00:00
public PlaywrightWebDriver(IServiceProvider services, PlaywrightInstance instance, ILogger<PlaywrightWebDriver> logger)
2024-01-03 19:40:41 +00:00
{
_instance = instance;
2024-02-01 03:29:13 +00:00
_logger = logger;
2024-08-05 00:15:27 +00:00
_instance.SetServiceProvider(services);
2024-01-03 19:40:41 +00:00
}
2024-01-27 14:58:51 +00:00
public void SetAgent(Agent agent)
{
_agent = agent;
}
2024-04-09 03:38:56 +00:00
private ILocator? Locator(string contextId, HtmlElementContextOut context)
2024-01-27 14:58:51 +00:00
{
ILocator element = default;
if (!string.IsNullOrEmpty(context.ElementId))
{
2024-04-09 03:38:56 +00:00
element = _instance.GetPage(contextId).Locator($"#{context.ElementId}");
2024-01-27 14:58:51 +00:00
}
2024-02-01 03:29:13 +00:00
else if (!string.IsNullOrEmpty(context.ElementName))
{
var role = context.TagName switch
{
"input" => AriaRole.Textbox,
"textarea" => AriaRole.Textbox,
"button" => AriaRole.Button,
_ => AriaRole.Generic
};
2024-04-09 03:38:56 +00:00
element = _instance.GetPage(contextId).Locator($"[name='{context.ElementName}']");
2024-02-06 05:05:52 +00:00
var count = element.CountAsync().Result;
if (count == 0)
2024-02-01 03:29:13 +00:00
{
_logger.LogError($"Can't locate element {role} {context.ElementName}");
2024-02-06 05:05:52 +00:00
return null;
}
else if (count > 1)
{
_logger.LogError($"Located multiple elements {role} {context.ElementName}");
return null;
2024-02-01 03:29:13 +00:00
}
}
2024-01-27 14:58:51 +00:00
else
{
if (context.Index < 0)
{
2024-02-06 05:05:52 +00:00
_logger.LogError($"Can't locate the web element {context.Index}.");
return null;
2024-01-27 14:58:51 +00:00
}
2024-04-09 03:38:56 +00:00
element = _instance.GetPage(contextId).Locator(context.TagName).Nth(context.Index);
2024-01-27 14:58:51 +00:00
}
return element;
}
2024-08-04 22:48:52 +00:00
public void SetServiceProvider(IServiceProvider services)
{
2024-08-05 00:15:27 +00:00
_instance.SetServiceProvider(_services);
2024-08-04 22:48:52 +00:00
}
2024-01-03 19:40:41 +00:00
}