Skip to content

Commit f05e8e3

Browse files
authored
Bidi: Page Error (#3003)
1 parent 0b333e1 commit f05e8e3

File tree

6 files changed

+54
-23
lines changed

6 files changed

+54
-23
lines changed

lib/PuppeteerSharp.Nunit/TestExpectations/TestExpectations.local.json

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1020,21 +1020,6 @@
10201020
"FAIL"
10211021
]
10221022
},
1023-
{
1024-
"comment": "This is part of organizing the webdriver bidi implementation, We will remove it one by one",
1025-
"testIdPattern": "[page.spec] *Page.Events.PageError*",
1026-
"platforms": [
1027-
"darwin",
1028-
"linux",
1029-
"win32"
1030-
],
1031-
"parameters": [
1032-
"webDriverBiDi"
1033-
],
1034-
"expectations": [
1035-
"FAIL"
1036-
]
1037-
},
10381023
{
10391024
"comment": "This is part of organizing the webdriver bidi implementation, We will remove it one by one",
10401025
"testIdPattern": "[page.spec] *Page.Events.Popup*",

lib/PuppeteerSharp.Tests/PageTests/PageEventsPageErrorTests.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,27 @@ namespace PuppeteerSharp.Tests.PageTests
66
{
77
public class PageEventsPageErrorTests : PuppeteerPageBaseTest
88
{
9-
public PageEventsPageErrorTests() : base()
10-
{
11-
}
12-
139
[Test, PuppeteerTest("page.spec", "Page Page.Events.PageError", "should fire")]
1410
public async Task ShouldFire()
1511
{
16-
string error = null;
12+
var errorTask = new TaskCompletionSource<string>();
1713
void EventHandler(object sender, PageErrorEventArgs e)
1814
{
19-
error = e.Message;
15+
if (e.Message.Contains("Fancy"))
16+
{
17+
errorTask.TrySetResult(e.Message);
18+
}
2019
Page.PageError -= EventHandler;
2120
}
2221

2322
Page.PageError += EventHandler;
2423

2524
await Task.WhenAll(
26-
Page.GoToAsync(TestConstants.ServerUrl + "/error.html"),
27-
WaitEvent(Page.Client, "Runtime.exceptionThrown")
25+
errorTask.Task,
26+
Page.GoToAsync(TestConstants.ServerUrl + "/error.html")
2827
);
2928

29+
var error = await errorTask.Task;
3030
Assert.That(error, Does.Contain("Fancy"));
3131
}
3232
}

lib/PuppeteerSharp/Bidi/BidiFrame.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -579,6 +579,31 @@ private void Initialize()
579579
var dialog = BidiDialog.From(args.UserPrompt);
580580
((Page)Page).OnDialog(new DialogEventArgs(dialog));
581581
};
582+
583+
BrowsingContext.Log += (sender, args) =>
584+
{
585+
if (args.Type == "javascript")
586+
{
587+
var text = args.Text ?? string.Empty;
588+
var messageLines = new List<string> { text };
589+
590+
var stackLines = new List<string>();
591+
if (args.StackTrace != null)
592+
{
593+
foreach (var frame in args.StackTrace.CallFrames)
594+
{
595+
stackLines.Add($" at {(string.IsNullOrEmpty(frame.FunctionName) ? "<anonymous>" : frame.FunctionName)} ({frame.Url}:{frame.LineNumber + 1}:{frame.ColumnNumber + 1})");
596+
if (stackLines.Count >= 10)
597+
{
598+
break;
599+
}
600+
}
601+
}
602+
603+
var fullStack = string.Join("\n", messageLines.Concat(stackLines));
604+
BidiPage.OnPageError(new PageErrorEventArgs(fullStack));
605+
}
606+
};
582607
}
583608

584609
private void CreateFrameTarget(BrowsingContext browsingContext)

lib/PuppeteerSharp/Bidi/BidiPage.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,6 +461,8 @@ internal static BidiPage From(BidiBrowserContext browserContext, BrowsingContext
461461
return page;
462462
}
463463

464+
internal new void OnPageError(PageErrorEventArgs e) => base.OnPageError(e);
465+
464466
/// <inheritdoc />
465467
protected override Task<byte[]> PdfInternalAsync(string file, PdfOptions options) => throw new NotImplementedException();
466468

lib/PuppeteerSharp/Bidi/Core/BrowsingContext.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ private BrowsingContext(UserContext userContext, BrowsingContext parent, string
6565

6666
public event EventHandler<UserPromptEventArgs> UserPrompt;
6767

68+
public event EventHandler<WebDriverBiDi.Log.EntryAddedEventArgs> Log;
69+
6870
public UserContext UserContext { get; }
6971

7072
public string Id { get; }
@@ -326,6 +328,16 @@ private void Initialize()
326328
var userPrompt = Core.UserPrompt.From(this, args);
327329
OnUserPromptOpened(new UserPromptEventArgs(userPrompt));
328330
};
331+
332+
Session.LogEntryAdded += (_, args) =>
333+
{
334+
if (args.Source.Context != Id)
335+
{
336+
return;
337+
}
338+
339+
OnLogEntry(args);
340+
};
329341
}
330342

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

354366
private void OnUserPromptOpened(UserPromptEventArgs args) => UserPrompt?.Invoke(this, args);
367+
368+
private void OnLogEntry(WebDriverBiDi.Log.EntryAddedEventArgs args) => Log?.Invoke(this, args);
355369
}

lib/PuppeteerSharp/Bidi/Core/Session.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ internal class Session(BiDiDriver driver, NewCommandResult info) : IDisposable
6868

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

71+
public event EventHandler<WebDriverBiDi.Log.EntryAddedEventArgs> LogEntryAdded;
72+
7173
public BiDiDriver Driver { get; } = driver;
7274

7375
public NewCommandResult Info { get; } = info;
@@ -118,6 +120,7 @@ private async Task InitializeAsync()
118120
Driver.Network.OnResponseCompleted.AddObserver(OnNetworkResponseCompleted);
119121
Driver.BrowsingContext.OnUserPromptOpened.AddObserver(OnBrowsingContextUserPromptOpened);
120122
Driver.BrowsingContext.OnUserPromptClosed.AddObserver(OnBrowsingContextUserPromptClosed);
123+
Driver.Log.OnEntryAdded.AddObserver(OnLogEntryAdded);
121124
}
122125

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

161164
private void OnBrowsingContextUserPromptClosed(WebDriverBiDi.BrowsingContext.UserPromptClosedEventArgs obj) => BrowsingContextUserPromptClosed?.Invoke(this, obj);
165+
166+
private void OnLogEntryAdded(WebDriverBiDi.Log.EntryAddedEventArgs obj) => LogEntryAdded?.Invoke(this, obj);
162167
}

0 commit comments

Comments
 (0)