Skip to content

Commit

Permalink
UITest: Automate ContextMenu of the StartPage
Browse files Browse the repository at this point in the history
  • Loading branch information
jbe2277 committed Apr 30, 2024
1 parent 3a09872 commit 3cd26ae
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 8 deletions.
28 changes: 25 additions & 3 deletions src/Samples.UITest/Writer.Test/Tests/WriterTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -134,21 +134,24 @@ public void MultipleNewSaveRestartOpenRecentChangeAskToSave()
saveFileDialog.SetFileName(fileName2);
saveFileDialog.SaveButton.Click();


// Restart the app and check recent file list, pin second item -> moved to top
Launch(new LaunchArguments(DefaultSettings: false));
window = GetShellWindow();
startView = window.StartView;
Capture.Screen().ToFile(GetScreenshotFile("RestartScreen.png"));
Assert.Equal(new[] { fileName2, fileName }, startView.RecentFileListItems.Select(x => x.ToolTip));
Assert.Equal([ fileName2, fileName ], startView.RecentFileListItems.Select(x => x.ToolTip));
startView.RecentFileListItems[1].PinButton.Click();
Assert.Equal(new[] { fileName, fileName2 }, startView.RecentFileListItems.Select(x => x.ToolTip));
Assert.Equal([ fileName, fileName2 ], startView.RecentFileListItems.Select(x => x.ToolTip));
Assert.True(startView.RecentFileListItems[0].PinButton.IsToggled);
Assert.False(startView.RecentFileListItems[1].PinButton.IsToggled);

// Check that the recent file list within the ribbon menu has the same content
fileRibbonMenu = window.FileRibbonMenu;
fileRibbonMenu.MenuButton.Click();
Assert.Equal(new[] { fileName, fileName2 }, fileRibbonMenu.RecentFileListItems.Select(x => x.ToolTip));
Assert.Equal([ fileName, fileName2 ], fileRibbonMenu.RecentFileListItems.Select(x => x.ToolTip));
Assert.True(fileRibbonMenu.RecentFileListItems[0].PinButton.IsToggled);
Assert.False(fileRibbonMenu.RecentFileListItems[1].PinButton.IsToggled);
fileRibbonMenu.MenuButton.Toggle();

// Open recent file #1, modify text, check tab name with dirty flag indicator '*'
Expand All @@ -174,5 +177,24 @@ public void MultipleNewSaveRestartOpenRecentChangeAskToSave()
firstItem = saveChangesWindow.FilesToSaveList.Items.Single();
Assert.Equal(fileName, firstItem.Text);
saveChangesWindow.NoButton.Click();


// Restart the app and check recent file list, use context menu to unpin, remove and open
Launch(new LaunchArguments(DefaultSettings: false));
window = GetShellWindow();
startView = window.StartView;
Assert.Equal([ fileName, fileName2 ], startView.RecentFileListItems.Select(x => x.ToolTip));
Assert.True(startView.RecentFileListItems[0].PinButton.IsToggled);
var contextMenu = startView.RecentFileListItems[0].ShowContextMenu();
contextMenu.UnpinFileMenuItem.Invoke();
Assert.False(startView.RecentFileListItems[0].PinButton.IsToggled);
contextMenu.RemoveFileMenuItem.Invoke();
Assert.Equal([ fileName2 ], startView.RecentFileListItems.Select(x => x.ToolTip));

contextMenu = startView.RecentFileListItems[0].ShowContextMenu();
contextMenu.OpenFileMenuItem.Invoke();
tab1 = window.DocumentTab.SelectedTabItem.As<DocumentTabItem>();
Assert.Equal(Path.GetFileName(fileName2), tab1.TabName);
Assert.Equal("Hello World 2", tab2.RichTextView.RichTextBox.Text);
}
}
2 changes: 1 addition & 1 deletion src/Samples.UITest/Writer.Test/UITest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public UITest(ITestOutputHelper log)
public Application Launch(LaunchArguments? arguments = null)
{
var args = (arguments ?? new LaunchArguments()).ToArguments();
Log.WriteLine($"LaunchArguments: {args}");
Log.WriteLine($"Launch: {args}");
return app = Application.Launch(executable, args);
}

Expand Down
18 changes: 18 additions & 0 deletions src/Samples.UITest/Writer.Test/UITestHelper.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using FlaUI.Core.AutomationElements;
using FlaUI.Core.Conditions;
using FlaUI.Core.Definitions;
using FlaUI.Core.Tools;
using System.Text;

Expand Down Expand Up @@ -29,6 +30,23 @@ public static AutomationElement Find(this AutomationElement element, Func<Condit
+ Environment.NewLine + Environment.NewLine + element.GetTree());
}

public static Window GetWindow(this AutomationElement element)
{
var e = element;
while (true)
{
if (e.ControlType == ControlType.Window) return e.AsWindow();
e = e.Parent;
if (e is null) throw new ElementNotFoundException($"The owner window was not found of the element '{element.TryAutomationId()}'");
}
}

public static Menu ShowContextMenu(this AutomationElement element)
{
element.RightClick();
return element.GetWindow().ContextMenu.AsMenu();
}

public static Window FirstModalWindow(this Window window, TimeSpan? timeout = null)
{
var result = Retry.WhileEmpty(() => window.ModalWindows, timeout);
Expand Down
13 changes: 13 additions & 0 deletions src/Samples.UITest/Writer.Test/Views/StartView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,17 @@ public class RecentFileListItem(FrameworkAutomationElementBase element) : ListBo
public Button OpenFileButton => this.Find("RecentItemOpenLink").AsButton();

public ToggleButton PinButton => this.Find("PinToggleButton").AsToggleButton();

public RecentFileListItemContextMenu ShowContextMenu() => OpenFileButton.ShowContextMenu().As<RecentFileListItemContextMenu>();
}

public class RecentFileListItemContextMenu(FrameworkAutomationElementBase element) : Menu(element)
{
public MenuItem OpenFileMenuItem => this.Find("OpenFileMenuItem").AsMenuItem();

public MenuItem PinFileMenuItem => this.Find("PinFileMenuItem").AsMenuItem();

public MenuItem UnpinFileMenuItem => this.Find("UnpinFileMenuItem").AsMenuItem();

public MenuItem RemoveFileMenuItem => this.Find("RemoveFileMenuItem").AsMenuItem();
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,12 +52,12 @@
<DockPanel Margin="0,0,0,15">
<DockPanel.ContextMenu>
<ContextMenu>
<MenuItem Header="{x:Static p:Resources.OpenFileMenu}" Click="OpenContextMenuHandler"/>
<MenuItem Header="{x:Static p:Resources.PinFileMenu}" Click="PinContextMenuHandler"
<MenuItem Header="{x:Static p:Resources.OpenFileMenu}" Click="OpenContextMenuHandler" AutomationProperties.AutomationId="OpenFileMenuItem"/>
<MenuItem Header="{x:Static p:Resources.PinFileMenu}" Click="PinContextMenuHandler" AutomationProperties.AutomationId="PinFileMenuItem"
Visibility="{Binding IsPinned, Converter={StaticResource BoolToVisibilityConverter}, ConverterParameter=Invert}"/>
<MenuItem Header="{x:Static p:Resources.UnpinFileMenu}" Click="UnpinContextMenuHandler"
<MenuItem Header="{x:Static p:Resources.UnpinFileMenu}" Click="UnpinContextMenuHandler" AutomationProperties.AutomationId="UnpinFileMenuItem"
Visibility="{Binding IsPinned, Converter={StaticResource BoolToVisibilityConverter}}"/>
<MenuItem Header="{x:Static p:Resources.RemoveFileMenu}" Click="RemoveContextMenuHandler"/>
<MenuItem Header="{x:Static p:Resources.RemoveFileMenu}" Click="RemoveContextMenuHandler" AutomationProperties.AutomationId="RemoveFileMenuItem"/>
</ContextMenu>
</DockPanel.ContextMenu>

Expand Down

0 comments on commit 3cd26ae

Please sign in to comment.