http://teststack.github.io/White/
http://blog.benhall.me.uk/2008/02/12/project-white-automated-ui-testing/
http://blogs.msdn.com/b/john_daddamio/archive/2008/04/04/testing-wpf-applications-with-the-white-ui-test-framework.aspx
http://www.codeproject.com/Articles/289028/White-An-UI-Automation-tool-for-windows-applicatio
To get AutomationId's use C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\Inspect.exe
Simple WPF app now
Concept of this application is simple - we will presented with a Login screen, once details are entered we will see a Welcome screen.
Mainwindow.xaml
<Window x:Class="SimpleWPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" Closing="Window_Closing" Closed="Window_Closed" >
<Grid>
<Label Content="User Name" Height="26" HorizontalAlignment="Left" Margin="30,41,0,0" Name="user" VerticalAlignment="Top" Width="88" />
<Label Content="Password" Height="26" HorizontalAlignment="Left" Margin="30,76,0,0" Name="label1" VerticalAlignment="Top" Width="88" />
<TextBox Height="23" HorizontalAlignment="Left" Margin="137,41,0,0" Name="userValue" VerticalAlignment="Top" Width="120" />
<TextBox Height="23" HorizontalAlignment="Right" Margin="0,76,246,0" Name="passwordValue" VerticalAlignment="Top" Width="120" />
<Button Content="Login" Height="23" HorizontalAlignment="Left" Margin="137,121,0,0" Name="login" VerticalAlignment="Top" Width="75" Click="login_Click" />
</Grid>
</Window>
Mainwindow.xaml.cs
using System;
using System.Windows;
namespace SimpleWPF
{
///
/// Interaction logic for MainWindow.xaml
///
public partial class MainWindow : Window
{
Welcome wel = new Welcome();
public MainWindow()
{
InitializeComponent();
}
private void login_Click(object sender, RoutedEventArgs e)
{
if (string.IsNullOrWhiteSpace(userValue.Text))
{
MessageBox.Show("Please enter user name");
return;
}
if (string.IsNullOrWhiteSpace(passwordValue.Text))
{
MessageBox.Show("Please enter password");
return;
}
if (userValue.Text.Equals("suresh") && passwordValue.Text.Equals("password"))
{
wel.Show();
}
}
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
if (wel.Visibility == System.Windows.Visibility.Visible) wel.Close();
}
private void Window_Closed(object sender, EventArgs e)
{
Application.Current.Shutdown();
}
}
}
Welcome.xaml
<Window x:Class="SimpleWPF.Welcome"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Welcome" Height="300" Width="300">
<Grid>
<Label Content="Welcome to hell" Height="28" HorizontalAlignment="Left" Margin="53,119,0,0" Name="label1" VerticalAlignment="Top" Width="164" />
</Grid>
</Window>
SimpleWPFShould.xaml
using System.Diagnostics;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using White.Core;
using White.Core.Factory;
using White.Core.UIItems.Finders;
using White.Core.InputDevices;
namespace SimpleWPFTest
{
[TestClass]
public class SimpleWPFShould
{
// source exe file path.
private const string ExeSourceFile = @"C:\\Users\\sureshM\\Documents\\Visual Studio 2010\\Projects\\MyUIAutomation\\SimpleWPF\\bin\\Debug\\SimpleWPF.exe";
//Global Variable to for Application launch
private static Application _application = default(Application);
//Global variable to get the Main window of calculator from application.
private static White.Core.UIItems.WindowItems.Window _mainWindow = null;
[ClassInitialize]
public static void Initialize(TestContext context)
{
//start process for the above exe file location
var psi = new ProcessStartInfo(ExeSourceFile);
psi.UseShellExecute = false;
// launch the process through white application
_application = White.Core.Application.AttachOrLaunch(psi);
//Get the window of calculator from white application
_mainWindow = _application.GetWindow(SearchCriteria.ByText("MainWindow"), InitializeOption.NoCache);
}
[ClassCleanup]
public static void Cleanup()
{
_application.Close();
}
[TestMethod]
public void OpenAndCloseSuccessfully()
{
Assert.IsNotNull(_application);
}
[TestMethod]
public void LoadMainWindowSuccessfully()
{
Assert.IsNotNull(_mainWindow);
}
[TestMethod]
public void LoginSuccessfully()
{
var user = _mainWindow.Get<White.Core.UIItems.TextBox>(SearchCriteria.ByAutomationId("userValue"));
var password = _mainWindow.Get<White.Core.UIItems.TextBox>(SearchCriteria.ByAutomationId("passwordValue"));
var login = _mainWindow.Get<White.Core.UIItems.Button>(SearchCriteria.ByAutomationId("login"));
user.Text = "suresh";
password.Text = "password";
login.Click();
var welcome = _application.GetWindow(SearchCriteria.ByText("Welcome"), InitializeOption.NoCache);
var welcomeMessage = welcome.Get<White.Core.UIItems.Label>(SearchCriteria.ByAutomationId("label1"));
Assert.IsTrue(welcomeMessage.Text.Equals("Welcome to hell"));
Assert.IsNotNull(welcome);
welcome.Close();
}
}
}