From 6c35e2e84d8c15dfcbd8ce38b3cc843f28ffccac Mon Sep 17 00:00:00 2001 From: Mackinnon Buck Date: Thu, 6 Aug 2020 14:02:30 -0700 Subject: [PATCH] Fixed flaky test 'CanInfluenceHeadDuringPrerender'. (#24624) --- .../ServerExecutionTests/PrerenderingTest.cs | 31 ++++++------------- .../PrerenderedHeadComponent.razor | 16 ++++++++++ 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/src/Components/test/E2ETest/ServerExecutionTests/PrerenderingTest.cs b/src/Components/test/E2ETest/ServerExecutionTests/PrerenderingTest.cs index c049aa99f3..856740a65f 100644 --- a/src/Components/test/E2ETest/ServerExecutionTests/PrerenderingTest.cs +++ b/src/Components/test/E2ETest/ServerExecutionTests/PrerenderingTest.cs @@ -88,44 +88,31 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests { Navigate("/prerendered/prerendered-head"); - var metaWithBindings = Browser.FindElement(By.Id("meta-with-bindings")); - var metaNoBindings = Browser.FindElement(By.Id("meta-no-bindings")); - // Validate updated head during prerender Browser.Equal("Initial title", () => Browser.Title); - Browser.Equal("Initial meta content", () => metaWithBindings.GetAttribute("content")); - Browser.Equal("Immutable meta content", () => metaNoBindings.GetAttribute("content")); + Browser.Equal("Initial meta content", () => GetMetaWithBindings().GetAttribute("content")); + Browser.Equal("Immutable meta content", () => GetMetaWithoutBindings().GetAttribute("content")); BeginInteractivity(); - // Wait for elements to be recreated with internal ids to permit mutation - metaWithBindings = WaitForNewElement(metaWithBindings, "meta-with-bindings"); - metaNoBindings = WaitForNewElement(metaNoBindings, "meta-no-bindings"); + // Wait until the component has rerendered + Browser.Exists(By.Id("interactive-indicator")); // Validate updated head after prerender Browser.Equal("Initial title", () => Browser.Title); - Browser.Equal("Initial meta content", () => metaWithBindings.GetAttribute("content")); - Browser.Equal("Immutable meta content", () => metaNoBindings.GetAttribute("content")); + Browser.Equal("Initial meta content", () => GetMetaWithBindings().GetAttribute("content")); + Browser.Equal("Immutable meta content", () => GetMetaWithoutBindings().GetAttribute("content")); // Change parameter of meta component var inputMetaBinding = Browser.FindElement(By.Id("input-meta-binding")); inputMetaBinding.Clear(); inputMetaBinding.SendKeys("Updated meta content\n"); - // Wait for meta tag to be recreated with new attributes - metaWithBindings = WaitForNewElement(metaWithBindings, "meta-with-bindings"); - // Validate new meta content attribute - Browser.Equal("Updated meta content", () => metaWithBindings.GetAttribute("content")); + Browser.Equal("Updated meta content", () => GetMetaWithBindings().GetAttribute("content")); - IWebElement WaitForNewElement(IWebElement existingElement, string id) - { - var newElement = existingElement; - - Browser.NotEqual(existingElement, () => newElement = Browser.FindElement(By.Id(id)) ?? newElement); - - return newElement; - } + IWebElement GetMetaWithBindings() => Browser.FindElement(By.Id("meta-with-bindings")); + IWebElement GetMetaWithoutBindings() => Browser.FindElement(By.Id("meta-no-bindings")); } [Fact] diff --git a/src/Components/test/testassets/BasicTestApp/PrerenderedHeadComponent.razor b/src/Components/test/testassets/BasicTestApp/PrerenderedHeadComponent.razor index 7a879fc3fe..9ced4765eb 100644 --- a/src/Components/test/testassets/BasicTestApp/PrerenderedHeadComponent.razor +++ b/src/Components/test/testassets/BasicTestApp/PrerenderedHeadComponent.razor @@ -23,7 +23,23 @@ +@if (isInteractive) +{ + Interactive mode enabled. +} + @code { private string title = "Initial title"; private string metaContent = "Initial meta content"; + + private bool isInteractive; + + protected override void OnAfterRender(bool firstRender) + { + if (firstRender) + { + isInteractive = true; + StateHasChanged(); + } + } }