Skip to content

Commit 06ce60a

Browse files
authored
Expose DevTools as a target (#2321)
* Expose DevTools as a target * hide some methods * add missing doc * DevToolsTarget is a PageTarget * fix constructor * Ignore on windows
1 parent 19c75cd commit 06ce60a

File tree

7 files changed

+75
-9
lines changed

7 files changed

+75
-9
lines changed

lib/PuppeteerSharp.Tests/HeadfulTests/HeadfulTests.cs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ namespace PuppeteerSharp.Tests.HeadfulTests
1313
public class HeadfulTests : PuppeteerBaseTest
1414
{
1515
private readonly LaunchOptions _forcedOopifOptions;
16-
16+
1717
public HeadfulTests(): base()
1818
{
1919
_forcedOopifOptions = TestConstants.DefaultBrowserOptions();
@@ -218,5 +218,23 @@ await Task.WhenAll(
218218
browser.WaitForTargetAsync(target => target.Url.Contains("devtools://")));
219219
}
220220
}
221+
222+
[PuppeteerTest("headful.spec.ts", "HEADFUL", "should expose DevTools as a page")]
223+
[Skip(SkipAttribute.Targets.Firefox, SkipAttribute.Targets.Windows)]
224+
public async Task ShouldExposeDevToolsAsAPage()
225+
{
226+
var headfulOptions = TestConstants.DefaultBrowserOptions();
227+
headfulOptions.Devtools = true;
228+
await using var browser = await Puppeteer.LaunchAsync(headfulOptions);
229+
var context = await browser.CreateIncognitoBrowserContextAsync();
230+
var targetTask = browser.WaitForTargetAsync(target => target.Url.Contains("devtools://"));
231+
await Task.WhenAll(
232+
context.NewPageAsync(),
233+
targetTask);
234+
235+
var target = await targetTask;
236+
var page = await target.PageAsync();
237+
Assert.True(await page.EvaluateExpressionAsync<bool>("Boolean(DevToolsAPI)"));
238+
}
221239
}
222240
}

lib/PuppeteerSharp/Browser.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,6 +482,19 @@ private Target CreateTarget(TargetInfo targetInfo, CDPSession session)
482482
TargetManager,
483483
createSession);
484484

485+
if (targetInfo.Url?.StartsWith("devtools://", StringComparison.OrdinalIgnoreCase) == true)
486+
{
487+
return new DevToolsTarget(
488+
targetInfo,
489+
session,
490+
context,
491+
TargetManager,
492+
createSession,
493+
IgnoreHTTPSErrors,
494+
DefaultViewport,
495+
ScreenshotTaskQueue);
496+
}
497+
485498
if (IsPageTargetFunc(otherTarget))
486499
{
487500
return new PageTarget(
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using System;
2+
using System.Threading.Tasks;
3+
using PuppeteerSharp.Helpers;
4+
5+
namespace PuppeteerSharp
6+
{
7+
/// <summary>
8+
/// DevTools target.
9+
/// </summary>
10+
public class DevToolsTarget : PageTarget
11+
{
12+
internal DevToolsTarget(
13+
TargetInfo targetInfo,
14+
CDPSession session,
15+
BrowserContext context,
16+
ITargetManager targetManager,
17+
Func<bool, Task<CDPSession>> sessionFactory,
18+
bool ignoreHTTPSErrors,
19+
ViewPortOptions defaultViewport,
20+
TaskQueue screenshotTaskQueue)
21+
: base(targetInfo, session, context, targetManager, sessionFactory, ignoreHTTPSErrors, defaultViewport, screenshotTaskQueue)
22+
{
23+
}
24+
}
25+
}

lib/PuppeteerSharp/OtherTarget.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@
33

44
namespace PuppeteerSharp
55
{
6-
internal class OtherTarget : Target
6+
/// <summary>
7+
/// Other target.
8+
/// </summary>
9+
public class OtherTarget : Target
710
{
8-
public OtherTarget(TargetInfo targetInfo, CDPSession session, BrowserContext context, ITargetManager targetManager, Func<bool, Task<CDPSession>> createSession) : base(targetInfo, session, context, targetManager, createSession)
11+
internal OtherTarget(TargetInfo targetInfo, CDPSession session, BrowserContext context, ITargetManager targetManager, Func<bool, Task<CDPSession>> createSession) : base(targetInfo, session, context, targetManager, createSession)
912
{
1013
}
1114
}

lib/PuppeteerSharp/PageTarget.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,16 @@
44

55
namespace PuppeteerSharp
66
{
7-
internal class PageTarget : Target
7+
/// <summary>
8+
/// Page target.
9+
/// </summary>
10+
public class PageTarget : Target
811
{
912
private readonly bool _ignoreHTTPSErrors;
1013
private readonly ViewPortOptions _defaultViewport;
1114
private readonly TaskQueue _screenshotTaskQueue;
1215

13-
public PageTarget(TargetInfo targetInfo, CDPSession session, BrowserContext context, ITargetManager targetManager, Func<bool, Task<CDPSession>> sessionFactory, bool ignoreHTTPSErrors, ViewPortOptions defaultViewport, TaskQueue screenshotTaskQueue)
16+
internal PageTarget(TargetInfo targetInfo, CDPSession session, BrowserContext context, ITargetManager targetManager, Func<bool, Task<CDPSession>> sessionFactory, bool ignoreHTTPSErrors, ViewPortOptions defaultViewport, TaskQueue screenshotTaskQueue)
1417
: base(targetInfo, session, context, targetManager, sessionFactory)
1518
{
1619
_ignoreHTTPSErrors = ignoreHTTPSErrors;
@@ -71,7 +74,8 @@ internal override void Initialize()
7174
CheckIfInitialized();
7275
}
7376

74-
protected override void CheckIfInitialized()
77+
/// <inheritdoc/>
78+
protected internal override void CheckIfInitialized()
7579
{
7680
if (IsInitialized)
7781
{

lib/PuppeteerSharp/Target.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ internal virtual void Initialize()
9494
/// <summary>
9595
/// Check is the target is not initialized.
9696
/// </summary>
97-
protected virtual void CheckIfInitialized()
97+
protected internal virtual void CheckIfInitialized()
9898
{
9999
IsInitialized = true;
100100
InitializedTaskWrapper.TrySetResult(InitializationStatus.Success);

lib/PuppeteerSharp/WorkerTarget.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,14 @@
33

44
namespace PuppeteerSharp
55
{
6-
internal class WorkerTarget : Target
6+
/// <summary>
7+
/// Worker target.
8+
/// </summary>
9+
public class WorkerTarget : Target
710
{
811
private Task<Worker> _workerTask;
912

10-
public WorkerTarget(TargetInfo targetInfo, CDPSession session, BrowserContext context, ITargetManager targetManager, Func<bool, Task<CDPSession>> sessionFactory) : base(targetInfo, session, context, targetManager, sessionFactory)
13+
internal WorkerTarget(TargetInfo targetInfo, CDPSession session, BrowserContext context, ITargetManager targetManager, Func<bool, Task<CDPSession>> sessionFactory) : base(targetInfo, session, context, targetManager, sessionFactory)
1114
{
1215
}
1316

0 commit comments

Comments
 (0)