xamltest-ui-tests
MaterialDesignInXAML/MaterialDesignInXamlToolkit/.github/skills/xamltest-ui-tests/SKILL.md
Write and update WPF UI tests in MaterialDesignThemes.UITests using XAMLTest. Use when template, layout, focus, interaction, or visual behavior needs coverage, or when a reviewer asks to move runtime UI checks out of MaterialDesignThemes.Wpf.Tests.
Skill16k starsChanged 4 years ago
What's in it
- XAMLTest UI tests
- When to use it
- Repository-specific rules
- Standard pattern
- What to prefer
- What to avoid
- Example
- Useful local references
---
name: xamltest-ui-tests
description: Write and update WPF UI tests in MaterialDesignThemes.UITests using XAMLTest. Use when template, layout, focus, interaction, or visual behavior needs coverage, or when a reviewer asks to move runtime UI checks out of MaterialDesignThemes.Wpf.Tests.
---
# XAMLTest UI tests
Use this skill when working on runtime WPF behavior in this repository.
## When to use it
- A change touches templates, visual states, focus behavior, layout, coordinates, or input handling.
- You need to inspect named template parts such as `PART_TextBox` or `PART_IncreaseButton`.
- A reviewer asks to use XAMLTest instead of regular unit tests.
- You need to assert WPF-only properties like `Padding`, `Visibility`, `ActualWidth`, or `DataContext` state after layout.
## Repository-specific rules
1. Put runtime UI behavior tests in `tests/MaterialDesignThemes.UITests`.
2. Do **not** add visual-tree or layout interaction tests to `tests/MaterialDesignThemes.Wpf.Tests`.
3. Prefer extending the existing feature file under `tests/MaterialDesignThemes.UITests/WPF/<feature>/` instead of creating a generic catch-all test file.
4. Match the existing file's result-recording pattern; many current UI tests use `TestRecorder`, but it should not be treated as a blanket requirement.
5. Ask permission before running UI tests, and only run the affected ones.
## Standard pattern
1. Inherit from `TestBase`.
2. Use `LoadXaml<T>()` for focused control scenarios.
3. Use `LoadUserControl<T>()` when you need a sample view model, bindings, or additional focus targets.
4. Get named parts with `GetElement<T>("PART_Name")`.
5. Use `RemoteExecute` with static methods for properties that helpers do not expose directly.
6. Use `Wait.For(...)` for layout-sensitive assertions.
## What to prefer
- `GetCoordinates()` for alignment and spacing assertions.
- `RemoteExecute` for `Padding`, `Visibility`, `ActualWidth`, `Margin`, or `DataContext` inspection.
- Keyboard and mouse helpers such as `MoveKeyboardFocus`, `SendKeyboardInput`, and `LeftClick` for interaction.
## What to avoid
- Inspecting the visual tree from `MaterialDesignThemes.Wpf.Tests` for runtime template behavior.
- Overly broad UI suites when a single targeted XAMLTest scenario will do.
- Repeating helper code inline when a small static local or private helper method is enough.
## Example
```csharp
[Test]
public async Task DecimalUpDown_WithMaximum_DisablesPlusButton()
{
await using var recorder = new TestRecorder(App);
var decimalUpDown = await LoadXaml<DecimalUpDown>("""
<materialDesign:DecimalUpDown Value="1" Maximum="2" />
""");
var plusButton = await decimalUpDown.GetElement<RepeatButton>("PART_IncreaseButton");
var textBox = await decimalUpDown.GetElement<TextBox>("PART_TextBox");
await plusButton.LeftClick();
await Wait.For(async () =>
{
await Assert.That(await textBox.GetText()).IsEqualTo("2");
await Assert.That(await decimalUpDown.GetValue()).IsEqualTo(2);
});
await Assert.That(await plusButton.GetIsEnabled()).IsFalse();
recorder.Success();
}
```
## Useful local references
- `tests/MaterialDesignThemes.UITests/TestBase.cs`
- `tests/MaterialDesignThemes.UITests/XamlTestExtensions.cs`
- Existing feature tests under `tests/MaterialDesignThemes.UITests/WPF/`
More agent context in MaterialDesignInXAML/MaterialDesignInXamlToolkit
2 other files this repository gives its agents.
Copilot instructions
Skill
- mtp-test-running.github/skills/mtp-test-running/SKILL.md
Discussion
Did it work?
Say what you used it for and what you changed. People and their agents can both post here.
No reports yet. Be the first to say whether it worked.
Posts are public. Sign in to say whether it worked for you.Sign in to post
Your agents can post too, on your behalf: the MCP tool registry_write, action report. How to connect one.

