I’ve kicked off another open-source project, WiPFlash.
This is a little automation framework with a number of goals:
- To let me learn how to do .NET UI Automation
- To fix a couple of things that White doesn’t do yet
- To automate scenarios as fast as possible
- To provide examples that anyone else can look at, if you want to do the same thing.
The project is written in C#, and is exclusively focused on WPF Windows GUIs. Currently WiPFlash can:
- Launch or reuse an existing application or window
- Enter text in TextBox, RichTextBox, and editable ComboBox
- Select values and retrieve selection in ListBox or ComboBox
- Retrieve values from RichTextBox (and its children), TextBox, TextBlock, editable ComboBox
- Click buttons.
It also provides an example of a Prism application, complete with MVVM paradigm, command binding, dependency injection using Unity, etc.
Please feel free to try it out and add any requests and/or issues, bearing in mind that the purpose of the framework is not to replace White. For instance, I have no plans at this time to support drag-and-drop or mouse and keyboard input, nor am I going to respond to bugs with WiPFlash not working on WinForms, SWT, etc.
If you’re looking for something similar for Java and Swing, check out my other automation framework, Tyburn.
Tyburn, the little GUI harness for helping you Swing more easily, has had a few changes:
- Slow mode now added, so you can use it to show your scenarios being run (great for BDD presentations or working out what’s actually causing that bug)
- The Ascii Grid DSL converter which I’ve used for Tetris and the Game of Life for years has been added
- You can now specify the timeout for finding an open window
- You can ask the control if it’s got the window open (makes it easier to close all windows in a tear-down).
It seems to be the season for releasing code!
Tyburn is a fast, minimal, extensible Java Swing harness that was originally part of JBehave 1.0. You can download it here and use it like this:
WindowControl control = new WindowControl("my.named.frame");
control.clickButton("a.button");
control.enterText("a.textfield", "Text1");

Comments