dir.by  
Programming, development, testing
Юнит тестирование (MSTest, NUnit, xUnit, Moq) и Автоматическое тестирование (компьютер сам водит мышкой)
Автоматическое тестирование
Пишем автоматический тест для WPF C# приложения (используем Nuget.Appium и свойство AutomationProperties.AutomationId)
  Looked at 6249 times    
 Пишем автоматический тест для WPF C# приложения 
last updated: 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
Пишем автоматический тест на C# для стандартного калькулятора из 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) тестирование
Что такое MSTest (UnitTest) ? (фреймворк юнит-тестирования от компании Microsoft)
Сайты для изучения MSTest (UnitTest) тестирования
NUnit тестирование
Что такое NUnit ? (фреймворк юнит-тестирования)
Пишем консольное C# приложение с NUnit тестированием
xUnit тестирование
Что такое xUnit ? (фреймворк юнит-тестирования)
Сайты для изучения xUnit тестирования
Moq (mock) тестирование
Что такое Mock (moq) тестирование?
Пишем C# приложение с Mock (moq) тестированием
Сайты для изучения Moq тестирования
Что такое автоматическое тестирование программы (automated testing)?
Автоматическое тестирование
Write an automated test on C# using Selenium for Web site
Скачиваем и устанавливаем Microsoft приложение WinAppDriver
Запускаем Microsoft приложение WinAppDriver
Пишем автоматический тест на C# для стандартного калькулятора из Windows
Пишем автоматический тест для WPF C# приложения (используем Nuget.Appium и свойство AutomationProperties.AutomationId)

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