PIbd-42_Kashin_M.I_CPO_Cour.../EmployeeManagmentTests/UI/EmployeeWindowTests.cs

192 lines
9.2 KiB
C#
Raw Normal View History

2024-12-09 23:46:32 +04:00
using EmployeeManagmentView.PhysicalPerson;
using FlaUI.Core;
using FlaUI.Core.AutomationElements;
using FlaUI.UIA3;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xunit;
namespace EmployeeManagmentTests.UI
{
[Collection("Sequential")]
public class EmployeeWindowTests
{
private readonly Application _application;
private readonly AutomationBase _automation;
public EmployeeWindowTests()
{
_automation = new UIA3Automation();
_application = Application.Launch("C:\\Users\\kashi\\Desktop\\Univer\\7\\КПО\\Project\\EmployeeManagmentView\\bin\\Debug\\net8.0-windows\\EmployeeManagmentView.exe");
}
[Fact]
public void TestOpenAddEmployeeManagementWindow()
{
var mainWindow = _application.GetMainWindow(_automation);
var employeeButton = mainWindow.FindFirstDescendant(cf => cf.ByText("Работа с сотрудниками")).AsButton();
// Проверяем, что кнопка доступна и выполняем клик
Assert.True(employeeButton.IsEnabled, "Работа с сотрудниками");
employeeButton.Invoke();
// Ждем появления окна "Работа с физ. лицами" с тайм-аутом
var employeeManagementWindow = WaitForWindow("Управление сотрудниками");
Assert.NotNull(employeeManagementWindow);
// Проверяем, что окно доступно и готово к взаимодействию
Assert.True(employeeManagementWindow.IsEnabled, "Управление сотрудниками");
// Проверяем, что кнопка доступна и выполняем клик
Assert.True(employeeButton.IsEnabled, "Добавление сотрудника");
employeeButton.Invoke();
// Ждем появления окна "Добавление физ.лица" с тайм-аутом
var employeeAddWindow = WaitForWindow("Добавление сотрудника");
Assert.NotNull(employeeManagementWindow);
// Проверяем, что окно доступно и готово к взаимодействию
Assert.True(employeeManagementWindow.IsEnabled, "Добавление сотрудника");
// Закрытие окон
employeeManagementWindow?.Close();
employeeAddWindow?.Close();
mainWindow?.Close();
}
[Fact]
public void TestOpenDeleteEmployeeManagementWindow()
{
var mainWindow = _application.GetMainWindow(_automation);
var employeeButton = mainWindow.FindFirstDescendant(cf => cf.ByText("Работа с сотрудниками")).AsButton();
// Проверяем, что кнопка доступна и выполняем клик
Assert.True(employeeButton.IsEnabled, "Работа с сотрудниками");
employeeButton.Invoke();
// Ждем появления окна "Работа с физ. лицами" с тайм-аутом
var employeeManagementWindow = WaitForWindow("Управление сотрудниками");
Assert.NotNull(employeeManagementWindow);
// Проверяем, что окно доступно и готово к взаимодействию
Assert.True(employeeManagementWindow.IsEnabled, "Управление сотрудниками");
// Проверяем, что кнопка доступна и выполняем клик
Assert.True(employeeButton.IsEnabled, "Удаление сотрудников");
employeeButton.Invoke();
// Ждем появления окна "Добавление физ.лица" с тайм-аутом
var employeeAddWindow = WaitForWindow("Удаление сотрудников");
Assert.NotNull(employeeManagementWindow);
// Проверяем, что окно доступно и готово к взаимодействию
Assert.True(employeeManagementWindow.IsEnabled, "Удаление сотрудников");
// Закрытие окон
employeeManagementWindow?.Close();
employeeAddWindow?.Close();
mainWindow?.Close();
}
[Fact]
public void TestOpenEditEmployeeManagementWindow()
{
var mainWindow = _application.GetMainWindow(_automation);
var employeeButton = mainWindow.FindFirstDescendant(cf => cf.ByText("Работа с сотрудниками")).AsButton();
// Проверяем, что кнопка доступна и выполняем клик
Assert.True(employeeButton.IsEnabled, "Работа с сотрудниками");
employeeButton.Invoke();
// Ждем появления окна "Работа с физ. лицами" с тайм-аутом
var employeeManagementWindow = WaitForWindow("Управление сотрудниками");
Assert.NotNull(employeeManagementWindow);
// Проверяем, что окно доступно и готово к взаимодействию
Assert.True(employeeManagementWindow.IsEnabled, "Управление сотрудниками");
// Проверяем, что кнопка доступна и выполняем клик
Assert.True(employeeButton.IsEnabled, "Редактирование сотрудника");
employeeButton.Invoke();
// Ждем появления окна "Добавление физ.лица" с тайм-аутом
var employeeAddWindow = WaitForWindow("Редактирование сотрудника");
Assert.NotNull(employeeManagementWindow);
// Проверяем, что окно доступно и готово к взаимодействию
Assert.True(employeeManagementWindow.IsEnabled, "Редактирование сотрудника");
// Закрытие окон
employeeManagementWindow?.Close();
employeeAddWindow?.Close();
mainWindow?.Close();
}
[Fact]
public void TestOpenViewEmployeeManagementWindow()
{
var mainWindow = _application.GetMainWindow(_automation);
var employeeButton = mainWindow.FindFirstDescendant(cf => cf.ByText("Работа с сотрудниками")).AsButton();
// Проверяем, что кнопка доступна и выполняем клик
Assert.True(employeeButton.IsEnabled, "Работа с сотрудниками");
employeeButton.Invoke();
// Ждем появления окна "Работа с физ. лицами" с тайм-аутом
var employeeManagementWindow = WaitForWindow("Управление сотрудниками");
Assert.NotNull(employeeManagementWindow);
// Проверяем, что окно доступно и готово к взаимодействию
Assert.True(employeeManagementWindow.IsEnabled, "Управление сотрудниками");
// Проверяем, что кнопка доступна и выполняем клик
Assert.True(employeeButton.IsEnabled, "Просмотр сотрудников");
employeeButton.Invoke();
// Ждем появления окна "Добавление физ.лица" с тайм-аутом
var employeeAddWindow = WaitForWindow("Просмотр сотрудников");
Assert.NotNull(employeeManagementWindow);
// Проверяем, что окно доступно и готово к взаимодействию
Assert.True(employeeManagementWindow.IsEnabled, "Просмотр сотрудников");
// Закрытие окон
employeeManagementWindow?.Close();
employeeAddWindow?.Close();
mainWindow?.Close();
}
private Window WaitForWindow(string windowTitle, int timeout = 10000) // Увеличен таймаут
{
var startTime = DateTime.Now;
while ((DateTime.Now - startTime).TotalMilliseconds < timeout)
{
var window = _application.GetAllTopLevelWindows(_automation)
.FirstOrDefault(w => w.Title.Contains(windowTitle));
if (window != null && window.IsEnabled)
{
return window;
}
Thread.Sleep(200); // Увеличена пауза между попытками
}
return null; // Если окно не найдено в пределах тайм-аута
}
public void Dispose()
{
_application.Close();
_automation.Dispose();
}
}
}