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 { public class SalaryWindowTests { private readonly Application _application; private readonly AutomationBase _automation; public SalaryWindowTests() { _automation = new UIA3Automation(); _application = Application.Launch("C:\\Users\\kashi\\Desktop\\Univer\\7\\КПО\\Project\\EmployeeManagmentView\\bin\\Debug\\net8.0-windows\\EmployeeManagmentView.exe"); } [Fact] public void TestOpenViewSalaryManagementWindow() { var mainWindow = _application.GetMainWindow(_automation); var salaryButton = mainWindow.FindFirstDescendant(cf => cf.ByText("Работа с сотрудниками")).AsButton(); // Проверяем, что кнопка доступна и выполняем клик Assert.True(salaryButton.IsEnabled, "Работа с сотрудниками"); salaryButton.Invoke(); // Ждем появления окна "Работа с физ. лицами" с тайм-аутом var salaryManagementWindow = WaitForWindow("Управление сотрудниками"); Assert.NotNull(salaryManagementWindow); Thread.Sleep(100); // Проверяем, что окно доступно и готово к взаимодействию Assert.True(salaryManagementWindow.IsEnabled, "Управление сотрудниками"); // Проверяем, что кнопка доступна и выполняем клик Assert.True(salaryButton.IsEnabled, "Просмотр сотрудников"); salaryButton.Invoke(); // Ждем появления окна "Добавление физ.лица" с тайм-аутом var salaryAddWindow = WaitForWindow("Просмотр сотрудников"); Assert.NotNull(salaryManagementWindow); Thread.Sleep(100); // Проверяем, что окно доступно и готово к взаимодействию Assert.True(salaryManagementWindow.IsEnabled, "Просмотр сотрудников"); // Проверяем, что кнопка доступна и выполняем клик Assert.True(salaryButton.IsEnabled, "Работа с зарплатой"); salaryButton.Invoke(); // Ждем появления окна "Добавление физ.лица" с тайм-аутом var salaryManagmentWindow = WaitForWindow("Управление зарплатой"); Assert.NotNull(salaryManagementWindow); Thread.Sleep(100); // Проверяем, что окно доступно и готово к взаимодействию Assert.True(salaryManagementWindow.IsEnabled, "Управление зарплатой"); // Проверяем, что кнопка доступна и выполняем клик Assert.True(salaryButton.IsEnabled, "Просмотр зарплат"); salaryButton.Invoke(); // Ждем появления окна "Добавление физ.лица" с тайм-аутом var salaryCrudWindow = WaitForWindow("Список зарплат"); Assert.NotNull(salaryManagementWindow); Thread.Sleep(100); // Проверяем, что окно доступно и готово к взаимодействию Assert.True(salaryManagementWindow.IsEnabled, "Список зарплат"); // Закрытие окон salaryManagementWindow?.Close(); salaryAddWindow?.Close(); salaryManagmentWindow?.Close(); salaryCrudWindow?.Close(); mainWindow?.Close(); } [Fact] public void TestOpenEditSalaryManagementWindow() { var mainWindow = _application.GetMainWindow(_automation); var salaryButton = mainWindow.FindFirstDescendant(cf => cf.ByText("Работа с сотрудниками")).AsButton(); // Проверяем, что кнопка доступна и выполняем клик Assert.True(salaryButton.IsEnabled, "Работа с сотрудниками"); salaryButton.Invoke(); // Ждем появления окна "Работа с физ. лицами" с тайм-аутом var salaryManagementWindow = WaitForWindow("Управление сотрудниками"); Assert.NotNull(salaryManagementWindow); Thread.Sleep(100); // Проверяем, что окно доступно и готово к взаимодействию Assert.True(salaryManagementWindow.IsEnabled, "Управление сотрудниками"); // Проверяем, что кнопка доступна и выполняем клик Assert.True(salaryButton.IsEnabled, "Просмотр сотрудников"); salaryButton.Invoke(); // Ждем появления окна "Добавление физ.лица" с тайм-аутом var salaryAddWindow = WaitForWindow("Просмотр сотрудников"); Assert.NotNull(salaryManagementWindow); Thread.Sleep(100); // Проверяем, что окно доступно и готово к взаимодействию Assert.True(salaryManagementWindow.IsEnabled, "Просмотр сотрудников"); // Проверяем, что кнопка доступна и выполняем клик Assert.True(salaryButton.IsEnabled, "Работа с зарплатой"); salaryButton.Invoke(); // Ждем появления окна "Добавление физ.лица" с тайм-аутом var salaryManagmentWindow = WaitForWindow("Управление зарплатой"); Assert.NotNull(salaryManagementWindow); Thread.Sleep(100); // Проверяем, что окно доступно и готово к взаимодействию Assert.True(salaryManagementWindow.IsEnabled, "Управление зарплатой"); // Проверяем, что кнопка доступна и выполняем клик Assert.True(salaryButton.IsEnabled, "Редактирование зарплат"); salaryButton.Invoke(); // Ждем появления окна "Добавление физ.лица" с тайм-аутом var salaryCrudWindow = WaitForWindow("Редактирование зарплат"); Assert.NotNull(salaryManagementWindow); Thread.Sleep(100); // Проверяем, что окно доступно и готово к взаимодействию Assert.True(salaryManagementWindow.IsEnabled, "Редактирование зарплат"); // Закрытие окон salaryManagementWindow?.Close(); salaryAddWindow?.Close(); salaryManagmentWindow?.Close(); salaryCrudWindow?.Close(); mainWindow?.Close(); } [Fact] public void TestOpenDeleteSalaryManagementWindow() { var mainWindow = _application.GetMainWindow(_automation); var salaryButton = mainWindow.FindFirstDescendant(cf => cf.ByText("Работа с сотрудниками")).AsButton(); // Проверяем, что кнопка доступна и выполняем клик Assert.True(salaryButton.IsEnabled, "Работа с сотрудниками"); salaryButton.Invoke(); // Ждем появления окна "Работа с физ. лицами" с тайм-аутом var salaryManagementWindow = WaitForWindow("Управление сотрудниками"); Assert.NotNull(salaryManagementWindow); Thread.Sleep(100); // Проверяем, что окно доступно и готово к взаимодействию Assert.True(salaryManagementWindow.IsEnabled, "Управление сотрудниками"); // Проверяем, что кнопка доступна и выполняем клик Assert.True(salaryButton.IsEnabled, "Просмотр сотрудников"); salaryButton.Invoke(); // Ждем появления окна "Добавление физ.лица" с тайм-аутом var salaryAddWindow = WaitForWindow("Просмотр сотрудников"); Assert.NotNull(salaryManagementWindow); Thread.Sleep(100); // Проверяем, что окно доступно и готово к взаимодействию Assert.True(salaryManagementWindow.IsEnabled, "Просмотр сотрудников"); // Проверяем, что кнопка доступна и выполняем клик Assert.True(salaryButton.IsEnabled, "Работа с зарплатой"); salaryButton.Invoke(); // Ждем появления окна "Добавление физ.лица" с тайм-аутом var salaryManagmentWindow = WaitForWindow("Управление зарплатой"); Assert.NotNull(salaryManagementWindow); Thread.Sleep(100); // Проверяем, что окно доступно и готово к взаимодействию Assert.True(salaryManagementWindow.IsEnabled, "Управление зарплатой"); // Проверяем, что кнопка доступна и выполняем клик Assert.True(salaryButton.IsEnabled, "Удаление зарплат"); salaryButton.Invoke(); // Ждем появления окна "Добавление физ.лица" с тайм-аутом var salaryCrudWindow = WaitForWindow("Удаление зарплат"); Assert.NotNull(salaryManagementWindow); Thread.Sleep(100); // Проверяем, что окно доступно и готово к взаимодействию Assert.True(salaryManagementWindow.IsEnabled, "Удаление зарплат"); // Закрытие окон salaryManagementWindow?.Close(); salaryAddWindow?.Close(); salaryManagmentWindow?.Close(); salaryCrudWindow?.Close(); mainWindow?.Close(); } [Fact] public void TestOpenAddSalaryManagementWindow() { var mainWindow = _application.GetMainWindow(_automation); var salaryButton = mainWindow.FindFirstDescendant(cf => cf.ByText("Работа с сотрудниками")).AsButton(); // Проверяем, что кнопка доступна и выполняем клик Assert.True(salaryButton.IsEnabled, "Работа с сотрудниками"); salaryButton.Invoke(); // Ждем появления окна "Работа с физ. лицами" с тайм-аутом var salaryManagementWindow = WaitForWindow("Управление сотрудниками"); Assert.NotNull(salaryManagementWindow); Thread.Sleep(100); // Проверяем, что окно доступно и готово к взаимодействию Assert.True(salaryManagementWindow.IsEnabled, "Управление сотрудниками"); // Проверяем, что кнопка доступна и выполняем клик Assert.True(salaryButton.IsEnabled, "Просмотр сотрудников"); salaryButton.Invoke(); // Ждем появления окна "Добавление физ.лица" с тайм-аутом var salaryAddWindow = WaitForWindow("Просмотр сотрудников"); Assert.NotNull(salaryManagementWindow); Thread.Sleep(100); // Проверяем, что окно доступно и готово к взаимодействию Assert.True(salaryManagementWindow.IsEnabled, "Просмотр сотрудников"); // Проверяем, что кнопка доступна и выполняем клик Assert.True(salaryButton.IsEnabled, "Работа с зарплатой"); salaryButton.Invoke(); // Ждем появления окна "Добавление физ.лица" с тайм-аутом var salaryManagmentWindow = WaitForWindow("Управление зарплатой"); Assert.NotNull(salaryManagementWindow); Thread.Sleep(100); // Проверяем, что окно доступно и готово к взаимодействию Assert.True(salaryManagementWindow.IsEnabled, "Управление зарплатой"); // Проверяем, что кнопка доступна и выполняем клик Assert.True(salaryButton.IsEnabled, "Добавление зарплаты"); salaryButton.Invoke(); // Ждем появления окна "Добавление физ.лица" с тайм-аутом var salaryCrudWindow = WaitForWindow("Добавление зарплаты"); Assert.NotNull(salaryManagementWindow); Thread.Sleep(100); // Проверяем, что окно доступно и готово к взаимодействию Assert.True(salaryManagementWindow.IsEnabled, "Добавление зарплаты"); // Закрытие окон salaryManagementWindow?.Close(); salaryAddWindow?.Close(); salaryManagmentWindow?.Close(); salaryCrudWindow?.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(); } } }