PIbd-42_Kashin_M.I_CPO_Cour.../EmployeeManagmentTests/UI/EmployeeWindowTests.cs
2024-12-09 23:46:32 +04:00

192 lines
9.2 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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();
}
}
}