Skip to content

Commit fa7b116

Browse files
titusfortnerpujaganidiemol
authored
Release 4.22 Updates (#1765)
* Blog post - still needs examples links * update version and links in downloads * [examples] reorganize code examples for BiDi * [examples] update Ruby BiDi code * [examples] update Python examples * update code examples * more example updates * update all BiDi documentation * update links to bidi documentation * wrong github reference * restore java and javascript low level bidi examples --------- Co-authored-by: Puja Jagani <[email protected]> Co-authored-by: Diego Molina <[email protected]>
1 parent 795d542 commit fa7b116

File tree

97 files changed

+1463
-3859
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

97 files changed

+1463
-3859
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using System.Collections.Generic;
2+
using Microsoft.VisualStudio.TestTools.UnitTesting;
3+
using OpenQA.Selenium;
4+
using OpenQA.Selenium.Chrome;
5+
6+
namespace SeleniumDocs.BiDi.CDP
7+
{
8+
[TestClass]
9+
public class CDPTest : BaseChromeTest
10+
{
11+
[TestMethod]
12+
public void SetCookie()
13+
{
14+
var cookie = new Dictionary<string, object>
15+
{
16+
{ "name", "cheese" },
17+
{ "value", "gouda" },
18+
{ "domain", "www.selenium.dev" },
19+
{ "secure", true }
20+
};
21+
((ChromeDriver)driver).ExecuteCdpCommand("Network.setCookie", cookie);
22+
23+
driver.Url = "https://www.selenium.dev";
24+
Cookie cheese = driver.Manage().Cookies.GetCookieNamed("cheese");
25+
Assert.AreEqual("gouda", cheese.Value);
26+
27+
}
28+
}
29+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Threading.Tasks;
4+
using Microsoft.IdentityModel.Tokens;
5+
using Microsoft.VisualStudio.TestTools.UnitTesting;
6+
using OpenQA.Selenium;
7+
using OpenQA.Selenium.Support.UI;
8+
9+
namespace SeleniumDocs.BiDi.CDP
10+
{
11+
[TestClass]
12+
public class LoggingTest : BaseChromeTest
13+
{
14+
[TestMethod]
15+
public async Task ConsoleLogs()
16+
{
17+
driver.Url = "https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html";
18+
19+
using IJavaScriptEngine monitor = new JavaScriptEngine(driver);
20+
var messages = new List<string>();
21+
monitor.JavaScriptConsoleApiCalled += (_, e) =>
22+
{
23+
messages.Add(e.MessageContent);
24+
};
25+
await monitor.StartEventMonitoring();
26+
27+
driver.FindElement(By.Id("consoleLog")).Click();
28+
driver.FindElement(By.Id("consoleError")).Click();
29+
new WebDriverWait(driver, TimeSpan.FromSeconds(5)).Until(_ => messages.Count > 1);
30+
monitor.StopEventMonitoring();
31+
32+
Assert.IsTrue(messages.Contains("Hello, world!"));
33+
Assert.IsTrue(messages.Contains("I am console error"));
34+
}
35+
36+
[TestMethod]
37+
public async Task JsErrors()
38+
{
39+
driver.Url = "https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html";
40+
41+
using IJavaScriptEngine monitor = new JavaScriptEngine(driver);
42+
var messages = new List<string>();
43+
monitor.JavaScriptExceptionThrown += (_, e) =>
44+
{
45+
messages.Add(e.Message);
46+
};
47+
await monitor.StartEventMonitoring();
48+
49+
driver.FindElement(By.Id("jsException")).Click();
50+
new WebDriverWait(driver, TimeSpan.FromSeconds(5)).Until(_ => !messages.IsNullOrEmpty());
51+
monitor.StopEventMonitoring();
52+
53+
Assert.IsTrue(messages.Contains("Uncaught"));
54+
}
55+
}
56+
}
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,24 @@
1-
using System;
2-
using System.Collections;
31
using System.Collections.Generic;
42
using System.Threading.Tasks;
5-
using Microsoft.IdentityModel.Tokens;
63
using Microsoft.VisualStudio.TestTools.UnitTesting;
74
using OpenQA.Selenium;
8-
using OpenQA.Selenium.Support.UI;
5+
using OpenQA.Selenium.DevTools;
6+
using System.Linq;
7+
using OpenQA.Selenium.DevTools.V126.Network;
8+
using OpenQA.Selenium.DevTools.V126.Performance;
99

10-
namespace SeleniumDocs.Bidirectional.ChromeDevTools
10+
11+
namespace SeleniumDocs.BiDi.CDP
1112
{
1213
[TestClass]
13-
public class BidiApiTest : BaseChromeTest
14+
public class NetworkTest : BaseTest
1415
{
16+
[TestInitialize]
17+
public void Startup()
18+
{
19+
StartDriver("126");
20+
}
21+
1522
[TestMethod]
1623
public async Task BasicAuthentication()
1724
{
@@ -20,104 +27,16 @@ public async Task BasicAuthentication()
2027
UriMatcher = uri => uri.AbsoluteUri.Contains("herokuapp"),
2128
Credentials = new PasswordCredentials("admin", "admin")
2229
};
23-
2430
var networkInterceptor = driver.Manage().Network;
2531
networkInterceptor.AddAuthenticationHandler(handler);
26-
2732
await networkInterceptor.StartMonitoring();
33+
2834
driver.Navigate().GoToUrl("https://the-internet.herokuapp.com/basic_auth");
2935
await networkInterceptor.StopMonitoring();
3036

3137
Assert.AreEqual("Congratulations! You must have the proper credentials.",
3238
driver.FindElement(By.TagName("p")).Text);
3339
}
34-
35-
[TestMethod]
36-
public async Task PinScript()
37-
{
38-
driver.Url = "https://www.selenium.dev/selenium/web/xhtmlTest.html";
39-
var element = driver.FindElement(By.Id("id1"));
40-
41-
var key = await new JavaScriptEngine(driver).PinScript("return arguments;");
42-
43-
var arguments = ((WebDriver)driver).ExecuteScript(key, 1, true, element);
44-
45-
var expected = new List<object>
46-
{
47-
1L,
48-
true,
49-
element
50-
};
51-
CollectionAssert.AreEqual(expected, (ICollection)arguments);
52-
}
53-
54-
[TestMethod]
55-
public async Task MutatedElements()
56-
{
57-
driver.Url = "https://www.selenium.dev/selenium/web/dynamic.html";
58-
59-
var mutations = new List<IWebElement>();
60-
using IJavaScriptEngine monitor = new JavaScriptEngine(driver);
61-
monitor.DomMutated += (_, e) =>
62-
{
63-
var locator = By.CssSelector($"*[data-__webdriver_id='{e.AttributeData.TargetId}']");
64-
mutations.Add(driver.FindElement(locator));
65-
};
66-
67-
await monitor.StartEventMonitoring();
68-
await monitor.EnableDomMutationMonitoring();
69-
70-
driver.FindElement(By.Id("reveal")).Click();
71-
72-
new WebDriverWait(driver, TimeSpan.FromSeconds(5)).Until(_ => !mutations.IsNullOrEmpty());
73-
await monitor.DisableDomMutationMonitoring();
74-
monitor.StopEventMonitoring();
75-
76-
var revealed = driver.FindElement(By.Id("revealed"));
77-
Assert.AreEqual(revealed, mutations[0]);
78-
}
79-
80-
[TestMethod]
81-
public async Task ConsoleLogs()
82-
{
83-
driver.Url = "https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html";
84-
85-
using IJavaScriptEngine monitor = new JavaScriptEngine(driver);
86-
var messages = new List<string>();
87-
monitor.JavaScriptConsoleApiCalled += (_, e) =>
88-
{
89-
messages.Add(e.MessageContent);
90-
};
91-
92-
await monitor.StartEventMonitoring();
93-
driver.FindElement(By.Id("consoleLog")).Click();
94-
driver.FindElement(By.Id("consoleError")).Click();
95-
new WebDriverWait(driver, TimeSpan.FromSeconds(5)).Until(_ => messages.Count > 1);
96-
monitor.StopEventMonitoring();
97-
98-
Assert.IsTrue(messages.Contains("Hello, world!"));
99-
Assert.IsTrue(messages.Contains("I am console error"));
100-
}
101-
102-
[TestMethod]
103-
public async Task JsErrors()
104-
{
105-
driver.Url = "https://www.selenium.dev/selenium/web/bidi/logEntryAdded.html";
106-
107-
using IJavaScriptEngine monitor = new JavaScriptEngine(driver);
108-
var messages = new List<string>();
109-
monitor.JavaScriptExceptionThrown += (_, e) =>
110-
{
111-
messages.Add(e.Message);
112-
};
113-
114-
await monitor.StartEventMonitoring();
115-
driver.FindElement(By.Id("jsException")).Click();
116-
new WebDriverWait(driver, TimeSpan.FromSeconds(5)).Until(_ => !messages.IsNullOrEmpty());
117-
monitor.StopEventMonitoring();
118-
119-
Assert.IsTrue(messages.Contains("Uncaught"));
120-
}
12140

12241
[TestMethod]
12342
public async Task RecordNetworkResponse()
@@ -129,8 +48,8 @@ public async Task RecordNetworkResponse()
12948
{
13049
contentType.Add(e.ResponseHeaders["content-type"]);
13150
};
132-
13351
await networkInterceptor.StartMonitoring();
52+
13453
driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/blank.html");
13554
await networkInterceptor.StopMonitoring();
13655

@@ -149,11 +68,10 @@ public async Task TransformNetworkResponse()
14968
Body = "Creamy, delicious cheese!"
15069
}
15170
};
152-
15371
INetwork networkInterceptor = driver.Manage().Network;
15472
networkInterceptor.AddResponseHandler(handler);
155-
15673
await networkInterceptor.StartMonitoring();
74+
15775
driver.Navigate().GoToUrl("https://www.selenium.dev");
15876
await networkInterceptor.StopMonitoring();
15977

@@ -174,16 +92,60 @@ public async Task TransformNetworkRequest()
17492
return request;
17593
}
17694
};
177-
17895
INetwork networkInterceptor = driver.Manage().Network;
17996
networkInterceptor.AddRequestHandler(handler);
180-
18197
await networkInterceptor.StartMonitoring();
98+
18299
driver.Url = "https://www.selenium.dev/selenium/web/devToolsRequestInterceptionTest.html";
183100
driver.FindElement(By.TagName("button")).Click();
184101
await networkInterceptor.StopMonitoring();
185102

186103
Assert.AreEqual("two", driver.FindElement(By.Id("result")).Text);
187104
}
105+
106+
[TestMethod]
107+
public async Task PerformanceMetrics()
108+
{
109+
driver.Url = "https://www.selenium.dev/selenium/web/frameset.html";
110+
111+
var session = ((IDevTools)driver).GetDevToolsSession();
112+
var domains = session.GetVersionSpecificDomains<OpenQA.Selenium.DevTools.V126.DevToolsSessionDomains>();
113+
114+
await domains.Performance.Enable(new OpenQA.Selenium.DevTools.V126.Performance.EnableCommandSettings());
115+
var metricsResponse =
116+
await session.SendCommand<GetMetricsCommandSettings, GetMetricsCommandResponse>(
117+
new GetMetricsCommandSettings()
118+
);
119+
120+
var metrics = metricsResponse.Metrics.ToDictionary(
121+
dict => dict.Name,
122+
dict => dict.Value
123+
);
124+
125+
Assert.IsTrue(metrics["DevToolsCommandDuration"] > 0);
126+
Assert.AreEqual(12, metrics["Frames"]);
127+
}
128+
129+
[TestMethod]
130+
public async Task SetCookie()
131+
{
132+
var session = ((IDevTools)driver).GetDevToolsSession();
133+
var domains = session.GetVersionSpecificDomains<OpenQA.Selenium.DevTools.V126.DevToolsSessionDomains>();
134+
await domains.Network.Enable(new OpenQA.Selenium.DevTools.V126.Network.EnableCommandSettings());
135+
136+
var cookieCommandSettings = new SetCookieCommandSettings
137+
{
138+
Name = "cheese",
139+
Value = "gouda",
140+
Domain = "www.selenium.dev",
141+
Secure = true
142+
};
143+
await domains.Network.SetCookie(cookieCommandSettings);
144+
145+
driver.Url = "https://www.selenium.dev";
146+
OpenQA.Selenium.Cookie cheese = driver.Manage().Cookies.GetCookieNamed("cheese");
147+
Assert.AreEqual("gouda", cheese.Value);
148+
}
149+
188150
}
189151
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
using System;
2+
using System.Collections;
3+
using System.Collections.Generic;
4+
using System.Threading.Tasks;
5+
using Microsoft.IdentityModel.Tokens;
6+
using Microsoft.VisualStudio.TestTools.UnitTesting;
7+
using OpenQA.Selenium;
8+
using OpenQA.Selenium.Support.UI;
9+
10+
namespace SeleniumDocs.BiDi.CDP
11+
{
12+
[TestClass]
13+
public class ScriptTest : BaseChromeTest
14+
{
15+
[TestMethod]
16+
public async Task PinScript()
17+
{
18+
driver.Url = "https://www.selenium.dev/selenium/web/xhtmlTest.html";
19+
var element = driver.FindElement(By.Id("id1"));
20+
21+
var key = await new JavaScriptEngine(driver).PinScript("return arguments;");
22+
var arguments = ((WebDriver)driver).ExecuteScript(key, 1, true, element);
23+
24+
var expected = new List<object>
25+
{
26+
1L,
27+
true,
28+
element
29+
};
30+
CollectionAssert.AreEqual(expected, (ICollection)arguments);
31+
}
32+
33+
[TestMethod]
34+
public async Task MutatedElements()
35+
{
36+
driver.Url = "https://www.selenium.dev/selenium/web/dynamic.html";
37+
var mutations = new List<IWebElement>();
38+
39+
using IJavaScriptEngine monitor = new JavaScriptEngine(driver);
40+
monitor.DomMutated += (_, e) =>
41+
{
42+
var locator = By.CssSelector($"*[data-__webdriver_id='{e.AttributeData.TargetId}']");
43+
mutations.Add(driver.FindElement(locator));
44+
};
45+
await monitor.StartEventMonitoring();
46+
await monitor.EnableDomMutationMonitoring();
47+
48+
driver.FindElement(By.Id("reveal")).Click();
49+
50+
new WebDriverWait(driver, TimeSpan.FromSeconds(5)).Until(_ => !mutations.IsNullOrEmpty());
51+
await monitor.DisableDomMutationMonitoring();
52+
monitor.StopEventMonitoring();
53+
54+
var revealed = driver.FindElement(By.Id("revealed"));
55+
Assert.AreEqual(revealed, mutations[0]);
56+
}
57+
}
58+
}

0 commit comments

Comments
 (0)