// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using BasicTestApp; using Microsoft.AspNetCore.Blazor.E2ETest.Infrastructure; using Microsoft.AspNetCore.Blazor.E2ETest.Infrastructure.ServerFixtures; using OpenQA.Selenium; using OpenQA.Selenium.Interactions; using OpenQA.Selenium.Support.UI; using System; using Xunit; using Xunit.Abstractions; namespace Microsoft.AspNetCore.Blazor.E2ETest.Tests { public class EventTest : BasicTestAppTestBase { public EventTest( BrowserFixture browserFixture, ToggleExecutionModeServerFixture serverFixture, ITestOutputHelper output) : base(browserFixture, serverFixture, output) { Navigate(ServerPathBase, noReload: true); MountTestComponent(); } [Fact] public void FocusEvents_CanTrigger() { MountTestComponent(); var input = Browser.FindElement(By.Id("input")); var output = Browser.FindElement(By.Id("output")); Assert.Equal(string.Empty, output.Text); // Focus the target, verify onfocusin is fired input.Click(); WaitAssert.Equal("onfocus,onfocusin,", () => output.Text); // Focus something else, verify onfocusout is also fired var other = Browser.FindElement(By.Id("other")); other.Click(); WaitAssert.Equal("onfocus,onfocusin,onblur,onfocusout,", () => output.Text); } [Fact] public void MouseOverAndMouseOut_CanTrigger() { MountTestComponent(); var input = Browser.FindElement(By.Id("mouseover_input")); var output = Browser.FindElement(By.Id("output")); Assert.Equal(string.Empty, output.Text); var other = Browser.FindElement(By.Id("other")); // Mouse over the button and then back off var actions = new Actions(Browser) .MoveToElement(input) .MoveToElement(other); actions.Perform(); WaitAssert.Equal("onmouseover,onmouseout,", () => output.Text); } [Fact] public void MouseMove_CanTrigger() { MountTestComponent(); var input = Browser.FindElement(By.Id("mousemove_input")); var output = Browser.FindElement(By.Id("output")); Assert.Equal(string.Empty, output.Text); // Move a little bit var actions = new Actions(Browser) .MoveToElement(input) .MoveToElement(input, 10, 10); actions.Perform(); WaitAssert.Contains("onmousemove,", () => output.Text); } [Fact] public void MouseDownAndMouseUp_CanTrigger() { MountTestComponent(); var input = Browser.FindElement(By.Id("mousedown_input")); var output = Browser.FindElement(By.Id("output")); Assert.Equal(string.Empty, output.Text); var other = Browser.FindElement(By.Id("other")); // Mousedown var actions = new Actions(Browser).ClickAndHold(input); actions.Perform(); WaitAssert.Equal("onmousedown,", () => output.Text); actions = new Actions(Browser).Release(input); actions.Perform(); WaitAssert.Equal("onmousedown,onmouseup,", () => output.Text); } [Fact] public void PreventDefault_AppliesToFormOnSubmitHandlers() { var appElement = MountTestComponent(); appElement.FindElement(By.Id("form-1-button")).Click(); WaitAssert.Equal("Event was handled", () => appElement.FindElement(By.Id("event-handled")).Text); } [Fact] public void PreventDefault_DotNotApplyByDefault() { var appElement = MountTestComponent(); appElement.FindElement(By.Id("form-2-button")).Click(); Assert.Contains("about:blank", Browser.Url); } } }