diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6812a535d..a1b8072a8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,8 @@ The following section list all changes in 1.0.0 preview 01.
### Added
List of new features.
+- Added support for triggering `@ontoggle` event handlers through a dedicated `Toggle()` method. By [@egil](https://github.com/egil) in [#248](https://github.com/egil/bUnit/pull/248).
+
### Changed
List of changes in existing functionality.
diff --git a/src/bunit.web/EventDispatchExtensions/DetailsElementEventDispatcherExtensions.cs b/src/bunit.web/EventDispatchExtensions/DetailsElementEventDispatcherExtensions.cs
new file mode 100644
index 000000000..5cef04dfa
--- /dev/null
+++ b/src/bunit.web/EventDispatchExtensions/DetailsElementEventDispatcherExtensions.cs
@@ -0,0 +1,31 @@
+#if NET5_0
+using System;
+using System.Threading.Tasks;
+using AngleSharp.Dom;
+
+namespace Bunit
+{
+ ///
+ /// General event dispatch helper extension methods.
+ ///
+ public static class DetailsElementEventDispatcherExtensions
+ {
+ ///
+ /// Raises the @ontoggle event on
+ /// to the event handler.
+ ///
+ /// The element to raise the event on.
+ public static void Toggle(this IElement element)
+ => _ = ToggleAsync(element, EventArgs.Empty);
+
+ ///
+ /// Raises the @ontoggle event on , passing the provided
+ /// to the event handler.
+ ///
+ /// The element to raise the event on.
+ /// The event arguments to pass to the event handler.
+ /// A task that completes when the event handler is done.
+ private static Task ToggleAsync(this IElement element, EventArgs eventArgs) => element.TriggerEventAsync("ontoggle", eventArgs);
+ }
+}
+#endif
diff --git a/tests/bunit.testassets/SampleComponents/ToggleableDetails.razor b/tests/bunit.testassets/SampleComponents/ToggleableDetails.razor
new file mode 100644
index 000000000..5dcb306e3
--- /dev/null
+++ b/tests/bunit.testassets/SampleComponents/ToggleableDetails.razor
@@ -0,0 +1,19 @@
+
+ @if (detailsExpanded)
+ {
+
Read the details carefully!
+ }
+
+ Summary
+ Detailed content
+
+
+
+@code {
+ bool detailsExpanded;
+
+ void OnToggle()
+ {
+ detailsExpanded = !detailsExpanded;
+ }
+}
diff --git a/tests/bunit.web.tests/EventDispatchExtensions/DetailsElementEventDispatcherExtensionsTest.cs b/tests/bunit.web.tests/EventDispatchExtensions/DetailsElementEventDispatcherExtensionsTest.cs
new file mode 100644
index 000000000..01f26ecd4
--- /dev/null
+++ b/tests/bunit.web.tests/EventDispatchExtensions/DetailsElementEventDispatcherExtensionsTest.cs
@@ -0,0 +1,28 @@
+#if NET5_0
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Bunit;
+using Bunit.TestAssets.SampleComponents;
+using Shouldly;
+using Xunit;
+
+namespace Bunit.EventDispatchExtensions
+{
+ public class DetailsElementEventDispatcherExtensionsTest : TestContext
+ {
+ [Fact(DisplayName = "Toggle raises ontoggle events")]
+ public void Test200()
+ {
+ var cut = RenderComponent();
+ cut.FindAll("div > p").Count.ShouldBe(0);
+
+ cut.Find("details").Toggle();
+
+ cut.FindAll("div > p").Count.ShouldBe(1);
+ }
+ }
+}
+#endif