Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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 <puja.jagani93@gmail.com> Co-authored-by: Diego Molina <diemol@users.noreply.github.com>
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
Lines changed: 29 additions & 0 deletions
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+
}
Lines changed: 56 additions & 0 deletions
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
}
Lines changed: 58 additions & 0 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /