dir.by  
  Поиск  
Компьютер, программы
Юнит тестирование (MSTest, NUnit, xUnit, Moq) и Автоматическое тестирование (компьютер сам водит мышкой)
Automated Testing
 Пишем автоматический тест для WPF C# приложения 
посмотрели 8188 раз
обновлено: 26 February 2023
Введение. У меня есть 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 приложения
Скачать пример:
AutoTestForWpfApp.zip (115 kb) ...
Шаг 1. Открываем Visual Studio
If you do not have Visual Studio installed you need install Visual Studio...
Open Visual Studio 2022
or
Open Visual Studio 2019
Шаг 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 приложение
  C#  
session.Quit();
Шаг 7. Результат автоматического теста
Результат увидим в Visual Studio в Test Explorer:
 
← Previous topic
Writing an automatic C# test for a standard calculator from Windows
 
 
Your feedback ... Comments ...
   
Your Name
Your comment (www links can only be added by a logged-in user)

  Объявления  
  Объявления  
 
What is Unit Testing?
MSTest (UnitTest) testing
What is MSTest (UnitTest)? (Unit Testing Framework from Microsoft)
Sites to learn MSTest (UnitTest) testing
NUnit Testing
What is NUnit ? (unit testing framework)
Writing a Console C# Application with NUnit Testing
xUnit testing
What is xUnit? (unit testing framework)
Sites to learn xUnit testing
Moq (mock) testing
What is Mock (moq) testing?
Writing a C# Application with Mock (moq) Testing
Websites to learn Moq testing
What is automated testing?
Automated Testing
Write an automated test on C# using Selenium for Web site
Download and install the Microsoft application WinAppDriver
Launch the Microsoft WinAppDriver application
Writing an automatic C# test for a standard calculator from Windows
Writing an automated test for a WPF C# application (using Nuget.Appium and the AutomationProperties.AutomationId property)

  Ваши вопросы присылайте по почте: info@dir.by