dir.by  
  Поиск  
Компьютер, программы
Юнит тестирование (MSTest, NUnit, xUnit, Moq) и Автоматическое тестирование (компьютер сам водит мышкой)
Автоматическое тестирование
 Пишем автоматический тест для WPF C# приложения 
посмотрели 6836 раз
обновлено: 26 февраля 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
Если у вас не установлена Visual Studio нужно установить Visual Studio...
Открываем Visual Studio 2022
или
Открываем 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:
 
← Предыдущая тема
Пишем автоматический тест на C# для стандартного калькулятора из Windows
 
 
Ваши Отзывы ... комментарии ...
   
Вашe имя
Ваш комментарий (www ссылки может добавлять только залогиненный пользователь)

Экскурсии по Москве Экскурсии по Москве: пешеходные, автобусные и речные прогулки на любой вкус
  Объявления  
  Объявления  
 
Что такое юнит тестирование?
MSTest (UnitTest) тестирование
Что такое MSTest (UnitTest) ? (фреймворк юнит-тестирования от компании Microsoft)
Сайты для изучения MSTest (UnitTest) тестирования
NUnit тестирование
Что такое NUnit ? (фреймворк юнит-тестирования)
Пишем консольное C# приложение с NUnit тестированием
xUnit тестирование
Что такое xUnit ? (фреймворк юнит-тестирования)
Сайты для изучения xUnit тестирования
Moq (mock) тестирование
Что такое Mock (moq) тестирование?
Пишем C# приложение с Mock (moq) тестированием
Сайты для изучения Moq тестирования
Что такое автоматическое тестирование программы (automated testing)?
Автоматическое тестирование
Пишем автоматический тест на C# используя Selenium для Web сайта
Скачиваем и устанавливаем Microsoft приложение WinAppDriver
Запускаем Microsoft приложение WinAppDriver
Пишем автоматический тест на C# для стандартного калькулятора из Windows
Пишем автоматический тест для WPF C# приложения (используем Nuget.Appium и свойство AutomationProperties.AutomationId)

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