diff --git a/EmployeeManagmentTests/UI/EmployeeWindowTests.cs b/EmployeeManagmentTests/UI/EmployeeWindowTests.cs new file mode 100644 index 0000000..1a63599 --- /dev/null +++ b/EmployeeManagmentTests/UI/EmployeeWindowTests.cs @@ -0,0 +1,191 @@ +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(); + } + } +} diff --git a/EmployeeManagmentTests/UI/MainWindowTests.cs b/EmployeeManagmentTests/UI/MainWindowTests.cs index 89f0c0a..16d54d0 100644 --- a/EmployeeManagmentTests/UI/MainWindowTests.cs +++ b/EmployeeManagmentTests/UI/MainWindowTests.cs @@ -6,6 +6,8 @@ using FlaUI.UIA3; using Xunit; using System.Linq; using System.Threading; +using EmployeeManagmentView.PhysicalPerson; +using EmployeeManagmentView.Employee; namespace EmployeeManagmentTests.UI { @@ -21,6 +23,8 @@ namespace EmployeeManagmentTests.UI _application = Application.Launch("C:\\Users\\kashi\\Desktop\\Univer\\7\\КПО\\Project\\EmployeeManagmentView\\bin\\Debug\\net8.0-windows\\EmployeeManagmentView.exe"); } + + [Fact] public void TestOpenEmployeeManagementWindow() { @@ -37,6 +41,10 @@ namespace EmployeeManagmentTests.UI // Проверяем, что окно доступно и готово к взаимодействию Assert.True(employeeManagementWindow.IsEnabled, "Управление сотрудниками"); + + // Закрытие окон + mainWindow?.Close(); + employeeManagementWindow?.Close(); } [Fact] @@ -55,8 +63,15 @@ namespace EmployeeManagmentTests.UI // Проверяем, что окно доступно и готово к взаимодействию Assert.True(physicalPersonManagementWindow.IsEnabled, "Управление физическими лицами"); + + + // Закрытие окон + mainWindow?.Close(); + physicalPersonManagementWindow?.Close(); } + + private Window WaitForWindow(string windowTitle, int timeout = 10000) // Увеличен таймаут { var startTime = DateTime.Now; diff --git a/EmployeeManagmentTests/UI/PhysicalPersonWindowTests.cs b/EmployeeManagmentTests/UI/PhysicalPersonWindowTests.cs new file mode 100644 index 0000000..4fe6d94 --- /dev/null +++ b/EmployeeManagmentTests/UI/PhysicalPersonWindowTests.cs @@ -0,0 +1,188 @@ +using EmployeeManagmentView.Employee; +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 PhysicalPersonWindowTests + { + private readonly Application _application; + private readonly AutomationBase _automation; + + public PhysicalPersonWindowTests() + { + _automation = new UIA3Automation(); + _application = Application.Launch("C:\\Users\\kashi\\Desktop\\Univer\\7\\КПО\\Project\\EmployeeManagmentView\\bin\\Debug\\net8.0-windows\\EmployeeManagmentView.exe"); + } + + [Fact] + public void TestOpenAddPhysicalPersonManagementWindow() + { + var mainWindow = _application.GetMainWindow(_automation); + var physicalPersonButton = mainWindow.FindFirstDescendant(cf => cf.ByText("Работа с физ. лицами")).AsButton(); + + // Проверяем, что кнопка доступна и выполняем клик + Assert.True(physicalPersonButton.IsEnabled, "Работа с физ. лицами"); + physicalPersonButton.Invoke(); + + // Ждем появления окна "Работа с физ. лицами" с тайм-аутом + var physicalPersonManagementWindow = WaitForWindow("Управление физическими лицами"); + Assert.NotNull(physicalPersonManagementWindow); + + // Проверяем, что окно доступно и готово к взаимодействию + Assert.True(physicalPersonManagementWindow.IsEnabled, "Управление физическими лицами"); + + // Проверяем, что кнопка доступна и выполняем клик + Assert.True(physicalPersonButton.IsEnabled, "Добавление физического лица"); + physicalPersonButton.Invoke(); + + // Ждем появления окна "Добавление физ.лица" с тайм-аутом + var physicalPersonAddWindow = WaitForWindow("Добавление физического лица"); + Assert.NotNull(physicalPersonManagementWindow); + + // Проверяем, что окно доступно и готово к взаимодействию + Assert.True(physicalPersonManagementWindow.IsEnabled, "Добавление физического лица"); + + // Закрытие окон + physicalPersonAddWindow?.Close(); + physicalPersonManagementWindow?.Close(); + mainWindow?.Close(); + + } + + [Fact] + public void TestOpenDeletePhysicalPersonManagementWindow() + { + var mainWindow = _application.GetMainWindow(_automation); + var physicalPersonButton = mainWindow.FindFirstDescendant(cf => cf.ByText("Работа с физ. лицами")).AsButton(); + + // Проверяем, что кнопка доступна и выполняем клик + Assert.True(physicalPersonButton.IsEnabled, "Работа с физ. лицами"); + physicalPersonButton.Invoke(); + + // Ждем появления окна "Работа с физ. лицами" с тайм-аутом + var physicalPersonManagementWindow = WaitForWindow("Управление физическими лицами"); + Assert.NotNull(physicalPersonManagementWindow); + + // Проверяем, что окно доступно и готово к взаимодействию + Assert.True(physicalPersonManagementWindow.IsEnabled, "Управление физическими лицами"); + + // Проверяем, что кнопка доступна и выполняем клик + Assert.True(physicalPersonButton.IsEnabled, "Удаление физического лица"); + physicalPersonButton.Invoke(); + + // Ждем появления окна "Добавление физ.лица" с тайм-аутом + var physicalPersonAddWindow = WaitForWindow("Удаление физического лица"); + Assert.NotNull(physicalPersonManagementWindow); + + // Проверяем, что окно доступно и готово к взаимодействию + Assert.True(physicalPersonManagementWindow.IsEnabled, "Удаление физического лица"); + + // Закрытие окон + physicalPersonAddWindow?.Close(); + physicalPersonManagementWindow?.Close(); + mainWindow?.Close(); + } + + [Fact] + public void TestOpenEditPhysicalPersonManagementWindow() + { + var mainWindow = _application.GetMainWindow(_automation); + var physicalPersonButton = mainWindow.FindFirstDescendant(cf => cf.ByText("Работа с физ. лицами")).AsButton(); + + // Проверяем, что кнопка доступна и выполняем клик + Assert.True(physicalPersonButton.IsEnabled, "Работа с физ. лицами"); + physicalPersonButton.Invoke(); + + // Ждем появления окна "Работа с физ. лицами" с тайм-аутом + var physicalPersonManagementWindow = WaitForWindow("Управление физическими лицами"); + Assert.NotNull(physicalPersonManagementWindow); + + // Проверяем, что окно доступно и готово к взаимодействию + Assert.True(physicalPersonManagementWindow.IsEnabled, "Управление физическими лицами"); + + // Проверяем, что кнопка доступна и выполняем клик + Assert.True(physicalPersonButton.IsEnabled, "Редактирование физического лица"); + physicalPersonButton.Invoke(); + + // Ждем появления окна "Добавление физ.лица" с тайм-аутом + var physicalPersonAddWindow = WaitForWindow("Редактирование физического лица"); + Assert.NotNull(physicalPersonManagementWindow); + + // Проверяем, что окно доступно и готово к взаимодействию + Assert.True(physicalPersonManagementWindow.IsEnabled, "Редактирование физического лица"); + + // Закрытие окон + physicalPersonAddWindow?.Close(); + physicalPersonManagementWindow?.Close(); + mainWindow?.Close(); + } + + [Fact] + public void TestOpenViewPhysicalPersonManagementWindow() + { + var mainWindow = _application.GetMainWindow(_automation); + var physicalPersonButton = mainWindow.FindFirstDescendant(cf => cf.ByText("Работа с физ. лицами")).AsButton(); + + // Проверяем, что кнопка доступна и выполняем клик + Assert.True(physicalPersonButton.IsEnabled, "Работа с физ. лицами"); + physicalPersonButton.Invoke(); + + // Ждем появления окна "Работа с физ. лицами" с тайм-аутом + var physicalPersonManagementWindow = WaitForWindow("Управление физическими лицами"); + Assert.NotNull(physicalPersonManagementWindow); + + // Проверяем, что окно доступно и готово к взаимодействию + Assert.True(physicalPersonManagementWindow.IsEnabled, "Управление физическими лицами"); + + // Проверяем, что кнопка доступна и выполняем клик + Assert.True(physicalPersonButton.IsEnabled, "Просмотр физического лица"); + physicalPersonButton.Invoke(); + + // Ждем появления окна "Добавление физ.лица" с тайм-аутом + var physicalPersonAddWindow = WaitForWindow("Просмотр физического лица"); + Assert.NotNull(physicalPersonManagementWindow); + + // Проверяем, что окно доступно и готово к взаимодействию + Assert.True(physicalPersonManagementWindow.IsEnabled, "Просмотр физического лица"); + + // Закрытие окон + physicalPersonAddWindow?.Close(); + physicalPersonManagementWindow?.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(); + } + } +} diff --git a/EmployeeManagmentTests/UI/SalaryWindowTests.cs b/EmployeeManagmentTests/UI/SalaryWindowTests.cs new file mode 100644 index 0000000..3c971c7 --- /dev/null +++ b/EmployeeManagmentTests/UI/SalaryWindowTests.cs @@ -0,0 +1,306 @@ +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(); + } + } +} diff --git a/EmployeeManagmentTests/UI/VacationWindowTests.cs b/EmployeeManagmentTests/UI/VacationWindowTests.cs new file mode 100644 index 0000000..fc562fa --- /dev/null +++ b/EmployeeManagmentTests/UI/VacationWindowTests.cs @@ -0,0 +1,283 @@ +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 VacationWindowTests + { + private readonly Application _application; + private readonly AutomationBase _automation; + + public VacationWindowTests() + { + _automation = new UIA3Automation(); + _application = Application.Launch("C:\\Users\\kashi\\Desktop\\Univer\\7\\КПО\\Project\\EmployeeManagmentView\\bin\\Debug\\net8.0-windows\\EmployeeManagmentView.exe"); + } + + [Fact] + public void TestOpenViewVacationManagementWindow() + { + var mainWindow = _application.GetMainWindow(_automation); + var vacationButton = mainWindow.FindFirstDescendant(cf => cf.ByText("Работа с сотрудниками")).AsButton(); + + // Проверяем, что кнопка доступна и выполняем клик + Assert.True(vacationButton.IsEnabled, "Работа с сотрудниками"); + vacationButton.Invoke(); + + // Ждем появления окна "Работа с физ. лицами" с тайм-аутом + var vacationManagementWindow = WaitForWindow("Управление сотрудниками"); + Assert.NotNull(vacationManagementWindow); + + // Проверяем, что окно доступно и готово к взаимодействию + Assert.True(vacationManagementWindow.IsEnabled, "Управление сотрудниками"); + + // Проверяем, что кнопка доступна и выполняем клик + Assert.True(vacationButton.IsEnabled, "Просмотр сотрудников"); + vacationButton.Invoke(); + + // Ждем появления окна "Добавление физ.лица" с тайм-аутом + var vacationAddWindow = WaitForWindow("Просмотр сотрудников"); + Assert.NotNull(vacationManagementWindow); + + // Проверяем, что окно доступно и готово к взаимодействию + Assert.True(vacationManagementWindow.IsEnabled, "Просмотр сотрудников"); + + // Проверяем, что кнопка доступна и выполняем клик + Assert.True(vacationButton.IsEnabled, "Работа с отпусками"); + vacationButton.Invoke(); + + // Ждем появления окна "Добавление физ.лица" с тайм-аутом + var vacationManagmentWindow = WaitForWindow("Управление отпуском"); + Assert.NotNull(vacationManagementWindow); + + // Проверяем, что окно доступно и готово к взаимодействию + Assert.True(vacationManagementWindow.IsEnabled, "Управление отпуском"); + + // Проверяем, что кнопка доступна и выполняем клик + Assert.True(vacationButton.IsEnabled, "Просмотр отпусков"); + vacationButton.Invoke(); + + // Ждем появления окна "Добавление физ.лица" с тайм-аутом + var vacationCrudWindow = WaitForWindow("Список отпусков сотрудников"); + Assert.NotNull(vacationManagementWindow); + + // Проверяем, что окно доступно и готово к взаимодействию + Assert.True(vacationManagementWindow.IsEnabled, "Список отпусков сотрудников"); + + + // Закрытие окон + vacationManagementWindow?.Close(); + vacationAddWindow?.Close(); + vacationManagmentWindow?.Close(); + vacationCrudWindow?.Close(); + mainWindow?.Close(); + + } + + [Fact] + public void TestOpenEditVacationManagementWindow() + { + var mainWindow = _application.GetMainWindow(_automation); + var vacationButton = mainWindow.FindFirstDescendant(cf => cf.ByText("Работа с сотрудниками")).AsButton(); + + // Проверяем, что кнопка доступна и выполняем клик + Assert.True(vacationButton.IsEnabled, "Работа с сотрудниками"); + vacationButton.Invoke(); + + // Ждем появления окна "Работа с физ. лицами" с тайм-аутом + var vacationManagementWindow = WaitForWindow("Управление сотрудниками"); + Assert.NotNull(vacationManagementWindow); + + // Проверяем, что окно доступно и готово к взаимодействию + Assert.True(vacationManagementWindow.IsEnabled, "Управление сотрудниками"); + + // Проверяем, что кнопка доступна и выполняем клик + Assert.True(vacationButton.IsEnabled, "Просмотр сотрудников"); + vacationButton.Invoke(); + + // Ждем появления окна "Добавление физ.лица" с тайм-аутом + var vacationAddWindow = WaitForWindow("Просмотр сотрудников"); + Assert.NotNull(vacationManagementWindow); + + // Проверяем, что окно доступно и готово к взаимодействию + Assert.True(vacationManagementWindow.IsEnabled, "Просмотр сотрудников"); + + // Проверяем, что кнопка доступна и выполняем клик + Assert.True(vacationButton.IsEnabled, "Работа с отпусками"); + vacationButton.Invoke(); + + // Ждем появления окна "Добавление физ.лица" с тайм-аутом + var vacationManagmentWindow = WaitForWindow("Управление отпуском"); + Assert.NotNull(vacationManagementWindow); + + // Проверяем, что окно доступно и готово к взаимодействию + Assert.True(vacationManagementWindow.IsEnabled, "Управление отпуском"); + + // Проверяем, что кнопка доступна и выполняем клик + Assert.True(vacationButton.IsEnabled, "Редактирование отпуска"); + vacationButton.Invoke(); + + // Ждем появления окна "Добавление физ.лица" с тайм-аутом + var vacationCrudWindow = WaitForWindow("Редактирование отпуска"); + Assert.NotNull(vacationManagementWindow); + + // Проверяем, что окно доступно и готово к взаимодействию + Assert.True(vacationManagementWindow.IsEnabled, "Редактирование отпуска"); + + + // Закрытие окон + vacationManagementWindow?.Close(); + vacationAddWindow?.Close(); + vacationManagmentWindow?.Close(); + vacationCrudWindow?.Close(); + mainWindow?.Close(); + + } + + [Fact] + public void TestOpenDeleteVacationManagementWindow() + { + var mainWindow = _application.GetMainWindow(_automation); + var vacationButton = mainWindow.FindFirstDescendant(cf => cf.ByText("Работа с сотрудниками")).AsButton(); + + // Проверяем, что кнопка доступна и выполняем клик + Assert.True(vacationButton.IsEnabled, "Работа с сотрудниками"); + vacationButton.Invoke(); + + // Ждем появления окна "Работа с физ. лицами" с тайм-аутом + var vacationManagementWindow = WaitForWindow("Управление сотрудниками"); + Assert.NotNull(vacationManagementWindow); + + // Проверяем, что окно доступно и готово к взаимодействию + Assert.True(vacationManagementWindow.IsEnabled, "Управление сотрудниками"); + + // Проверяем, что кнопка доступна и выполняем клик + Assert.True(vacationButton.IsEnabled, "Просмотр сотрудников"); + vacationButton.Invoke(); + + // Ждем появления окна "Добавление физ.лица" с тайм-аутом + var vacationAddWindow = WaitForWindow("Просмотр сотрудников"); + Assert.NotNull(vacationManagementWindow); + + // Проверяем, что окно доступно и готово к взаимодействию + Assert.True(vacationManagementWindow.IsEnabled, "Просмотр сотрудников"); + + // Проверяем, что кнопка доступна и выполняем клик + Assert.True(vacationButton.IsEnabled, "Работа с отпусками"); + vacationButton.Invoke(); + + // Ждем появления окна "Добавление физ.лица" с тайм-аутом + var vacationManagmentWindow = WaitForWindow("Управление отпуском"); + Assert.NotNull(vacationManagementWindow); + + // Проверяем, что окно доступно и готово к взаимодействию + Assert.True(vacationManagementWindow.IsEnabled, "Управление зарплатой"); + + // Проверяем, что кнопка доступна и выполняем клик + Assert.True(vacationButton.IsEnabled, "Удаление отпуска"); + vacationButton.Invoke(); + + // Ждем появления окна "Добавление физ.лица" с тайм-аутом + var vacationCrudWindow = WaitForWindow("Удаление отпуска"); + Assert.NotNull(vacationManagementWindow); + + // Проверяем, что окно доступно и готово к взаимодействию + Assert.True(vacationManagementWindow.IsEnabled, "Удаление отпуска"); + + + // Закрытие окон + vacationManagementWindow?.Close(); + vacationAddWindow?.Close(); + vacationManagmentWindow?.Close(); + vacationCrudWindow?.Close(); + mainWindow?.Close(); + + } + + [Fact] + public void TestOpenAddVacationManagementWindow() + { + var mainWindow = _application.GetMainWindow(_automation); + var vacationButton = mainWindow.FindFirstDescendant(cf => cf.ByText("Работа с сотрудниками")).AsButton(); + + // Проверяем, что кнопка доступна и выполняем клик + Assert.True(vacationButton.IsEnabled, "Работа с сотрудниками"); + vacationButton.Invoke(); + + // Ждем появления окна "Работа с физ. лицами" с тайм-аутом + var vacationManagementWindow = WaitForWindow("Управление сотрудниками"); + Assert.NotNull(vacationManagementWindow); + + // Проверяем, что окно доступно и готово к взаимодействию + Assert.True(vacationManagementWindow.IsEnabled, "Управление сотрудниками"); + + // Проверяем, что кнопка доступна и выполняем клик + Assert.True(vacationButton.IsEnabled, "Просмотр сотрудников"); + vacationButton.Invoke(); + + // Ждем появления окна "Добавление физ.лица" с тайм-аутом + var vacationAddWindow = WaitForWindow("Просмотр сотрудников"); + Assert.NotNull(vacationManagementWindow); + + // Проверяем, что окно доступно и готово к взаимодействию + Assert.True(vacationManagementWindow.IsEnabled, "Просмотр сотрудников"); + + // Проверяем, что кнопка доступна и выполняем клик + Assert.True(vacationButton.IsEnabled, "Работа с отпусками"); + vacationButton.Invoke(); + + // Ждем появления окна "Добавление физ.лица" с тайм-аутом + var vacationManagmentWindow = WaitForWindow("Управление отпуском"); + Assert.NotNull(vacationManagementWindow); + + // Проверяем, что окно доступно и готово к взаимодействию + Assert.True(vacationManagementWindow.IsEnabled, "Управление отпуском"); + + // Проверяем, что кнопка доступна и выполняем клик + Assert.True(vacationButton.IsEnabled, "Добавление отпуска"); + vacationButton.Invoke(); + + // Ждем появления окна "Добавление физ.лица" с тайм-аутом + var vacationCrudWindow = WaitForWindow("Добавление отпуска"); + Assert.NotNull(vacationManagementWindow); + + // Проверяем, что окно доступно и готово к взаимодействию + Assert.True(vacationManagementWindow.IsEnabled, "Добавление отпуска"); + + + // Закрытие окон + vacationManagementWindow?.Close(); + vacationAddWindow?.Close(); + vacationManagmentWindow?.Close(); + vacationCrudWindow?.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; // Если окно не найдено в пределах тайм-аута + } + + } +} diff --git a/EmployeeManagmentView/AssemblyInfo.cs b/EmployeeManagmentView/AssemblyInfo.cs index b0ec827..203c237 100644 --- a/EmployeeManagmentView/AssemblyInfo.cs +++ b/EmployeeManagmentView/AssemblyInfo.cs @@ -1,3 +1,4 @@ +using System.Runtime.CompilerServices; using System.Windows; [assembly: ThemeInfo( @@ -8,3 +9,6 @@ using System.Windows; //(used if a resource is not found in the page, // app, or any theme specific resource dictionaries) )] + +[assembly: InternalsVisibleTo("EmployeeManagmentTests")] + diff --git a/EmployeeManagmentView/Employee/Salary/DeleteSalaryWindow.xaml b/EmployeeManagmentView/Employee/Salary/DeleteSalaryWindow.xaml index fd7ca8f..95861b6 100644 --- a/EmployeeManagmentView/Employee/Salary/DeleteSalaryWindow.xaml +++ b/EmployeeManagmentView/Employee/Salary/DeleteSalaryWindow.xaml @@ -2,7 +2,7 @@ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:EmployeeManagmentDataModels.Enums;assembly=EmployeeManagmentDataModels" - Title="Управление зарплатами" + Title="Удаление зарплат" Height="600" Width="800" ResizeMode="NoResize" WindowStartupLocation="CenterScreen" diff --git a/EmployeeManagmentView/Employee/Salary/ViewSalaryWindow.xaml b/EmployeeManagmentView/Employee/Salary/ViewSalaryWindow.xaml index 9f0896e..ca7607d 100644 --- a/EmployeeManagmentView/Employee/Salary/ViewSalaryWindow.xaml +++ b/EmployeeManagmentView/Employee/Salary/ViewSalaryWindow.xaml @@ -2,7 +2,7 @@ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:EmployeeManagmentDataModels.Enums;assembly=EmployeeManagmentDataModels" - Title="Управление зарплатами" + Title="Список зарплат" Height="600" Width="800" ResizeMode="NoResize" WindowStartupLocation="CenterScreen" diff --git a/EmployeeManagmentView/Employee/Vacation/DeleteVacationWindow.xaml b/EmployeeManagmentView/Employee/Vacation/DeleteVacationWindow.xaml index d0423e4..8d198f3 100644 --- a/EmployeeManagmentView/Employee/Vacation/DeleteVacationWindow.xaml +++ b/EmployeeManagmentView/Employee/Vacation/DeleteVacationWindow.xaml @@ -2,7 +2,7 @@ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:EmployeeManagmentDataModels.Enums;assembly=EmployeeManagmentDataModels" - Title="Управление отпусками" + Title="Удаление отпуска" Height="600" Width="800" ResizeMode="NoResize" WindowStartupLocation="CenterScreen" diff --git a/EmployeeManagmentView/Employee/ViewEmployeeWindow.xaml b/EmployeeManagmentView/Employee/ViewEmployeeWindow.xaml index 9496b66..9151f49 100644 --- a/EmployeeManagmentView/Employee/ViewEmployeeWindow.xaml +++ b/EmployeeManagmentView/Employee/ViewEmployeeWindow.xaml @@ -1,7 +1,7 @@  - + Click="OpenAddPhysicalPersonWindow" RenderTransformOrigin="0.402,0.626"/>