/
CreateCDPSessionTests.cs
84 lines (75 loc) · 2.99 KB
/
CreateCDPSessionTests.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
using Xunit;
using Xunit.Abstractions;
namespace PuppeteerSharp.Tests.TargetTests
{
[Collection("PuppeteerLoaderFixture collection")]
public class CreateCDPSessionTests : PuppeteerPageBaseTest
{
public CreateCDPSessionTests(ITestOutputHelper output) : base(output)
{
}
[Fact]
public async Task ShouldWork()
{
var client = await Page.Target.CreateCDPSessionAsync();
await Task.WhenAll(
client.SendAsync("Runtime.enable"),
client.SendAsync("Runtime.evaluate", new { expression = "window.foo = 'bar'" })
);
var foo = await Page.EvaluateExpressionAsync<string>("window.foo");
Assert.Equal("bar", foo);
}
[Fact]
public async Task ShouldSendEvents()
{
var client = await Page.Target.CreateCDPSessionAsync();
await client.SendAsync("Network.enable");
var events = new List<object>();
client.MessageReceived += (sender, e) =>
{
if (e.MessageID == "Network.requestWillBeSent")
{
events.Add(e.MessageData);
}
};
await Page.GoToAsync(TestConstants.EmptyPage);
Assert.Single(events);
}
[Fact]
public async Task ShouldEnableAndDisableDomainsIndependently()
{
var client = await Page.Target.CreateCDPSessionAsync();
await client.SendAsync("Runtime.enable");
await client.SendAsync("Debugger.enable");
// JS coverage enables and then disables Debugger domain.
await Page.Coverage.StartJSCoverageAsync();
await Page.Coverage.StopJSCoverageAsync();
// generate a script in page and wait for the event.
var eventTask = WaitEvent(client, "Debugger.scriptParsed");
await Task.WhenAll(
eventTask,
Page.EvaluateExpressionAsync("//# sourceURL=foo.js")
);
// expect events to be dispatched.
Assert.Equal("foo.js", eventTask.Result["url"].Value<string>());
}
[Fact]
public async Task ShouldBeAbleToDetachSession()
{
var client = await Page.Target.CreateCDPSessionAsync();
await client.SendAsync("Runtime.enable");
var evalResponse = await client.SendAsync("Runtime.evaluate", new { expression = "1 + 2", returnByValue = true });
Assert.Equal(3, evalResponse["result"]["value"].ToObject<int>());
await client.DetachAsync();
var exception = await Assert.ThrowsAnyAsync<Exception>(()
=> client.SendAsync("Runtime.evaluate", new { expression = "3 + 1", returnByValue = true }));
Assert.Contains("Session closed.", exception.Message);
}
}
}