Skip to content

Commit ba8dd72

Browse files
committed
Make flaky focus tests more deterministic and more verbose.
1 parent fc26337 commit ba8dd72

File tree

2 files changed

+24
-5
lines changed

2 files changed

+24
-5
lines changed

src/Components/test/E2ETest/ServerRenderingTests/FocusOnNavigateTest.cs

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// The .NET Foundation licenses this file to you under the MIT license.
33

44
using Components.TestServer.RazorComponents;
5+
using Microsoft.AspNetCore.Components.E2ETest;
56
using Microsoft.AspNetCore.Components.E2ETest.Infrastructure;
67
using Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures;
78
using Microsoft.AspNetCore.E2ETesting;
@@ -59,19 +60,34 @@ public void FocusIsMoved_OnEnhancedNavigation_WhenAnyElementMatchesSelector()
5960
{
6061
Navigate($"{ServerPathBase}/focus-on-navigate");
6162
Browser.Click(By.LinkText("Statically rendered"));
62-
Browser.True(() => Browser.SwitchTo().ActiveElement().GetDomAttribute("data-focus-on-navigate") is not null);
63+
Browser.True(
64+
() => Browser.SwitchTo().ActiveElement().GetDomAttribute("data-focus-on-navigate") is not null,
65+
TimeSpan.FromSeconds(5)
66+
);
6367
}
6468

6569
[Fact]
6670
public void FocusIsPreserved_OnEnhancedFormPost_WhenAnyElementMatchesSelector()
6771
{
6872
Navigate($"{ServerPathBase}/focus-on-navigate");
6973
Browser.Click(By.LinkText("Form submission"));
70-
Browser.True(() => Browser.SwitchTo().ActiveElement().GetDomAttribute("id") == "value-to-submit");
71-
Browser.FindElement(By.Id("value-to-submit")).ReplaceText("Some value");
72-
Browser.Click(By.Id("submit-button"));
74+
string valueToSubmit = "value-to-submit";
75+
AssertFocusPreserved(valueToSubmit);
76+
Browser.FindElement(By.Id(valueToSubmit)).ReplaceText("Some value");
77+
string submitButtonId = "submit-button";
78+
Browser.Click(By.Id(submitButtonId));
7379
Browser.Equal("Some value", () => Browser.FindElement(By.Id("submitted-value")).Text);
74-
Browser.True(() => Browser.SwitchTo().ActiveElement().GetDomAttribute("id") == "submit-button");
80+
AssertFocusPreserved(submitButtonId);
81+
}
82+
83+
private void AssertFocusPreserved(string elementId)
84+
{
85+
Browser.WaitForElementToBeVisible(By.Id(elementId));
86+
Browser.True(
87+
() => Browser.SwitchTo().ActiveElement().GetDomAttribute("id") == elementId,
88+
TimeSpan.FromSeconds(5),
89+
$"Expected element with id '{elementId}' to be focused, but found '{Browser.SwitchTo().ActiveElement().GetDomAttribute("id")}' instead."
90+
);
7591
}
7692

7793
[Fact]

src/Shared/E2ETesting/WaitAssert.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ public static void True(this IWebDriver driver, Func<bool> actual)
3535
public static void True(this IWebDriver driver, Func<bool> actual, TimeSpan timeout)
3636
=> WaitAssertCore(driver, () => Assert.True(actual()), timeout);
3737

38+
public static void True(this IWebDriver driver, Func<bool> actual, TimeSpan timeout, string message)
39+
=> WaitAssertCore(driver, () => Assert.True(actual(), message), timeout);
40+
3841
public static void False(this IWebDriver driver, Func<bool> actual)
3942
=> WaitAssertCore(driver, () => Assert.False(actual()));
4043

0 commit comments

Comments
 (0)