Введение. У меня есть WPF приложение
Скачать пример:
WpfAppAnimal.zip (40 kb) ...
Мое WPF приложение работает так:
• вводим название животного
• нажимаем на кнопку
• увидим количество лет сколько животное живет
Код WPF приложения:
Важно:
Чтобы автоматический тест нашел элемент в WPF приложении
используется AutomationProperties.AutomationId
Xaml
<Window x:Class="WpfAppAnimal.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfAppAnimal"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<TextBlock
HorizontalAlignment="Left"
Margin="147,78,0,0"
TextWrapping="Wrap"
Text="Enter animal name:"
VerticalAlignment="Top"/>
<TextBox
HorizontalAlignment="Left"
Height="23"
Margin="256,77,0,0"
TextWrapping="Wrap"
AutomationProperties.AutomationId="AnimalNameTextId"
Text="{Binding MyModel.AnimalName}"
VerticalAlignment="Top"
Width="120"/>
<Button
Content="Calculate lifetime"
HorizontalAlignment="Left"
Margin="147,129,0,0"
AutomationProperties.AutomationId="CalculateButtonId"
Command="{Binding MyModel.ClickMyButton1, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"
VerticalAlignment="Top" Width="142"/>
<TextBlock
HorizontalAlignment="Left"
Margin="147,185,0,0"
TextWrapping="Wrap"
AutomationProperties.AutomationId="LifeTimeTextId"
Text="{Binding MyModel.LifeTime, UpdateSourceTrigger=PropertyChanged}"
VerticalAlignment="Top"
Height="21"
Width="109"/>
</Grid>
</Window>
Пишем Автоматический тест для этого WPF приложения
Шаг 1. Открываем Visual Studio
Шаг 2. Создаем новый проект с типом NUnit тест
Создался вот такой проект:
Шаг 3. Добавляем NuGet package с Gravity.Drivers.Appium
Шаг 4. Добавим код
C#
Файл UnitTest1.cs
using OpenQA.Selenium.Appium;
using OpenQA.Selenium.Appium.Windows;
namespace AutoTestForWpfApp
{
public class Tests
{
public const string DriverUrl = "http://127.0.0.1:4723/";
[SetUp]
public void Setup()
{
}
[Test]
public void Test_CheckDog_LifeTime()
{
// run WPF exe
string appWPF = @"D:\WpfAppAnimal\bin\Debug\WpfAppAnimal.exe";
var options = new AppiumOptions();
options.AddAdditionalCapability("app", appWPF);
var session = new WindowsDriver<WindowsElement>(new Uri(DriverUrl), options);
// wait running WPF (3 seconds)
Thread.Sleep(3000);
WindowsElement element = null;
// autotest write in wpf application text "dog"
element = session.FindElementByAccessibilityId("AnimalNameTextId");
element.SendKeys("dog");
// autotest click button in wpf application
element = session.FindElementByAccessibilityId("CalculateButtonId");
element.Click();
// autotest get text from wpf application
element = session.FindElementByAccessibilityId("LifeTimeTextId");
// result
Assert.AreEqual("16 years", element.Text);
// close wpf application
session.Quit();
}
}
}
Шаг 5. Запускаем автоматический тест
На заметку! Перед запуском теста надо убедится что
приложение WinAppDriver запущено ...
Запускаем автоматический тест:
для этого нажимаем правой клавишей мыши на методе Test_CheckDog_LifeTime
Шаг 6. Автоматический тест выполняется ... смотрим
Шаг 1.
Автоматический тест сам запустит наше
WPF приложение
C#
string appWPF = @"D:\WpfAppAnimal\bin\Debug\WpfAppAnimal.exe";
var options = new AppiumOptions();
options.AddAdditionalCapability("app", appWPF);
var session = new WindowsDriver<WindowsElement>(new Uri(DriverUrl), options);
Что происходит:
Создаем объект
new WindowsDriver
При создании
WindowsDriver запустится файл
D:\WpfAppAnimal\bin\Debug\WpfAppAnimal.exe
и этот объект
WindowsDriver я назвал переменной
session
Шаг 2.
Автоматический тест введет слово
dog в
WPF приложение
C#
element = session.FindElementByAccessibilityId("AnimalNameTextId");
element.SendKeys("dog");
Что происходит:
1) element = session.FindElementByAccessibilityId("AnimalNameTextId"); это значит что:
автоматический тест даст команду
WPF приложению найти элемент с названием
AnimalNameTextId
2) element.SendKeys("dog"); это значит что:
в элемент
WPF приложения написать текст
dog
Посмотрим код нашего
WPF приложения:
Xaml
код WPF приложения
<Grid>
.....
<TextBox
HorizontalAlignment="Left"
Height="23"
TextWrapping="Wrap"
AutomationProperties.AutomationId="AnimalNameTextId"
Text="{Binding MyModel.AnimalName}"
Width="120"></TextBox>
.....
</Grid>
Шаг 3.
Автоматический тест сам нажмет кнопку
Calculate Lifetime
C#
element = session.FindElementByAccessibilityId("CalculateButtonId");
element.Click();
Что происходит:
1) element = session.FindElementByAccessibilityId("CalculateButtonId"); это значит что:
автоматический тест даст команду
WPF приложению найти элемент с названием
CalculateButtonId
2) element.Click(); это значит что:
кнопка в
WPF приложении нажмется
Шаг 4.
В
WPF приложении увидим
16 years
C#
element = session.FindElementByAccessibilityId("LifeTimeTextId");
Assert.AreEqual("16 years", element.Text);
Что происходит:
1) element = session.FindElementByAccessibilityId("LifeTimeTextId"); это значит что:
автоматический тест даст команду
WPF приложению найти элемент с названием
LifeTimeTextId
2) Assert.AreEqual("16 years", element.Text); это значит что:
Assert.AreEqual если 2 параметра одинаковые то автоматический тест выполнится успешно
1-ый параметр это "16 years"
2-ой параметр это element.Text то есть текст из элемента
WPF приложения
Шаг 5.
Закрываем WPF приложение
Шаг 7. Результат автоматического теста
Результат увидим в Visual Studio в Test Explorer: