diff --git a/dotnet/src/webdriver/Chromium/ChromiumAndroidOptions.cs b/dotnet/src/webdriver/Chromium/ChromiumAndroidOptions.cs
index 02ed81b3c97a0..726aae094d17b 100644
--- a/dotnet/src/webdriver/Chromium/ChromiumAndroidOptions.cs
+++ b/dotnet/src/webdriver/Chromium/ChromiumAndroidOptions.cs
@@ -19,6 +19,8 @@
 
 using OpenQA.Selenium.Internal;
 
+#nullable enable
+
 namespace OpenQA.Selenium.Chromium
 {
     /// <summary>
@@ -26,9 +28,6 @@ namespace OpenQA.Selenium.Chromium
     /// </summary>
     public class ChromiumAndroidOptions : AndroidOptions
     {
-        private string androidProcess;
-        private bool androidUseRunningApp;
-
         /// <summary>
         /// Initializes a new instance of the <see cref="ChromiumAndroidOptions"/> class.
         /// </summary>
@@ -40,19 +39,11 @@ public ChromiumAndroidOptions(string androidPackage) : base(androidPackage)
         /// <summary>
         /// Gets or sets a value indicating whether to use an already running app.
         /// </summary>
-        public bool UseRunningApp
-        {
-            get { return this.androidUseRunningApp; }
-            set { this.androidUseRunningApp = value; }
-        }
+        public bool UseRunningApp { get; set; }
 
         /// <summary>
         /// Gets or sets the process name of the Activity hosting the app.
         /// </summary>
-        public string AndroidProcess
-        {
-            get { return this.androidProcess; }
-            set { this.androidProcess = value; }
-        }
+        public string? AndroidProcess { get; set; }
     }
 }
diff --git a/dotnet/src/webdriver/Chromium/ChromiumMobileEmulationDeviceSettings.cs b/dotnet/src/webdriver/Chromium/ChromiumMobileEmulationDeviceSettings.cs
index b52cccd6b63f3..849a24a9a469d 100644
--- a/dotnet/src/webdriver/Chromium/ChromiumMobileEmulationDeviceSettings.cs
+++ b/dotnet/src/webdriver/Chromium/ChromiumMobileEmulationDeviceSettings.cs
@@ -17,6 +17,8 @@
 // under the License.
 // </copyright>
 
+#nullable enable
+
 namespace OpenQA.Selenium.Chromium
 {
     /// <summary>
@@ -25,12 +27,6 @@ namespace OpenQA.Selenium.Chromium
     /// </summary>
     public class ChromiumMobileEmulationDeviceSettings
     {
-        private string userAgent = string.Empty;
-        private long width;
-        private long height;
-        private double pixelRatio;
-        private bool enableTouchEvents = true;
-
         /// <summary>
         /// Initializes a new instance of the <see cref="ChromiumMobileEmulationDeviceSettings"/> class.
         /// </summary>
@@ -43,59 +39,39 @@ public ChromiumMobileEmulationDeviceSettings()
         /// </summary>
         /// <param name="userAgent">The user agent string to be used by the browser when emulating
         /// a mobile device.</param>
-        public ChromiumMobileEmulationDeviceSettings(string userAgent)
+        public ChromiumMobileEmulationDeviceSettings(string? userAgent)
         {
-            this.userAgent = userAgent;
+            this.UserAgent = userAgent;
         }
 
         /// <summary>
         /// Gets or sets the user agent string to be used by the browser when emulating
         /// a mobile device.
         /// </summary>
-        public string UserAgent
-        {
-            get { return this.userAgent; }
-            set { this.userAgent = value; }
-        }
+        public string? UserAgent { get; set; }
 
         /// <summary>
         /// Gets or sets the width in pixels to be used by the browser when emulating
         /// a mobile device.
         /// </summary>
-        public long Width
-        {
-            get { return this.width; }
-            set { this.width = value; }
-        }
+        public long Width { get; set; }
 
         /// <summary>
         /// Gets or sets the height in pixels to be used by the browser when emulating
         /// a mobile device.
         /// </summary>
-        public long Height
-        {
-            get { return this.height; }
-            set { this.height = value; }
-        }
+        public long Height { get; set; }
 
         /// <summary>
         /// Gets or sets the pixel ratio to be used by the browser when emulating
         /// a mobile device.
         /// </summary>
-        public double PixelRatio
-        {
-            get { return this.pixelRatio; }
-            set { this.pixelRatio = value; }
-        }
+        public double PixelRatio { get; set; }
 
         /// <summary>
         /// Gets or sets a value indicating whether touch events should be enabled by
         /// the browser when emulating a mobile device. Defaults to <see langword="true"/>.
         /// </summary>
-        public bool EnableTouchEvents
-        {
-            get { return this.enableTouchEvents; }
-            set { this.enableTouchEvents = value; }
-        }
+        public bool EnableTouchEvents { get; set; } = true;
     }
 }
diff --git a/dotnet/src/webdriver/Chromium/ChromiumNetworkConditions.cs b/dotnet/src/webdriver/Chromium/ChromiumNetworkConditions.cs
index b117ce2819bc7..78329f1722edb 100644
--- a/dotnet/src/webdriver/Chromium/ChromiumNetworkConditions.cs
+++ b/dotnet/src/webdriver/Chromium/ChromiumNetworkConditions.cs
@@ -21,6 +21,8 @@
 using System.Collections.Generic;
 using System.Text.Json.Serialization;
 
+#nullable enable
+
 namespace OpenQA.Selenium.Chromium
 {
     /// <summary>
@@ -28,8 +30,6 @@ namespace OpenQA.Selenium.Chromium
     /// </summary>
     public class ChromiumNetworkConditions
     {
-        private bool offline;
-        private TimeSpan latency = TimeSpan.Zero;
         private long downloadThroughput = 0;
         private long uploadThroughput = 0;
 
@@ -37,21 +37,13 @@ public class ChromiumNetworkConditions
         /// Gets or sets a value indicating whether the network is offline. Defaults to <see langword="false"/>.
         /// </summary>
         [JsonPropertyName("offline")]
-        public bool IsOffline
-        {
-            get { return this.offline; }
-            set { this.offline = value; }
-        }
+        public bool IsOffline { get; set; }
 
         /// <summary>
         /// Gets or sets the simulated latency of the connection. Typically given in milliseconds.
         /// </summary>
         [JsonIgnore]
-        public TimeSpan Latency
-        {
-            get { return this.latency; }
-            set { this.latency = value; }
-        }
+        public TimeSpan Latency { get; set; } = TimeSpan.Zero;
 
         /// <summary>
         /// Gets or sets the throughput of the network connection in bytes/second for downloading.
@@ -59,12 +51,12 @@ public TimeSpan Latency
         [JsonPropertyName("download_throughput")]
         public long DownloadThroughput
         {
-            get { return this.downloadThroughput; }
+            get => this.downloadThroughput;
             set
             {
                 if (value < 0)
                 {
-                    throw new WebDriverException("Downlod throughput cannot be negative.");
+                    throw new WebDriverException("Download throughput cannot be negative.");
                 }
 
                 this.downloadThroughput = value;
@@ -77,7 +69,7 @@ public long DownloadThroughput
         [JsonPropertyName("upload_throughput")]
         public long UploadThroughput
         {
-            get { return this.uploadThroughput; }
+            get => this.uploadThroughput;
             set
             {
                 if (value < 0)
@@ -92,13 +84,7 @@ public long UploadThroughput
         [JsonPropertyName("latency")]
         [JsonInclude]
         [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
-        internal long? SerializableLatency
-        {
-            get
-            {
-                return Convert.ToInt64(this.latency.TotalMilliseconds);
-            }
-        }
+        internal long? SerializableLatency => Convert.ToInt64(this.Latency.TotalMilliseconds);
 
         /// <summary>
         /// Creates a ChromiumNetworkConditions object from a dictionary of key-value pairs.
@@ -108,24 +94,24 @@ internal long? SerializableLatency
         public static ChromiumNetworkConditions FromDictionary(Dictionary<string, object> dictionary)
         {
             ChromiumNetworkConditions conditions = new ChromiumNetworkConditions();
-            if (dictionary.ContainsKey("offline"))
+            if (dictionary.TryGetValue("offline", out object? offline))
             {
-                conditions.IsOffline = (bool)dictionary["offline"];
+                conditions.IsOffline = (bool)offline;
             }
 
-            if (dictionary.ContainsKey("latency"))
+            if (dictionary.TryGetValue("latency", out object? latency))
             {
-                conditions.Latency = TimeSpan.FromMilliseconds(Convert.ToDouble(dictionary["latency"]));
+                conditions.Latency = TimeSpan.FromMilliseconds(Convert.ToDouble(latency));
             }
 
-            if (dictionary.ContainsKey("upload_throughput"))
+            if (dictionary.TryGetValue("upload_throughput", out object? uploadThroughput))
             {
-                conditions.UploadThroughput = (long)dictionary["upload_throughput"];
+                conditions.UploadThroughput = (long)uploadThroughput;
             }
 
-            if (dictionary.ContainsKey("download_throughput"))
+            if (dictionary.TryGetValue("download_throughput", out object? downloadThroughput))
             {
-                conditions.DownloadThroughput = (long)dictionary["download_throughput"];
+                conditions.DownloadThroughput = (long)downloadThroughput;
             }
 
             return conditions;
@@ -135,11 +121,12 @@ public static ChromiumNetworkConditions FromDictionary(Dictionary<string, object
         /// Sets the upload and download throughput properties to the same value.
         /// </summary>
         /// <param name="throughput">The throughput of the network connection in bytes/second for both upload and download.</param>
+        /// <exception cref="ArgumentOutOfRangeException">If <paramref name="throughput"/> is negative.</exception>
         public void SetBidirectionalThroughput(long throughput)
         {
             if (throughput < 0)
             {
-                throw new ArgumentException("Throughput values cannot be negative.", nameof(throughput));
+                throw new ArgumentOutOfRangeException(nameof(throughput), "Throughput values cannot be negative.");
             }
 
             this.uploadThroughput = throughput;
diff --git a/dotnet/src/webdriver/Chromium/ChromiumPerformanceLoggingPreferences.cs b/dotnet/src/webdriver/Chromium/ChromiumPerformanceLoggingPreferences.cs
index 9521fdb294193..65761bdedc645 100644
--- a/dotnet/src/webdriver/Chromium/ChromiumPerformanceLoggingPreferences.cs
+++ b/dotnet/src/webdriver/Chromium/ChromiumPerformanceLoggingPreferences.cs
@@ -20,6 +20,8 @@
 using System;
 using System.Collections.Generic;
 
+#nullable enable
+
 namespace OpenQA.Selenium.Chromium
 {
     /// <summary>
@@ -28,49 +30,36 @@ namespace OpenQA.Selenium.Chromium
     /// </summary>
     public class ChromiumPerformanceLoggingPreferences
     {
-        private bool isCollectingNetworkEvents = true;
-        private bool isCollectingPageEvents = true;
         private TimeSpan bufferUsageReportingInterval = TimeSpan.FromMilliseconds(1000);
-        private List<string> tracingCategories = new List<string>();
+        private readonly List<string> tracingCategories = new List<string>();
 
         /// <summary>
         /// Gets or sets a value indicating whether Chromium will collect events from the Network domain.
         /// Defaults to <see langword="true"/>.
         /// </summary>
-        public bool IsCollectingNetworkEvents
-        {
-            get { return this.isCollectingNetworkEvents; }
-            set { this.isCollectingNetworkEvents = value; }
-        }
+        public bool IsCollectingNetworkEvents { get; set; } = true;
 
         /// <summary>
         /// Gets or sets a value indicating whether Chromium will collect events from the Page domain.
         /// Defaults to <see langword="true"/>.
         /// </summary>
-        public bool IsCollectingPageEvents
-        {
-            get { return this.isCollectingPageEvents; }
-            set { this.isCollectingPageEvents = value; }
-        }
+        public bool IsCollectingPageEvents { get; set; } = true;
 
         /// <summary>
         /// Gets or sets the interval between Chromium DevTools trace buffer usage events.
         /// Defaults to 1000 milliseconds.
         /// </summary>
         /// <exception cref="ArgumentException">Thrown when an attempt is made to set
-        /// the value to a time span of less tnan or equal to zero milliseconds.</exception>
+        /// the value to a time span of less than or equal to zero.</exception>
         public TimeSpan BufferUsageReportingInterval
         {
-            get
-            {
-                return this.bufferUsageReportingInterval;
-            }
+            get => this.bufferUsageReportingInterval;
 
             set
             {
-                if (value.TotalMilliseconds <= 0)
+                if (value <= TimeSpan.Zero)
                 {
-                    throw new ArgumentException("Interval must be greater than zero.");
+                    throw new ArgumentException("Interval must be greater than zero.", nameof(value));
                 }
 
                 this.bufferUsageReportingInterval = value;
@@ -80,23 +69,13 @@ public TimeSpan BufferUsageReportingInterval
         /// <summary>
         /// Gets a comma-separated list of the categories for which tracing is enabled.
         /// </summary>
-        public string TracingCategories
-        {
-            get
-            {
-                if (this.tracingCategories.Count == 0)
-                {
-                    return string.Empty;
-                }
-
-                return string.Join(",", this.tracingCategories.ToArray());
-            }
-        }
+        public string TracingCategories => string.Join(",", this.tracingCategories);
 
         /// <summary>
         /// Adds a single category to the list of Chromium tracing categories for which events should be collected.
         /// </summary>
         /// <param name="category">The category to add.</param>
+        /// <exception cref="ArgumentException">If <paramref name="category"/> is <see langword="null"/> or <see cref="string.Empty"/>.</exception>
         public void AddTracingCategory(string category)
         {
             if (string.IsNullOrEmpty(category))
@@ -111,15 +90,17 @@ public void AddTracingCategory(string category)
         /// Adds categories to the list of Chromium tracing categories for which events should be collected.
         /// </summary>
         /// <param name="categoriesToAdd">An array of categories to add.</param>
+        /// <exception cref="ArgumentNullException">If <paramref name="categoriesToAdd"/> is <see langword="null"/>.</exception>
         public void AddTracingCategories(params string[] categoriesToAdd)
         {
-            this.AddTracingCategories(new List<string>(categoriesToAdd));
+            this.AddTracingCategories((IEnumerable<string>)categoriesToAdd);
         }
 
         /// <summary>
         /// Adds categories to the list of Chromium tracing categories for which events should be collected.
         /// </summary>
         /// <param name="categoriesToAdd">An <see cref="IEnumerable{T}"/> object of categories to add.</param>
+        /// <exception cref="ArgumentNullException">If <paramref name="categoriesToAdd"/> is <see langword="null"/>.</exception>
         public void AddTracingCategories(IEnumerable<string> categoriesToAdd)
         {
             if (categoriesToAdd == null)