Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1020,21 +1020,6 @@
"FAIL"
]
},
{
"comment": "This is part of organizing the webdriver bidi implementation, We will remove it one by one",
"testIdPattern": "[page.spec] *Page.Events.PageError*",
"platforms": [
"darwin",
"linux",
"win32"
],
"parameters": [
"webDriverBiDi"
],
"expectations": [
"FAIL"
]
},
{
"comment": "This is part of organizing the webdriver bidi implementation, We will remove it one by one",
"testIdPattern": "[page.spec] *Page.Events.Popup*",
Expand Down
16 changes: 8 additions & 8 deletions lib/PuppeteerSharp.Tests/PageTests/PageEventsPageErrorTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,27 @@ namespace PuppeteerSharp.Tests.PageTests
{
public class PageEventsPageErrorTests : PuppeteerPageBaseTest
{
public PageEventsPageErrorTests() : base()
{
}

[Test, PuppeteerTest("page.spec", "Page Page.Events.PageError", "should fire")]
public async Task ShouldFire()
{
string error = null;
var errorTask = new TaskCompletionSource<string>();
void EventHandler(object sender, PageErrorEventArgs e)
{
error = e.Message;
if (e.Message.Contains("Fancy"))
{
errorTask.TrySetResult(e.Message);
}
Page.PageError -= EventHandler;
}

Page.PageError += EventHandler;

await Task.WhenAll(
Page.GoToAsync(TestConstants.ServerUrl + "/error.html"),
WaitEvent(Page.Client, "Runtime.exceptionThrown")
errorTask.Task,
Page.GoToAsync(TestConstants.ServerUrl + "/error.html")
);

var error = await errorTask.Task;
Assert.That(error, Does.Contain("Fancy"));
}
}
Expand Down
25 changes: 25 additions & 0 deletions lib/PuppeteerSharp/Bidi/BidiFrame.cs
Original file line number Diff line number Diff line change
Expand Up @@ -579,6 +579,31 @@ private void Initialize()
var dialog = BidiDialog.From(args.UserPrompt);
((Page)Page).OnDialog(new DialogEventArgs(dialog));
};

BrowsingContext.Log += (sender, args) =>
{
if (args.Type == "javascript")
{
var text = args.Text ?? string.Empty;
var messageLines = new List<string> { text };

var stackLines = new List<string>();
if (args.StackTrace != null)
{
foreach (var frame in args.StackTrace.CallFrames)
{
stackLines.Add($" at {(string.IsNullOrEmpty(frame.FunctionName) ? "<anonymous>" : frame.FunctionName)} ({frame.Url}:{frame.LineNumber + 1}:{frame.ColumnNumber + 1})");
if (stackLines.Count >= 10)
{
break;
}
}
}

var fullStack = string.Join("\n", messageLines.Concat(stackLines));
BidiPage.OnPageError(new PageErrorEventArgs(fullStack));
}
};
}

private void CreateFrameTarget(BrowsingContext browsingContext)
Expand Down
2 changes: 2 additions & 0 deletions lib/PuppeteerSharp/Bidi/BidiPage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -461,6 +461,8 @@ internal static BidiPage From(BidiBrowserContext browserContext, BrowsingContext
return page;
}

internal new void OnPageError(PageErrorEventArgs e) => base.OnPageError(e);

/// <inheritdoc />
protected override Task<byte[]> PdfInternalAsync(string file, PdfOptions options) => throw new NotImplementedException();

Expand Down
14 changes: 14 additions & 0 deletions lib/PuppeteerSharp/Bidi/Core/BrowsingContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,8 @@ private BrowsingContext(UserContext userContext, BrowsingContext parent, string

public event EventHandler<UserPromptEventArgs> UserPrompt;

public event EventHandler<WebDriverBiDi.Log.EntryAddedEventArgs> Log;

public UserContext UserContext { get; }

public string Id { get; }
Expand Down Expand Up @@ -326,6 +328,16 @@ private void Initialize()
var userPrompt = Core.UserPrompt.From(this, args);
OnUserPromptOpened(new UserPromptEventArgs(userPrompt));
};

Session.LogEntryAdded += (_, args) =>
{
if (args.Source.Context != Id)
{
return;
}

OnLogEntry(args);
};
}

private void OnNavigation(BrowserContextNavigationEventArgs args) => Navigation?.Invoke(this, args);
Expand All @@ -352,4 +364,6 @@ private void Dispose(string reason)
private void OnWorker(DedicatedWorkerRealm args) => Worker?.Invoke(this, new WorkerRealmEventArgs(args));

private void OnUserPromptOpened(UserPromptEventArgs args) => UserPrompt?.Invoke(this, args);

private void OnLogEntry(WebDriverBiDi.Log.EntryAddedEventArgs args) => Log?.Invoke(this, args);
}
5 changes: 5 additions & 0 deletions lib/PuppeteerSharp/Bidi/Core/Session.cs
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ internal class Session(BiDiDriver driver, NewCommandResult info) : IDisposable

public event EventHandler<WebDriverBiDi.BrowsingContext.UserPromptClosedEventArgs> BrowsingContextUserPromptClosed;

public event EventHandler<WebDriverBiDi.Log.EntryAddedEventArgs> LogEntryAdded;

public BiDiDriver Driver { get; } = driver;

public NewCommandResult Info { get; } = info;
Expand Down Expand Up @@ -118,6 +120,7 @@ private async Task InitializeAsync()
Driver.Network.OnResponseCompleted.AddObserver(OnNetworkResponseCompleted);
Driver.BrowsingContext.OnUserPromptOpened.AddObserver(OnBrowsingContextUserPromptOpened);
Driver.BrowsingContext.OnUserPromptClosed.AddObserver(OnBrowsingContextUserPromptClosed);
Driver.Log.OnEntryAdded.AddObserver(OnLogEntryAdded);
}

private void OnFragmentNavigated(WebDriverBiDi.BrowsingContext.NavigationEventArgs info)
Expand Down Expand Up @@ -159,4 +162,6 @@ private void OnFragmentNavigated(WebDriverBiDi.BrowsingContext.NavigationEventAr
private void OnBrowsingContextUserPromptOpened(WebDriverBiDi.BrowsingContext.UserPromptOpenedEventArgs obj) => BrowsingContextUserPromptOpened?.Invoke(this, obj);

private void OnBrowsingContextUserPromptClosed(WebDriverBiDi.BrowsingContext.UserPromptClosedEventArgs obj) => BrowsingContextUserPromptClosed?.Invoke(this, obj);

private void OnLogEntryAdded(WebDriverBiDi.Log.EntryAddedEventArgs obj) => LogEntryAdded?.Invoke(this, obj);
}
Loading