From 0ef46044ffe17e02d3e1c2c5e19d9e8b875f43bb Mon Sep 17 00:00:00 2001 From: Szabolcs Deme Date: Mon, 24 Jul 2023 18:47:15 +0200 Subject: [PATCH 01/11] Trying to fix flaky UI test --- .../Extensions/TestCaseUITestContextExtensions.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs b/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs index f1931e5..0c67d61 100644 --- a/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs +++ b/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs @@ -98,7 +98,12 @@ public static async Task TestBaseThemeSiteSettingsAsync( await context.SetCheckboxValueAsync(By.Id("HideMenu"), isChecked: true); var byDeleteButton = By.CssSelector("#Editor .delete-button").OfAnyVisibility(); - while (context.Exists(byDeleteButton.Safely())) await context.ClickReliablyOnAsync(byDeleteButton); + while (context.Exists(byDeleteButton.Safely())) + { + await context.GoToAdminRelativeUrlAsync("/Lombiq.BaseTheme/Admin/Index"); + context.WaitForPageLoad(); + await context.ClickReliablyOnAsync(byDeleteButton); + } selectFromMediaLibraryAsync ??= async () => { From 96639ffd998edd3553531ce4ba8ba450611fc716 Mon Sep 17 00:00:00 2001 From: Szabolcs Deme Date: Mon, 24 Jul 2023 19:10:57 +0200 Subject: [PATCH 02/11] Trying to fix UI test in a different way --- .../Extensions/TestCaseUITestContextExtensions.cs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs b/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs index 0c67d61..b95d7e4 100644 --- a/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs +++ b/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs @@ -98,12 +98,7 @@ public static async Task TestBaseThemeSiteSettingsAsync( await context.SetCheckboxValueAsync(By.Id("HideMenu"), isChecked: true); var byDeleteButton = By.CssSelector("#Editor .delete-button").OfAnyVisibility(); - while (context.Exists(byDeleteButton.Safely())) - { - await context.GoToAdminRelativeUrlAsync("/Lombiq.BaseTheme/Admin/Index"); - context.WaitForPageLoad(); - await context.ClickReliablyOnAsync(byDeleteButton); - } + while (context.Exists(byDeleteButton.Safely())) await context.ClickReliablyOnAsync(byDeleteButton.Safely()); selectFromMediaLibraryAsync ??= async () => { From 742edbf2590aa3a41832b47d10f87a2b512485e3 Mon Sep 17 00:00:00 2001 From: Szabolcs Deme Date: Mon, 24 Jul 2023 20:05:39 +0200 Subject: [PATCH 03/11] Still trying to fix UI tests --- .../Extensions/TestCaseUITestContextExtensions.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs b/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs index b95d7e4..450bf54 100644 --- a/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs +++ b/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs @@ -98,7 +98,12 @@ public static async Task TestBaseThemeSiteSettingsAsync( await context.SetCheckboxValueAsync(By.Id("HideMenu"), isChecked: true); var byDeleteButton = By.CssSelector("#Editor .delete-button").OfAnyVisibility(); - while (context.Exists(byDeleteButton.Safely())) await context.ClickReliablyOnAsync(byDeleteButton.Safely()); + while (context.Exists(byDeleteButton.Safely())) + { + await context.GoToAdminRelativeUrlAsync("/Lombiq.BaseTheme/Admin/Index"); + context.WaitForPageLoad(); + await context.ClickReliablyOnAsync(byDeleteButton.Safely()); + } selectFromMediaLibraryAsync ??= async () => { From 5c15a9f1eaf24c8ecbfac53add5e896c32213abc Mon Sep 17 00:00:00 2001 From: Szabolcs Deme Date: Mon, 24 Jul 2023 21:12:55 +0200 Subject: [PATCH 04/11] Trying to fix UI test in a different way --- .../Extensions/TestCaseUITestContextExtensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs b/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs index 450bf54..44c4161 100644 --- a/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs +++ b/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs @@ -100,9 +100,9 @@ public static async Task TestBaseThemeSiteSettingsAsync( var byDeleteButton = By.CssSelector("#Editor .delete-button").OfAnyVisibility(); while (context.Exists(byDeleteButton.Safely())) { + await context.ClickReliablyOnAsync(byDeleteButton.Safely()); await context.GoToAdminRelativeUrlAsync("/Lombiq.BaseTheme/Admin/Index"); context.WaitForPageLoad(); - await context.ClickReliablyOnAsync(byDeleteButton.Safely()); } selectFromMediaLibraryAsync ??= async () => From c2c55112e98bf99b98d9fd5560922c42e676d665 Mon Sep 17 00:00:00 2001 From: Szabolcs Deme Date: Mon, 24 Jul 2023 21:46:02 +0200 Subject: [PATCH 05/11] Using Task.Delay to try to fix the test --- .../Extensions/TestCaseUITestContextExtensions.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs b/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs index 44c4161..638d63d 100644 --- a/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs +++ b/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs @@ -100,7 +100,11 @@ public static async Task TestBaseThemeSiteSettingsAsync( var byDeleteButton = By.CssSelector("#Editor .delete-button").OfAnyVisibility(); while (context.Exists(byDeleteButton.Safely())) { + await context.GoToAdminRelativeUrlAsync("/Lombiq.BaseTheme/Admin/Index"); + context.WaitForPageLoad(); + await Task.Delay(1000); await context.ClickReliablyOnAsync(byDeleteButton.Safely()); + await Task.Delay(1000); await context.GoToAdminRelativeUrlAsync("/Lombiq.BaseTheme/Admin/Index"); context.WaitForPageLoad(); } From 5878f3c73c914a450bd3f17f0b1f0ea666c52aae Mon Sep 17 00:00:00 2001 From: Szabolcs Deme Date: Mon, 24 Jul 2023 23:28:30 +0200 Subject: [PATCH 06/11] Trying to use just Task.Delay to resolve the issue --- .../Extensions/TestCaseUITestContextExtensions.cs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs b/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs index 638d63d..66f2d31 100644 --- a/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs +++ b/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs @@ -100,13 +100,8 @@ public static async Task TestBaseThemeSiteSettingsAsync( var byDeleteButton = By.CssSelector("#Editor .delete-button").OfAnyVisibility(); while (context.Exists(byDeleteButton.Safely())) { - await context.GoToAdminRelativeUrlAsync("/Lombiq.BaseTheme/Admin/Index"); - context.WaitForPageLoad(); - await Task.Delay(1000); await context.ClickReliablyOnAsync(byDeleteButton.Safely()); await Task.Delay(1000); - await context.GoToAdminRelativeUrlAsync("/Lombiq.BaseTheme/Admin/Index"); - context.WaitForPageLoad(); } selectFromMediaLibraryAsync ??= async () => From f03e871143cb85f43069c6fc212670638749301c Mon Sep 17 00:00:00 2001 From: Szabolcs Deme Date: Tue, 25 Jul 2023 01:08:53 +0200 Subject: [PATCH 07/11] Trying to fix UI test a different way --- .../Extensions/TestCaseUITestContextExtensions.cs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs b/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs index 66f2d31..127207b 100644 --- a/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs +++ b/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs @@ -98,11 +98,7 @@ public static async Task TestBaseThemeSiteSettingsAsync( await context.SetCheckboxValueAsync(By.Id("HideMenu"), isChecked: true); var byDeleteButton = By.CssSelector("#Editor .delete-button").OfAnyVisibility(); - while (context.Exists(byDeleteButton.Safely())) - { - await context.ClickReliablyOnAsync(byDeleteButton.Safely()); - await Task.Delay(1000); - } + while (context.Exists(byDeleteButton.Safely())) await context.Get(byDeleteButton).ClickReliablyAsync(context); selectFromMediaLibraryAsync ??= async () => { From 1455727540528184b52440871483706acf4bfba6 Mon Sep 17 00:00:00 2001 From: Szabolcs Deme Date: Tue, 25 Jul 2023 01:40:34 +0200 Subject: [PATCH 08/11] Still using Task.Delay to fix the test --- .../Extensions/TestCaseUITestContextExtensions.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs b/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs index 127207b..66f2d31 100644 --- a/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs +++ b/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs @@ -98,7 +98,11 @@ public static async Task TestBaseThemeSiteSettingsAsync( await context.SetCheckboxValueAsync(By.Id("HideMenu"), isChecked: true); var byDeleteButton = By.CssSelector("#Editor .delete-button").OfAnyVisibility(); - while (context.Exists(byDeleteButton.Safely())) await context.Get(byDeleteButton).ClickReliablyAsync(context); + while (context.Exists(byDeleteButton.Safely())) + { + await context.ClickReliablyOnAsync(byDeleteButton.Safely()); + await Task.Delay(1000); + } selectFromMediaLibraryAsync ??= async () => { From d6e4af04e33cfda5979f77bb6958a7bc2d0beb7e Mon Sep 17 00:00:00 2001 From: Szabolcs Deme Date: Tue, 25 Jul 2023 01:47:12 +0200 Subject: [PATCH 09/11] Trying yet another different fix and adding a comment --- .../Extensions/TestCaseUITestContextExtensions.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs b/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs index 66f2d31..e81c446 100644 --- a/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs +++ b/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs @@ -97,12 +97,12 @@ public static async Task TestBaseThemeSiteSettingsAsync( await context.GoToAdminRelativeUrlAsync("/Lombiq.BaseTheme/Admin/Index"); await context.SetCheckboxValueAsync(By.Id("HideMenu"), isChecked: true); - var byDeleteButton = By.CssSelector("#Editor .delete-button").OfAnyVisibility(); - while (context.Exists(byDeleteButton.Safely())) - { - await context.ClickReliablyOnAsync(byDeleteButton.Safely()); - await Task.Delay(1000); - } + var deletButtonCssClasses = "#Editor .delete-button"; + context.Exists(By.CssSelector(deletButtonCssClasses).OfAnyVisibility()); + + // We need to click on this button with JavaScirpt, since it appears and moves when the UI test tries to click + // it with "await context.ClickReliablyOnAsync", causing flakiness. + context.ExecuteScript("document.querySelector('" + deletButtonCssClasses + "').click();"); selectFromMediaLibraryAsync ??= async () => { From 8cb36e0856381a35617dc4dde2d52fadd98d6b4d Mon Sep 17 00:00:00 2001 From: Szabolcs Deme Date: Tue, 25 Jul 2023 01:52:45 +0200 Subject: [PATCH 10/11] Spelling --- .../Extensions/TestCaseUITestContextExtensions.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs b/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs index e81c446..95ba0d1 100644 --- a/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs +++ b/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs @@ -97,12 +97,12 @@ public static async Task TestBaseThemeSiteSettingsAsync( await context.GoToAdminRelativeUrlAsync("/Lombiq.BaseTheme/Admin/Index"); await context.SetCheckboxValueAsync(By.Id("HideMenu"), isChecked: true); - var deletButtonCssClasses = "#Editor .delete-button"; - context.Exists(By.CssSelector(deletButtonCssClasses).OfAnyVisibility()); + var deleteButtonCssClasses = "#Editor .delete-button"; + context.Exists(By.CssSelector(deleteButtonCssClasses).OfAnyVisibility()); - // We need to click on this button with JavaScirpt, since it appears and moves when the UI test tries to click + // We need to click on this button with JS, since it appears and moves when the UI test tries to click // it with "await context.ClickReliablyOnAsync", causing flakiness. - context.ExecuteScript("document.querySelector('" + deletButtonCssClasses + "').click();"); + context.ExecuteScript("document.querySelector('" + deleteButtonCssClasses + "').click();"); selectFromMediaLibraryAsync ??= async () => { From 92a9828679663416e802718df4437074564b5f21 Mon Sep 17 00:00:00 2001 From: Szabolcs Deme Date: Tue, 25 Jul 2023 14:35:25 +0200 Subject: [PATCH 11/11] Trying to fix BaseTheme UI test, without using Task.Delay --- .../Extensions/TestCaseUITestContextExtensions.cs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs b/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs index 95ba0d1..d15a286 100644 --- a/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs +++ b/Lombiq.BaseTheme.Tests.UI/Extensions/TestCaseUITestContextExtensions.cs @@ -97,12 +97,8 @@ public static async Task TestBaseThemeSiteSettingsAsync( await context.GoToAdminRelativeUrlAsync("/Lombiq.BaseTheme/Admin/Index"); await context.SetCheckboxValueAsync(By.Id("HideMenu"), isChecked: true); - var deleteButtonCssClasses = "#Editor .delete-button"; - context.Exists(By.CssSelector(deleteButtonCssClasses).OfAnyVisibility()); - - // We need to click on this button with JS, since it appears and moves when the UI test tries to click - // it with "await context.ClickReliablyOnAsync", causing flakiness. - context.ExecuteScript("document.querySelector('" + deleteButtonCssClasses + "').click();"); + await context.ClickReliablyOnAsync(By.XPath("//div[contains(@class, 'thumb-container')]")); + await context.ClickReliablyOnAsync(By.CssSelector("#Editor .delete-button").OfAnyVisibility()); selectFromMediaLibraryAsync ??= async () => { @@ -113,6 +109,9 @@ await context.ClickReliablyOnAsync(By.XPath( }; byIcon ??= By.CssSelector("head link[href*='/media/Icons/oc-favicon.ico'][rel='shortcut icon'][type='image/x-icon']"); + // We are saving the settings, so we leave some time for the editor button to appear, without using + // Task.Delay(). + await context.ClickReliablyOnSubmitAsync(); await context.ClickReliablyOnAsync(By.CssSelector("#Editor .btn-group .btn-secondary:not([disabled]):not(.disabled)")); await selectFromMediaLibraryAsync();