A comprehensive touch input simulator, gesture recognizer test helpers, and headless screen recorder for testing Avalonia controls. Enables testing touch events, multi-touch gestures, pinch/zoom, scroll gestures, touchpad events, and recording visual output during headless tests in Avalonia.Headless.XUnit.
$ dotnet add package HeadlessTestingFrameworkA comprehensive touch input simulator, gesture recognizer test helpers, tree traversal utilities, and headless screen recorder for testing Avalonia controls.
dotnet add package HeadlessTestingFramework
using Avalonia.HeadlessTestingFramework;
[AvaloniaFact]
public void Button_Click_Test()
{
var window = new Window { Content = new Button { Name = "MyButton" } };
window.Show();
var button = window.FindFirst<Button>();
var simulator = new TouchInputSimulator();
bool clicked = false;
button.Click += (s, e) => clicked = true;
simulator.Tap(button, new Point(10, 10));
Assert.True(clicked);
}
| Scenario | Recommended API |
|---|---|
| Simple button click/tap | TouchInputSimulator.Tap() |
| Pinch-to-zoom with gesture handlers | MultiTouchTestHelperFactory |
| Selenium/Appium-style testing | AvaloniaDriver |
| Complex keyboard shortcuts | KeyboardInputSimulator |
| Mouse drag and drop | MouseInputSimulator |
| High-level gesture events | GestureSimulator |
| Find controls by type/name | ControlFinder |
| XPath-like queries | TreeXPath |
| Assert tree structure | TreeValidator |
| Record test interactions | RecordedTouchSimulator |
When testing gesture events (Pinch, Scroll, etc.), handlers must be registered BEFORE window.Show():
// ✅ CORRECT
var control = new MyControl();
Gestures.AddPinchHandler(control, handler); // Register FIRST
var window = new Window { Content = control };
window.Show(); // Show AFTER
// ❌ WRONG - events won't fire
var window = new Window { Content = control };
window.Show(); // Show FIRST
Gestures.AddPinchHandler(control, handler); // Too late!
📖 Full API Documentation - Complete reference with examples
The full documentation includes:
| Component | Purpose |
|---|---|
TouchInputSimulator | Low-level touch event simulation |
GestureSimulator | High-level gesture events (tap, pinch, scroll) |
KeyboardInputSimulator | Keyboard input simulation |
MouseInputSimulator | Mouse input simulation |
GestureRecognizerTestHelper | Trigger actual gesture recognizers |
MultiTouchTestHelperFactory | Multi-finger gesture simulation |
VisualTreeTestHelper | Visual tree queries (extension methods) |
LogicalTreeTestHelper | Logical tree queries (extension methods) |
ControlFinder | Fluent control finding API |
TreeXPath | XPath-like queries |
TreeValidator | Tree structure assertions |
TreeComparer | Visual tree comparison |
AvaloniaDriver | Appium-like API |
HeadlessScreenRecorder | Frame capture for visual testing |
RecordedTouchSimulator | Touch + recording integration |
MIT License - see LICENSE.TXT for details.