|
|
@@ -30,7 +30,7 @@ namespace Avalonia.IntegrationTests.Appium
|
|
|
tab.Click();
|
|
|
return;
|
|
|
}
|
|
|
- catch (WebDriverException e) when (retry++ < 3)
|
|
|
+ catch (WebDriverException) when (retry++ < 3)
|
|
|
{
|
|
|
// MacOS sometimes seems to need a bit of time to get itself back in order after switching out
|
|
|
// of fullscreen.
|
|
|
@@ -49,19 +49,16 @@ namespace Avalonia.IntegrationTests.Appium
|
|
|
{
|
|
|
mainWindow.Click();
|
|
|
|
|
|
- var windows = _session.FindElements(By.XPath("XCUIElementTypeWindow"));
|
|
|
- var mainWindowIndex = GetWindowOrder(windows, "MainWindow");
|
|
|
- var secondaryWindowIndex = GetWindowOrder(windows, "SecondaryWindow");
|
|
|
+ var secondaryWindowIndex = GetWindowOrder("SecondaryWindow");
|
|
|
|
|
|
- Assert.Equal(0, secondaryWindowIndex);
|
|
|
- Assert.Equal(1, mainWindowIndex);
|
|
|
+ Assert.Equal(1, secondaryWindowIndex);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
[PlatformFact(TestPlatforms.MacOS)]
|
|
|
public void WindowOrder_Modal_Dialog_Stays_InFront_Of_Parent_When_Clicking_Resize_Grip()
|
|
|
{
|
|
|
- var mainWindow = FindWindow(_session, "MainWindow");
|
|
|
+ var mainWindow = GetWindow("MainWindow");
|
|
|
|
|
|
using (OpenWindow(new PixelSize(200, 100), ShowWindowMode.Modal, WindowStartupLocation.Manual))
|
|
|
{
|
|
|
@@ -70,24 +67,21 @@ namespace Avalonia.IntegrationTests.Appium
|
|
|
.ClickAndHold()
|
|
|
.Perform();
|
|
|
|
|
|
- var windows = _session.FindElements(By.XPath("XCUIElementTypeWindow"));
|
|
|
- var mainWindowIndex = GetWindowOrder(windows, "MainWindow");
|
|
|
- var secondaryWindowIndex = GetWindowOrder(windows, "SecondaryWindow");
|
|
|
+ var secondaryWindowIndex = GetWindowOrder("SecondaryWindow");
|
|
|
|
|
|
new Actions(_session)
|
|
|
.MoveToElement(mainWindow, 100, 1)
|
|
|
.Release()
|
|
|
.Perform();
|
|
|
|
|
|
- Assert.Equal(0, secondaryWindowIndex);
|
|
|
- Assert.Equal(1, mainWindowIndex);
|
|
|
+ Assert.Equal(1, secondaryWindowIndex);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
[PlatformFact(TestPlatforms.MacOS)]
|
|
|
public void WindowOrder_Modal_Dialog_Stays_InFront_Of_Parent_When_In_Fullscreen()
|
|
|
{
|
|
|
- var mainWindow = FindWindow(_session, "MainWindow");
|
|
|
+ var mainWindow = GetWindow("MainWindow");
|
|
|
var buttons = mainWindow.GetChromeButtons();
|
|
|
|
|
|
buttons.maximize.Click();
|
|
|
@@ -98,14 +92,8 @@ namespace Avalonia.IntegrationTests.Appium
|
|
|
{
|
|
|
using (OpenWindow(new PixelSize(200, 100), ShowWindowMode.Modal, WindowStartupLocation.Manual))
|
|
|
{
|
|
|
- var windows = _session.FindElements(By.XPath("XCUIElementTypeWindow"));
|
|
|
- var mainWindowIndex = GetWindowOrder(windows, "MainWindow");
|
|
|
- var secondaryWindowIndex = GetWindowOrder(windows, "SecondaryWindow");
|
|
|
-
|
|
|
- Assert.Equal(0, secondaryWindowIndex);
|
|
|
- Assert.Equal(1, mainWindowIndex);
|
|
|
-
|
|
|
- Thread.Sleep(5000);
|
|
|
+ var secondaryWindowIndex = GetWindowOrder("SecondaryWindow");
|
|
|
+ Assert.Equal(1, secondaryWindowIndex);
|
|
|
}
|
|
|
}
|
|
|
finally
|
|
|
@@ -122,13 +110,8 @@ namespace Avalonia.IntegrationTests.Appium
|
|
|
using (OpenWindow(new PixelSize(200, 100), ShowWindowMode.Owned, WindowStartupLocation.Manual))
|
|
|
{
|
|
|
mainWindow.Click();
|
|
|
-
|
|
|
- var windows = _session.FindElements(By.XPath("XCUIElementTypeWindow"));
|
|
|
- var mainWindowIndex = GetWindowOrder(windows, "MainWindow");
|
|
|
- var secondaryWindowIndex = GetWindowOrder(windows, "SecondaryWindow");
|
|
|
-
|
|
|
- Assert.Equal(0, secondaryWindowIndex);
|
|
|
- Assert.Equal(1, mainWindowIndex);
|
|
|
+ var secondaryWindowIndex = GetWindowOrder("SecondaryWindow");
|
|
|
+ Assert.Equal(1, secondaryWindowIndex);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -141,22 +124,35 @@ namespace Avalonia.IntegrationTests.Appium
|
|
|
{
|
|
|
mainWindow.Click();
|
|
|
|
|
|
- var windows = _session.FindElements(By.XPath("XCUIElementTypeWindow"));
|
|
|
- var mainWindowIndex = GetWindowOrder(windows, "MainWindow");
|
|
|
- var secondaryWindowIndex = GetWindowOrder(windows, "SecondaryWindow");
|
|
|
+ var secondaryWindowIndex = GetWindowOrder("SecondaryWindow");
|
|
|
|
|
|
- Assert.Equal(1, secondaryWindowIndex);
|
|
|
- Assert.Equal(0, mainWindowIndex);
|
|
|
+ Assert.Equal(2, secondaryWindowIndex);
|
|
|
|
|
|
var sendToBack = _session.FindElementByAccessibilityId("SendToBack");
|
|
|
sendToBack.Click();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ [PlatformFact(TestPlatforms.MacOS)]
|
|
|
+ public void WindowOrder_Owned_Is_Correct_After_Closing_Window()
|
|
|
+ {
|
|
|
+ using (OpenWindow(new PixelSize(300, 500), ShowWindowMode.Owned, WindowStartupLocation.CenterOwner))
|
|
|
+ {
|
|
|
+ // Open a second child window, and close it.
|
|
|
+ using (OpenWindow(new PixelSize(200, 200), ShowWindowMode.Owned, WindowStartupLocation.CenterOwner))
|
|
|
+ {
|
|
|
+ }
|
|
|
+
|
|
|
+ var secondaryWindowIndex = GetWindowOrder("SecondaryWindow");
|
|
|
+
|
|
|
+ Assert.Equal(1, secondaryWindowIndex);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
[PlatformFact(TestPlatforms.MacOS)]
|
|
|
public void Parent_Window_Has_Disabled_ChromeButtons_When_Modal_Dialog_Shown()
|
|
|
{
|
|
|
- var window = FindWindow(_session, "MainWindow");
|
|
|
+ var window = GetWindow("MainWindow");
|
|
|
var (closeButton, miniaturizeButton, zoomButton) = window.GetChromeButtons();
|
|
|
|
|
|
Assert.True(closeButton.Enabled);
|
|
|
@@ -176,7 +172,7 @@ namespace Avalonia.IntegrationTests.Appium
|
|
|
{
|
|
|
using (OpenWindow(new PixelSize(200, 100), ShowWindowMode.Modal, WindowStartupLocation.CenterOwner))
|
|
|
{
|
|
|
- var secondaryWindow = FindWindow(_session, "SecondaryWindow");
|
|
|
+ var secondaryWindow = GetWindow("SecondaryWindow");
|
|
|
var (closeButton, miniaturizeButton, zoomButton) = secondaryWindow.GetChromeButtons();
|
|
|
|
|
|
Assert.True(closeButton.Enabled);
|
|
|
@@ -192,7 +188,7 @@ namespace Avalonia.IntegrationTests.Appium
|
|
|
{
|
|
|
using (OpenWindow(new PixelSize(200, 100), mode, WindowStartupLocation.Manual))
|
|
|
{
|
|
|
- var secondaryWindow = FindWindow(_session, "SecondaryWindow");
|
|
|
+ var secondaryWindow = GetWindow("SecondaryWindow");
|
|
|
var (_, miniaturizeButton, _) = secondaryWindow.GetChromeButtons();
|
|
|
|
|
|
miniaturizeButton.Click();
|
|
|
@@ -220,7 +216,7 @@ namespace Avalonia.IntegrationTests.Appium
|
|
|
// causes Appium to think it's a different window.
|
|
|
OpenWindow(null, ShowWindowMode.Owned, WindowStartupLocation.Manual);
|
|
|
|
|
|
- var secondaryWindow = FindWindow(_session, "SecondaryWindow");
|
|
|
+ var secondaryWindow = GetWindow("SecondaryWindow");
|
|
|
var hideButton = secondaryWindow.FindElementByAccessibilityId("HideButton");
|
|
|
|
|
|
hideButton.Click();
|
|
|
@@ -236,7 +232,7 @@ namespace Avalonia.IntegrationTests.Appium
|
|
|
_session.FindElementByAccessibilityId("RestoreAll").Click();
|
|
|
|
|
|
// Close the window manually.
|
|
|
- secondaryWindow = FindWindow(_session, "SecondaryWindow");
|
|
|
+ secondaryWindow = GetWindow("SecondaryWindow");
|
|
|
secondaryWindow.GetChromeButtons().close.Click();
|
|
|
}
|
|
|
|
|
|
@@ -259,18 +255,19 @@ namespace Avalonia.IntegrationTests.Appium
|
|
|
return showButton.OpenWindowWithClick();
|
|
|
}
|
|
|
|
|
|
- private static int GetWindowOrder(IReadOnlyCollection<AppiumWebElement> elements, string identifier)
|
|
|
+ private AppiumWebElement GetWindow(string identifier)
|
|
|
{
|
|
|
- return elements.TakeWhile(x =>
|
|
|
- x.FindElementByXPath("XCUIElementTypeWindow")?.GetAttribute("identifier") != identifier).Count();
|
|
|
+ // The Avalonia a11y tree currently exposes two nested Window elements, this is a bug and should be fixed
|
|
|
+ // but in the meantime use the `parent::' selector to return the parent "real" window.
|
|
|
+ return _session.FindElementByXPath(
|
|
|
+ $"XCUIElementTypeWindow//*[@identifier='{identifier}']/parent::XCUIElementTypeWindow");
|
|
|
}
|
|
|
|
|
|
- private static AppiumWebElement FindWindow(AppiumDriver<AppiumWebElement> session, string identifier)
|
|
|
+ private int GetWindowOrder(string identifier)
|
|
|
{
|
|
|
- var windows = session.FindElementsByXPath("XCUIElementTypeWindow");
|
|
|
- return windows.First(x =>
|
|
|
- x.FindElementsByXPath("XCUIElementTypeWindow")
|
|
|
- .Any(y => y.GetAttribute("identifier") == identifier));
|
|
|
+ var window = GetWindow(identifier);
|
|
|
+ var order = window.FindElementByXPath("//*[@identifier='Order']");
|
|
|
+ return int.Parse(order.Text);
|
|
|
}
|
|
|
|
|
|
public enum ShowWindowMode
|