diff --git a/src/Infrastructure/BotSharp.Abstraction/Browsing/Models/PageActionArgs.cs b/src/Infrastructure/BotSharp.Abstraction/Browsing/Models/PageActionArgs.cs index f583febb..8bf09cb1 100644 --- a/src/Infrastructure/BotSharp.Abstraction/Browsing/Models/PageActionArgs.cs +++ b/src/Infrastructure/BotSharp.Abstraction/Browsing/Models/PageActionArgs.cs @@ -12,6 +12,9 @@ public class PageActionArgs public string Url { get; set; } = null!; public bool OpenNewTab { get; set; } = false; + public bool WaitForNetworkIdle = true; + public float? Timeout { get; set; } + /// /// On page data fetched /// diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightInstance.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightInstance.cs index 69e94f13..1bd14b3a 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightInstance.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightInstance.cs @@ -49,6 +49,11 @@ public class PlaywrightInstance : IDisposable Headless = true, #endif Channel = "chrome", + ViewportSize = new ViewportSize + { + Width = 1600, + Height = 900 + }, IgnoreDefaultArgs = [ "--enable-automation", @@ -71,10 +76,6 @@ public class PlaywrightInstance : IDisposable Serilog.Log.Information($"Page is closed: {e.Url}"); }; Serilog.Log.Information($"New page is created: {page.Url}"); - if (!page.IsClosed) - { - await page.SetViewportSizeAsync(1600, 900); - } /*page.Response += async (sender, e) => { diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.GoToPage.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.GoToPage.cs index 4fb91660..a6f48440 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.GoToPage.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.GoToPage.cs @@ -29,9 +29,19 @@ public partial class PlaywrightWebDriver var page = args.OpenNewTab ? await _instance.NewPage(message.ContextId, fetched: args.OnDataFetched) : _instance.GetPage(message.ContextId); - var response = await page.GotoAsync(args.Url); + var response = await page.GotoAsync(args.Url, new PageGotoOptions + { + Timeout = args.Timeout + }); + await page.WaitForLoadStateAsync(LoadState.DOMContentLoaded); - await page.WaitForLoadStateAsync(LoadState.NetworkIdle); + if (args.WaitForNetworkIdle) + { + await page.WaitForLoadStateAsync(LoadState.NetworkIdle, new PageWaitForLoadStateOptions + { + Timeout = args.Timeout + }); + } if (response.Status == 200) {