Доделал тесты

This commit is contained in:
maksim 2024-12-09 23:46:32 +04:00
parent 3eff31e7b3
commit 2f7e26689d
12 changed files with 997 additions and 6 deletions

View File

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

View File

@ -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;

View File

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

View File

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

View File

@ -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; // Если окно не найдено в пределах тайм-аута
}
}
}

View File

@ -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")]

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -1,7 +1,7 @@
<Window x:Class="EmployeeManagmentView.Employee.ViewEmployeeWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Удаление сотрудников"
Title="Просмотр сотрудников"
Height="500" Width="800"
ResizeMode="NoResize"
WindowStartupLocation="CenterScreen"
@ -9,7 +9,7 @@
<Grid>
<!-- Заголовок окна -->
<TextBlock Text="Список сотрудников для удаления"
<TextBlock Text="Список сотрудников"
HorizontalAlignment="Center" VerticalAlignment="Top"
FontSize="18" FontWeight="Bold"
Foreground="White"

View File

@ -25,6 +25,10 @@ namespace EmployeeManagmentView
InitializeComponent();
}
public MainWindow()
{
}
public void OpenPhysicalPersonManagementWindow(object sender, RoutedEventArgs e)
{
foreach (Window window in Application.Current.Windows)

View File

@ -30,7 +30,7 @@ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
Margin="0,0,0,10"
Style="{StaticResource RoundedButtonStyle}"
Background="#004890" Foreground="#FFFFFF"
Click="OpenAddPhysicalPersonWindow"/>
Click="OpenAddPhysicalPersonWindow" RenderTransformOrigin="0.402,0.626"/>
<!-- Кнопка "Редактирование физического лица" -->
<Button Content="Редактирование физического лица"