2020-09-21 19:32:25 +10:00
|
|
|
// Copyright © 2017 The CefSharp Authors. All rights reserved.
|
|
|
|
|
//
|
|
|
|
|
// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
|
|
|
|
|
|
2020-10-16 19:57:43 +10:00
|
|
|
using System;
|
2021-04-08 21:38:15 +02:00
|
|
|
using System.Collections.Generic;
|
2021-06-21 10:25:56 +10:00
|
|
|
using System.Drawing;
|
|
|
|
|
using System.Drawing.Imaging;
|
|
|
|
|
using System.IO;
|
2020-09-21 19:32:25 +10:00
|
|
|
using System.Threading.Tasks;
|
2021-07-26 04:01:46 +02:00
|
|
|
using CefSharp.DevTools;
|
2020-09-21 19:32:25 +10:00
|
|
|
using CefSharp.DevTools.Browser;
|
2021-04-08 21:38:15 +02:00
|
|
|
using CefSharp.DevTools.Emulation;
|
2020-09-21 19:32:25 +10:00
|
|
|
using CefSharp.DevTools.Network;
|
|
|
|
|
using CefSharp.Example;
|
|
|
|
|
using CefSharp.OffScreen;
|
|
|
|
|
using Xunit;
|
|
|
|
|
using Xunit.Abstractions;
|
|
|
|
|
|
|
|
|
|
namespace CefSharp.Test.DevTools
|
|
|
|
|
{
|
|
|
|
|
//NOTE: All Test classes must be part of this collection as it manages the Cef Initialize/Shutdown lifecycle
|
|
|
|
|
[Collection(CefSharpFixtureCollection.Key)]
|
2023-02-15 13:45:07 +10:00
|
|
|
public class DevToolsClientTests
|
2020-09-21 19:32:25 +10:00
|
|
|
{
|
|
|
|
|
private readonly ITestOutputHelper output;
|
|
|
|
|
private readonly CefSharpFixture fixture;
|
|
|
|
|
|
2023-02-15 13:45:07 +10:00
|
|
|
public DevToolsClientTests(ITestOutputHelper output, CefSharpFixture fixture)
|
2020-09-21 19:32:25 +10:00
|
|
|
{
|
|
|
|
|
this.fixture = fixture;
|
|
|
|
|
this.output = output;
|
|
|
|
|
}
|
|
|
|
|
|
2021-06-21 10:25:56 +10:00
|
|
|
[Fact]
|
|
|
|
|
public async Task CanCaptureScreenshot()
|
|
|
|
|
{
|
2023-01-15 11:33:08 +10:00
|
|
|
using (var browser = new ChromiumWebBrowser("www.google.com", useLegacyRenderHandler: false))
|
2021-06-21 10:25:56 +10:00
|
|
|
{
|
2021-10-28 10:30:03 +10:00
|
|
|
await browser.WaitForInitialLoadAsync();
|
2021-06-21 10:25:56 +10:00
|
|
|
|
|
|
|
|
using (var devToolsClient = browser.GetDevToolsClient())
|
|
|
|
|
{
|
|
|
|
|
var response = await devToolsClient.Page.CaptureScreenshotAsync();
|
|
|
|
|
|
|
|
|
|
Assert.NotNull(response.Data);
|
2021-07-05 11:16:25 +10:00
|
|
|
Assert.NotEmpty(response.Data);
|
2021-06-21 10:25:56 +10:00
|
|
|
|
|
|
|
|
var image = Image.FromStream(new MemoryStream(response.Data));
|
|
|
|
|
var size = browser.Size;
|
|
|
|
|
|
|
|
|
|
Assert.NotNull(image);
|
|
|
|
|
Assert.Equal(ImageFormat.Png, image.RawFormat);
|
|
|
|
|
Assert.Equal(size.Width, image.Width);
|
|
|
|
|
Assert.Equal(size.Height, image.Height);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2020-09-21 19:32:25 +10:00
|
|
|
[Fact]
|
|
|
|
|
public void CanConvertDevToolsObjectToDictionary()
|
|
|
|
|
{
|
|
|
|
|
var bounds = new Bounds
|
|
|
|
|
{
|
|
|
|
|
Height = 1,
|
|
|
|
|
Width = 1,
|
|
|
|
|
Left = 1,
|
|
|
|
|
Top = 1,
|
|
|
|
|
WindowState = WindowState.Fullscreen
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var dict = bounds.ToDictionary();
|
|
|
|
|
|
|
|
|
|
Assert.Equal(bounds.Height, (int)dict["height"]);
|
|
|
|
|
Assert.Equal(bounds.Width, (int)dict["width"]);
|
|
|
|
|
Assert.Equal(bounds.Top, (int)dict["top"]);
|
|
|
|
|
Assert.Equal(bounds.Left, (int)dict["left"]);
|
|
|
|
|
Assert.Equal("fullscreen", (string)dict["windowState"]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public async Task CanGetDevToolsProtocolVersion()
|
|
|
|
|
{
|
2023-01-15 11:33:08 +10:00
|
|
|
using (var browser = new ChromiumWebBrowser("www.google.com", useLegacyRenderHandler: false))
|
2020-09-21 19:32:25 +10:00
|
|
|
{
|
2021-10-28 10:30:03 +10:00
|
|
|
await browser.WaitForInitialLoadAsync();
|
2020-09-21 19:32:25 +10:00
|
|
|
|
|
|
|
|
using (var devToolsClient = browser.GetDevToolsClient())
|
|
|
|
|
{
|
|
|
|
|
var response = await devToolsClient.Browser.GetVersionAsync();
|
|
|
|
|
var jsVersion = response.JsVersion;
|
|
|
|
|
var revision = response.Revision;
|
|
|
|
|
|
|
|
|
|
Assert.NotNull(jsVersion);
|
|
|
|
|
Assert.NotNull(revision);
|
|
|
|
|
|
|
|
|
|
output.WriteLine("DevTools Revision {0}", revision);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
2021-01-08 17:03:24 +10:00
|
|
|
public async Task CanEmulationCanEmulate()
|
2020-09-21 19:32:25 +10:00
|
|
|
{
|
2023-01-15 11:33:08 +10:00
|
|
|
using (var browser = new ChromiumWebBrowser("www.google.com", useLegacyRenderHandler: false))
|
2020-09-21 19:32:25 +10:00
|
|
|
{
|
2021-10-28 10:30:03 +10:00
|
|
|
await browser.WaitForInitialLoadAsync();
|
2020-09-21 19:32:25 +10:00
|
|
|
|
|
|
|
|
using (var devToolsClient = browser.GetDevToolsClient())
|
|
|
|
|
{
|
|
|
|
|
var response = await devToolsClient.Emulation.CanEmulateAsync();
|
|
|
|
|
|
|
|
|
|
Assert.True(response.Result);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public async Task CanGetPageNavigationHistory()
|
|
|
|
|
{
|
2023-01-15 11:33:08 +10:00
|
|
|
using (var browser = new ChromiumWebBrowser("www.google.com", useLegacyRenderHandler: false))
|
2020-09-21 19:32:25 +10:00
|
|
|
{
|
2021-10-28 10:30:03 +10:00
|
|
|
await browser.WaitForInitialLoadAsync();
|
2020-09-21 19:32:25 +10:00
|
|
|
|
|
|
|
|
using (var devToolsClient = browser.GetDevToolsClient())
|
|
|
|
|
{
|
|
|
|
|
var response = await devToolsClient.Page.GetNavigationHistoryAsync();
|
|
|
|
|
var currentIndex = response.CurrentIndex;
|
|
|
|
|
var entries = response.Entries;
|
|
|
|
|
|
|
|
|
|
Assert.Equal(0, currentIndex);
|
|
|
|
|
Assert.NotNull(entries);
|
|
|
|
|
Assert.True(entries.Count > 0);
|
|
|
|
|
Assert.Equal(CefSharp.DevTools.Page.TransitionType.Typed, entries[0].TransitionType);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Theory]
|
|
|
|
|
//[InlineData("CefSharpTest", "CefSharp Test Cookie", CefExample.ExampleDomain, CookieSameSite.None)]
|
|
|
|
|
[InlineData("CefSharpTest1", "CefSharp Test Cookie2", CefExample.ExampleDomain, CookieSameSite.Lax)]
|
|
|
|
|
public async Task CanSetCookieForDomain(string name, string value, string domain, CookieSameSite sameSite)
|
|
|
|
|
{
|
2023-01-15 11:33:08 +10:00
|
|
|
using (var browser = new ChromiumWebBrowser("www.google.com", useLegacyRenderHandler: false))
|
2020-09-21 19:32:25 +10:00
|
|
|
{
|
2021-10-28 10:30:03 +10:00
|
|
|
await browser.WaitForInitialLoadAsync();
|
2020-09-21 19:32:25 +10:00
|
|
|
|
|
|
|
|
using (var devToolsClient = browser.GetDevToolsClient())
|
|
|
|
|
{
|
2020-10-16 19:57:43 +10:00
|
|
|
var expiry = DateTimeOffset.UtcNow.AddDays(10);
|
|
|
|
|
var response = await devToolsClient.Network.SetCookieAsync(name, value, domain: domain, sameSite: sameSite, expires: expiry.ToUnixTimeSeconds());
|
2020-09-21 19:32:25 +10:00
|
|
|
Assert.True(response.Success, "SetCookieForDomain");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-01-08 17:03:24 +10:00
|
|
|
[Fact]
|
|
|
|
|
public async Task CanUseMultipleDevToolsClientInstancesPerBrowser()
|
|
|
|
|
{
|
2023-01-15 11:33:08 +10:00
|
|
|
using (var browser = new ChromiumWebBrowser("www.google.com", useLegacyRenderHandler: false))
|
2021-01-08 17:03:24 +10:00
|
|
|
{
|
2021-10-28 10:30:03 +10:00
|
|
|
await browser.WaitForInitialLoadAsync();
|
2021-01-08 17:03:24 +10:00
|
|
|
|
|
|
|
|
using (var devToolsClient = browser.GetDevToolsClient())
|
|
|
|
|
{
|
|
|
|
|
var response = await devToolsClient.Browser.GetVersionAsync();
|
|
|
|
|
var jsVersion = response.JsVersion;
|
|
|
|
|
var revision = response.Revision;
|
|
|
|
|
|
|
|
|
|
Assert.NotNull(jsVersion);
|
|
|
|
|
Assert.NotNull(revision);
|
|
|
|
|
|
|
|
|
|
output.WriteLine("DevTools Revision {0}", revision);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
using (var devToolsClient = browser.GetDevToolsClient())
|
|
|
|
|
{
|
|
|
|
|
var response = await devToolsClient.Browser.GetVersionAsync();
|
|
|
|
|
var jsVersion = response.JsVersion;
|
|
|
|
|
var revision = response.Revision;
|
|
|
|
|
|
|
|
|
|
Assert.NotNull(jsVersion);
|
|
|
|
|
Assert.NotNull(revision);
|
|
|
|
|
|
|
|
|
|
output.WriteLine("DevTools Revision {0}", revision);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-04-08 21:38:15 +02:00
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public async Task CanSetUserAgentOverride()
|
|
|
|
|
{
|
2023-01-15 11:33:08 +10:00
|
|
|
using (var browser = new ChromiumWebBrowser("www.google.com", useLegacyRenderHandler: false))
|
2021-04-08 21:38:15 +02:00
|
|
|
{
|
2021-10-28 10:30:03 +10:00
|
|
|
await browser.WaitForInitialLoadAsync();
|
2021-04-08 21:38:15 +02:00
|
|
|
|
|
|
|
|
using (var devToolsClient = browser.GetDevToolsClient())
|
|
|
|
|
{
|
|
|
|
|
var brandsList = new List<UserAgentBrandVersion>();
|
2021-07-05 11:16:25 +10:00
|
|
|
var uab = new UserAgentBrandVersion
|
|
|
|
|
{
|
|
|
|
|
Brand = "Google Chrome",
|
|
|
|
|
Version = "89"
|
|
|
|
|
};
|
2021-04-08 21:38:15 +02:00
|
|
|
brandsList.Add(uab);
|
|
|
|
|
|
2021-07-05 11:16:25 +10:00
|
|
|
var uab2 = new UserAgentBrandVersion
|
|
|
|
|
{
|
|
|
|
|
Brand = "Chromium",
|
|
|
|
|
Version = "89"
|
|
|
|
|
};
|
2021-04-08 21:38:15 +02:00
|
|
|
brandsList.Add(uab2);
|
|
|
|
|
|
2021-07-05 11:16:25 +10:00
|
|
|
var ua = new UserAgentMetadata
|
|
|
|
|
{
|
|
|
|
|
Brands = brandsList,
|
|
|
|
|
Architecture = "arm",
|
|
|
|
|
Model = "Nexus 7",
|
|
|
|
|
Platform = "Android",
|
|
|
|
|
PlatformVersion = "6.0.1",
|
|
|
|
|
FullVersion = "89.0.4389.114",
|
|
|
|
|
Mobile = true
|
|
|
|
|
};
|
2021-04-08 21:38:15 +02:00
|
|
|
|
|
|
|
|
await devToolsClient.Emulation.SetUserAgentOverrideAsync("Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/5(KHTML,likeGeckoChrome/89.0.4389.114Safari/537.36", null, null, ua);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var userAgent = await browser.EvaluateScriptAsync("navigator.userAgent");
|
|
|
|
|
Assert.True(userAgent.Success);
|
|
|
|
|
Assert.Contains("Mozilla/5.0 (Linux; Android 6.0.1; Nexus 7 Build/MOB30X) AppleWebKit/5(KHTML,likeGeckoChrome/89.0.4389.114Safari/537.36", Assert.IsType<string>(userAgent.Result));
|
|
|
|
|
|
|
|
|
|
var brands = await browser.EvaluateScriptAsync("navigator.userAgentData.brands");
|
|
|
|
|
Assert.True(brands.Success);
|
|
|
|
|
dynamic brandsResult = brands.Result;
|
|
|
|
|
Assert.Collection((IEnumerable<dynamic>)brandsResult,
|
|
|
|
|
(dynamic d) =>
|
|
|
|
|
{
|
|
|
|
|
Assert.Equal("Google Chrome", d.brand);
|
|
|
|
|
Assert.Equal("89", d.version);
|
|
|
|
|
},
|
|
|
|
|
(dynamic d) =>
|
|
|
|
|
{
|
|
|
|
|
Assert.Equal("Chromium", d.brand);
|
|
|
|
|
Assert.Equal("89", d.version);
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
var highEntropyValues = await browser.EvaluateScriptAsPromiseAsync("return navigator.userAgentData.getHighEntropyValues(['architecture','model','platform','platformVersion','uaFullVersion'])");
|
|
|
|
|
Assert.True(highEntropyValues.Success);
|
|
|
|
|
dynamic highEntropyValuesResult = highEntropyValues.Result;
|
|
|
|
|
Assert.Equal("arm", highEntropyValuesResult.architecture);
|
|
|
|
|
Assert.Equal("Nexus 7", highEntropyValuesResult.model);
|
|
|
|
|
Assert.Equal("Android", highEntropyValuesResult.platform);
|
|
|
|
|
Assert.Equal("6.0.1", highEntropyValuesResult.platformVersion);
|
|
|
|
|
Assert.Equal("89.0.4389.114", highEntropyValuesResult.uaFullVersion);
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-07-05 02:32:22 +02:00
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public async Task CanSetExtraHTTPHeaders()
|
|
|
|
|
{
|
2023-01-15 11:33:08 +10:00
|
|
|
using (var browser = new ChromiumWebBrowser("about:blank", automaticallyCreateBrowser: false, useLegacyRenderHandler: false))
|
2021-07-05 02:32:22 +02:00
|
|
|
{
|
|
|
|
|
await browser.CreateBrowserAsync();
|
|
|
|
|
|
|
|
|
|
using (var devToolsClient = browser.GetDevToolsClient())
|
|
|
|
|
{
|
|
|
|
|
var extraHeaders = new Headers();
|
|
|
|
|
extraHeaders.SetCommaSeparatedValues("TEST", "0");
|
|
|
|
|
extraHeaders.AppendCommaSeparatedValues("test", " 1 ", "\" 2 \"");
|
|
|
|
|
extraHeaders.AppendCommaSeparatedValues("Test", " 2,5 ");
|
|
|
|
|
|
|
|
|
|
await devToolsClient.Network.SetExtraHTTPHeadersAsync(extraHeaders);
|
|
|
|
|
|
2021-09-10 14:10:18 +10:00
|
|
|
var evtTask = Assert.RaisesAsync<RequestWillBeSentEventArgs>(
|
|
|
|
|
x => devToolsClient.Network.RequestWillBeSent += x,
|
|
|
|
|
x => devToolsClient.Network.RequestWillBeSent -= x,
|
|
|
|
|
async () =>
|
2021-07-05 02:32:22 +02:00
|
|
|
{
|
2021-09-10 14:10:18 +10:00
|
|
|
// enable events
|
|
|
|
|
await devToolsClient.Network.EnableAsync();
|
|
|
|
|
|
|
|
|
|
await browser.LoadUrlAsync("www.google.com");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var xUnitEvent = await evtTask;
|
|
|
|
|
Assert.NotNull(xUnitEvent);
|
|
|
|
|
|
|
|
|
|
var args = xUnitEvent.Arguments;
|
|
|
|
|
|
|
|
|
|
Assert.NotNull(args);
|
|
|
|
|
Assert.NotEmpty(args.RequestId);
|
|
|
|
|
Assert.NotEqual(0, args.Timestamp);
|
|
|
|
|
Assert.NotEqual(0, args.WallTime);
|
|
|
|
|
Assert.NotNull(args.Request);
|
|
|
|
|
Assert.True(args.Request.Headers.TryGetValues("TeSt", out var values));
|
|
|
|
|
Assert.Collection(values,
|
|
|
|
|
v => Assert.Equal("0", v),
|
|
|
|
|
v => Assert.Equal("1", v),
|
|
|
|
|
v => Assert.Equal(" 2 ", v),
|
|
|
|
|
v => Assert.Equal(" 2,5 ", v)
|
|
|
|
|
);
|
|
|
|
|
}
|
2021-07-05 02:32:22 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public async Task ExecuteDevToolsMethodThrowsExceptionWithInvalidMethod()
|
|
|
|
|
{
|
2023-01-15 11:33:08 +10:00
|
|
|
using (var browser = new ChromiumWebBrowser("www.google.com", useLegacyRenderHandler: false))
|
2021-07-05 02:32:22 +02:00
|
|
|
{
|
2021-10-28 10:30:03 +10:00
|
|
|
await browser.WaitForInitialLoadAsync();
|
2021-07-05 02:32:22 +02:00
|
|
|
|
|
|
|
|
using (var devToolsClient = browser.GetDevToolsClient())
|
|
|
|
|
{
|
2021-07-26 04:01:46 +02:00
|
|
|
var ex = await Assert.ThrowsAsync<DevToolsClientException>(
|
2021-07-05 02:32:22 +02:00
|
|
|
() => devToolsClient.ExecuteDevToolsMethodAsync("methoddoesnotexist"));
|
|
|
|
|
|
|
|
|
|
Assert.NotNull(ex.Response);
|
|
|
|
|
Assert.NotEqual(0, ex.Response.MessageId);
|
|
|
|
|
Assert.NotEqual(0, ex.Response.Code);
|
|
|
|
|
Assert.NotNull(ex.Response.Message);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-07-26 04:01:46 +02:00
|
|
|
|
2022-03-22 16:46:04 +10:00
|
|
|
[Fact]
|
|
|
|
|
public async Task CanGetMediaQueries()
|
|
|
|
|
{
|
2023-01-15 11:33:08 +10:00
|
|
|
using (var browser = new ChromiumWebBrowser("https://cefsharp.github.io/demo/mediaqueryhover.html", useLegacyRenderHandler: false))
|
2022-03-22 16:46:04 +10:00
|
|
|
{
|
|
|
|
|
await browser.WaitForInitialLoadAsync();
|
|
|
|
|
|
|
|
|
|
using (var devToolsClient = browser.GetDevToolsClient())
|
|
|
|
|
{
|
|
|
|
|
await devToolsClient.DOM.EnableAsync();
|
|
|
|
|
await devToolsClient.CSS.EnableAsync();
|
|
|
|
|
|
|
|
|
|
var mediaQueries = await devToolsClient.CSS.GetMediaQueriesAsync();
|
|
|
|
|
|
|
|
|
|
Assert.True(mediaQueries.Medias.Count > 0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-07-26 04:01:46 +02:00
|
|
|
[Fact]
|
|
|
|
|
public async Task CanRegisterMultipleEventHandlers()
|
|
|
|
|
{
|
2023-01-15 11:33:08 +10:00
|
|
|
using (var browser = new ChromiumWebBrowser("about:blank", automaticallyCreateBrowser: false, useLegacyRenderHandler: false))
|
2021-07-26 04:01:46 +02:00
|
|
|
{
|
|
|
|
|
await browser.CreateBrowserAsync();
|
|
|
|
|
|
|
|
|
|
using (var devToolsClient = browser.GetDevToolsClient())
|
|
|
|
|
{
|
|
|
|
|
DevToolsEventArgs devToolsEventArgs = null;
|
|
|
|
|
EventHandler<DevToolsEventArgs> devToolsEventHandler = (sender, args) =>
|
|
|
|
|
{
|
|
|
|
|
if (devToolsEventArgs == null)
|
|
|
|
|
{
|
|
|
|
|
devToolsEventArgs = args;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
devToolsClient.DevToolsEvent += devToolsEventHandler;
|
|
|
|
|
|
|
|
|
|
RequestWillBeSentEventArgs requestWillBeSentEventArgs1 = null;
|
|
|
|
|
EventHandler<RequestWillBeSentEventArgs> requestWillBeSentEventHandler1 = (sender, args) =>
|
|
|
|
|
{
|
|
|
|
|
if (requestWillBeSentEventArgs1 == null)
|
|
|
|
|
{
|
|
|
|
|
requestWillBeSentEventArgs1 = args;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
devToolsClient.Network.RequestWillBeSent += requestWillBeSentEventHandler1;
|
|
|
|
|
|
|
|
|
|
RequestWillBeSentEventArgs requestWillBeSentEventArgs2 = null;
|
|
|
|
|
EventHandler<RequestWillBeSentEventArgs> requestWillBeSentEventHandler2 = (sender, args) =>
|
|
|
|
|
{
|
|
|
|
|
if (requestWillBeSentEventArgs2 == null)
|
|
|
|
|
{
|
|
|
|
|
requestWillBeSentEventArgs2 = args;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
devToolsClient.Network.RequestWillBeSent += requestWillBeSentEventHandler2;
|
|
|
|
|
|
|
|
|
|
// enable events
|
|
|
|
|
await devToolsClient.Network.EnableAsync();
|
|
|
|
|
|
|
|
|
|
await browser.LoadUrlAsync("www.google.com");
|
|
|
|
|
|
|
|
|
|
Assert.NotNull(devToolsEventArgs);
|
|
|
|
|
Assert.NotNull(requestWillBeSentEventArgs1);
|
|
|
|
|
Assert.NotNull(requestWillBeSentEventArgs2);
|
|
|
|
|
|
|
|
|
|
Assert.Equal(requestWillBeSentEventArgs1.RequestId, requestWillBeSentEventArgs2.RequestId);
|
|
|
|
|
|
|
|
|
|
// remove second event handler
|
|
|
|
|
devToolsClient.Network.RequestWillBeSent -= requestWillBeSentEventHandler2;
|
|
|
|
|
devToolsEventArgs = null;
|
|
|
|
|
requestWillBeSentEventArgs1 = null;
|
|
|
|
|
requestWillBeSentEventArgs2 = null;
|
|
|
|
|
|
|
|
|
|
await browser.LoadUrlAsync("www.google.com");
|
|
|
|
|
|
|
|
|
|
Assert.NotNull(devToolsEventArgs);
|
|
|
|
|
Assert.NotNull(requestWillBeSentEventArgs1);
|
|
|
|
|
Assert.Null(requestWillBeSentEventArgs2);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
2021-09-10 14:10:18 +10:00
|
|
|
public void CanRemoveEventListenerBeforeAddingOne()
|
2021-07-26 04:01:46 +02:00
|
|
|
{
|
2021-09-10 14:10:18 +10:00
|
|
|
using (var devToolsClient = new DevToolsClient(null))
|
2021-07-26 04:01:46 +02:00
|
|
|
{
|
2021-09-10 14:10:18 +10:00
|
|
|
devToolsClient.Network.RequestWillBeSent -= (sender, args) => { };
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-07-26 04:01:46 +02:00
|
|
|
|
2021-09-10 14:10:18 +10:00
|
|
|
[Fact]
|
|
|
|
|
public void IsIEventProxyRemovedFromConcurrentDictionary()
|
|
|
|
|
{
|
|
|
|
|
const string eventName = "Browser.downloadProgress";
|
|
|
|
|
using (var devToolsClient = new DevToolsClient(null))
|
|
|
|
|
{
|
|
|
|
|
EventHandler<DownloadProgressEventArgs> eventHandler1 = (object sender, DownloadProgressEventArgs args) => { };
|
|
|
|
|
EventHandler<DownloadProgressEventArgs> eventHandler2 = (object sender, DownloadProgressEventArgs args) => { };
|
|
|
|
|
|
|
|
|
|
devToolsClient.AddEventHandler(eventName, eventHandler1);
|
|
|
|
|
devToolsClient.AddEventHandler(eventName, eventHandler2);
|
|
|
|
|
|
|
|
|
|
var hasHandlers = devToolsClient.RemoveEventHandler(eventName, eventHandler1);
|
|
|
|
|
|
|
|
|
|
Assert.True(hasHandlers);
|
|
|
|
|
|
|
|
|
|
hasHandlers = devToolsClient.RemoveEventHandler(eventName, eventHandler2);
|
|
|
|
|
|
|
|
|
|
Assert.False(hasHandlers);
|
2021-07-26 04:01:46 +02:00
|
|
|
}
|
|
|
|
|
}
|
2020-09-21 19:32:25 +10:00
|
|
|
}
|
|
|
|
|
}
|