From b300ef6439fd4c8f93f06eafbe31c38dde03cf85 Mon Sep 17 00:00:00 2001 From: Julien Lebosquain Date: Tue, 22 Oct 2024 11:33:34 +0200 Subject: [PATCH] Integration tests: add retries to OpenWindowWithClick (#17259) --- .../ElementExtensions.cs | 35 +++++++++++++------ 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/tests/Avalonia.IntegrationTests.Appium/ElementExtensions.cs b/tests/Avalonia.IntegrationTests.Appium/ElementExtensions.cs index 18e9912faf..535a6497d2 100644 --- a/tests/Avalonia.IntegrationTests.Appium/ElementExtensions.cs +++ b/tests/Avalonia.IntegrationTests.Appium/ElementExtensions.cs @@ -151,7 +151,25 @@ namespace Avalonia.IntegrationTests.Appium if (delay is not null) Thread.Sleep((int)delay.Value.TotalMilliseconds); - var newHandle = session.WindowHandles.Except(oldHandles).SingleOrDefault(); + string? newHandle = null; + IWebElement? newChildWindow = null; + + for (var i = 0; i < 10; ++i) + { + newHandle = session.WindowHandles.Except(oldHandles).SingleOrDefault(); + if (newHandle is not null) + break; + + // If a new window handle hasn't been added to the session then it's likely + // that a child window was opened. These don't appear in session.WindowHandles + // so we have to use an XPath query to get hold of it. + var newChildWindows = session.FindElements(By.XPath("//Window")); + newChildWindow = newChildWindows.Except(oldChildWindows).SingleOrDefault(); + if (newChildWindow is not null) + break; + + Thread.Sleep(100); + } if (newHandle is not null) { @@ -164,20 +182,17 @@ namespace Avalonia.IntegrationTests.Appium session.SwitchTo().Window(oldHandle); }); } - else - { - // If a new window handle hasn't been added to the session then it's likely - // that a child window was opened. These don't appear in session.WindowHandles - // so we have to use an XPath query to get hold of it. - var newChildWindows = session.FindElements(By.XPath("//Window")); - var pageSource = session.PageSource; - var childWindow = Assert.Single(newChildWindows.Except(oldChildWindows)); + if (newChildWindow is not null) + { return Disposable.Create(() => { - childWindow.SendKeys(Keys.Alt + Keys.F4 + Keys.Alt); + newChildWindow.SendKeys(Keys.Alt + Keys.F4 + Keys.Alt); }); } + + Assert.Fail("Could not find the newly opened window"); + return Disposable.Empty; } else {