MenuTests.cs 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. using OpenQA.Selenium;
  2. using OpenQA.Selenium.Interactions;
  3. using Xunit;
  4. namespace Avalonia.IntegrationTests.Appium
  5. {
  6. [Collection("Default")]
  7. public abstract class MenuTests : TestBase
  8. {
  9. public MenuTests(DefaultAppFixture fixture)
  10. : base(fixture, "Menu")
  11. {
  12. var reset = Session.FindElementByAccessibilityId("MenuClickedMenuItemReset");
  13. reset.Click();
  14. var clickedMenuItem = Session.FindElementByAccessibilityId("ClickedMenuItem");
  15. Assert.Equal("None", clickedMenuItem.Text);
  16. }
  17. [Fact]
  18. public void Click_Child()
  19. {
  20. var rootMenuItem = Session.FindElementByAccessibilityId("RootMenuItem");
  21. rootMenuItem.SendClick();
  22. var childMenuItem = Session.FindElementByAccessibilityId("Child1MenuItem");
  23. childMenuItem.SendClick();
  24. var clickedMenuItem = Session.FindElementByAccessibilityId("ClickedMenuItem");
  25. Assert.Equal("_Child 1", clickedMenuItem.Text);
  26. }
  27. [Fact]
  28. public void Click_Grandchild()
  29. {
  30. var rootMenuItem = Session.FindElementByAccessibilityId("RootMenuItem");
  31. rootMenuItem.SendClick();
  32. var childMenuItem = Session.FindElementByAccessibilityId("Child2MenuItem");
  33. childMenuItem.SendClick();
  34. var grandchildMenuItem = Session.FindElementByAccessibilityId("GrandchildMenuItem");
  35. grandchildMenuItem.SendClick();
  36. var clickedMenuItem = Session.FindElementByAccessibilityId("ClickedMenuItem");
  37. Assert.Equal("_Grandchild", clickedMenuItem.Text);
  38. }
  39. [PlatformFact(TestPlatforms.Windows)]
  40. public void Select_Child_With_Alt_Arrow_Keys()
  41. {
  42. MovePointerOutOfTheWay();
  43. new Actions(Session)
  44. .KeyDown(Keys.Alt).KeyUp(Keys.Alt)
  45. .SendKeys(Keys.Down + Keys.Enter)
  46. .Perform();
  47. var clickedMenuItem = Session.FindElementByAccessibilityId("ClickedMenuItem");
  48. Assert.Equal("_Child 1", clickedMenuItem.Text);
  49. }
  50. [PlatformFact(TestPlatforms.Windows)]
  51. public void Select_Grandchild_With_Alt_Arrow_Keys()
  52. {
  53. MovePointerOutOfTheWay();
  54. new Actions(Session)
  55. .KeyDown(Keys.Alt).KeyUp(Keys.Alt)
  56. .SendKeys(Keys.Down + Keys.Down + Keys.Right + Keys.Enter)
  57. .Perform();
  58. var clickedMenuItem = Session.FindElementByAccessibilityId("ClickedMenuItem");
  59. Assert.Equal("_Grandchild", clickedMenuItem.Text);
  60. }
  61. [PlatformFact(TestPlatforms.Windows)]
  62. public void Select_Child_With_Alt_Access_Keys()
  63. {
  64. MovePointerOutOfTheWay();
  65. new Actions(Session)
  66. .KeyDown(Keys.Alt).KeyUp(Keys.Alt)
  67. .SendKeys("rc")
  68. .Perform();
  69. var clickedMenuItem = Session.FindElementByAccessibilityId("ClickedMenuItem");
  70. Assert.Equal("_Child 1", clickedMenuItem.Text);
  71. }
  72. [PlatformFact(TestPlatforms.Windows)]
  73. public void Select_Grandchild_With_Alt_Access_Keys()
  74. {
  75. MovePointerOutOfTheWay();
  76. new Actions(Session)
  77. .KeyDown(Keys.Alt).KeyUp(Keys.Alt)
  78. .SendKeys("rhg")
  79. .Perform();
  80. var clickedMenuItem = Session.FindElementByAccessibilityId("ClickedMenuItem");
  81. Assert.Equal("_Grandchild", clickedMenuItem.Text);
  82. }
  83. [PlatformFact(TestPlatforms.Windows)]
  84. public void Select_Child_With_Click_Arrow_Keys()
  85. {
  86. var rootMenuItem = Session.FindElementByAccessibilityId("RootMenuItem");
  87. rootMenuItem.SendClick();
  88. MovePointerOutOfTheWay();
  89. new Actions(Session)
  90. .SendKeys(Keys.Down + Keys.Enter)
  91. .Perform();
  92. var clickedMenuItem = Session.FindElementByAccessibilityId("ClickedMenuItem");
  93. Assert.Equal("_Child 1", clickedMenuItem.Text);
  94. }
  95. [PlatformFact(TestPlatforms.Windows)]
  96. public void Select_Grandchild_With_Click_Arrow_Keys()
  97. {
  98. var rootMenuItem = Session.FindElementByAccessibilityId("RootMenuItem");
  99. rootMenuItem.SendClick();
  100. MovePointerOutOfTheWay();
  101. new Actions(Session)
  102. .SendKeys(Keys.Down + Keys.Down + Keys.Right + Keys.Enter)
  103. .Perform();
  104. var clickedMenuItem = Session.FindElementByAccessibilityId("ClickedMenuItem");
  105. Assert.Equal("_Grandchild", clickedMenuItem.Text);
  106. }
  107. [PlatformFact(TestPlatforms.Windows)]
  108. public void Child_AcceleratorKey()
  109. {
  110. var rootMenuItem = Session.FindElementByAccessibilityId("RootMenuItem");
  111. rootMenuItem.SendClick();
  112. var childMenuItem = Session.FindElementByAccessibilityId("Child1MenuItem");
  113. Assert.Equal("Ctrl+O", childMenuItem.GetAttribute("AcceleratorKey"));
  114. }
  115. [PlatformFact(TestPlatforms.Windows)]
  116. public void PointerOver_Does_Not_Steal_Focus()
  117. {
  118. // Issue #7906
  119. var textBox = Session.FindElementByAccessibilityId("MenuFocusTest");
  120. textBox.Click();
  121. Assert.True(textBox.GetIsFocused());
  122. var rootMenuItem = Session.FindElementByAccessibilityId("RootMenuItem");
  123. rootMenuItem.MovePointerOver();
  124. Assert.True(textBox.GetIsFocused());
  125. }
  126. private void MovePointerOutOfTheWay()
  127. {
  128. // Move the pointer to the menu tab item so that it's not over the menu in preparation
  129. // for key press tests. This prevents the mouse accidentally selecting the wrong item
  130. // by hovering.
  131. var tabs = Session.FindElementByAccessibilityId("Pager");
  132. var tab = tabs.FindElementByName("Menu");
  133. tab.MovePointerOver();
  134. }
  135. [Collection("Default")]
  136. public class Default : MenuTests
  137. {
  138. public Default(DefaultAppFixture fixture) : base(fixture) { }
  139. }
  140. [Collection("OverlayPopups")]
  141. public class OverlayPopups : MenuTests
  142. {
  143. public OverlayPopups(OverlayPopupsAppFixture fixture) : base(fixture) { }
  144. }
  145. }
  146. }