У меня есть приложение WPF, и я пытаюсь автоматизировать тестирование пользовательского интерфейса. Я использую FlaUI
для этого. Я также использую NUnit
в качестве основы тестирования. Мое приложение использует DevExpress
элементы управления, и в настоящее время я сталкиваюсь с проблемой, из-за которой я не могу проверить Visibility of my progress bar
из моего приложения Unit Test. Используя FlaUI
, я могу launch
приложению и получить дескриптор Window
, но приложению требуется некоторое время для установки visibility
UI elements
. Поскольку загрузка пользовательского интерфейса занимает много времени, и она управляется индикатором выполнения, я ищу механизм, в котором мой тестовый проект мог бы проверить, видимость индикатора выполнения находится на changed
, а затем go вперед и выполнить тестовые примеры. Вот элемент управления XAML
из проекта WPF
<ProgressBar AutomationProperties.AutomationId="showProgress"
Grid.Row="1"
Height="4"
Margin="0"
BorderThickness="0"
IsIndeterminate="True"
IsTabStop="False"
ToolTip="Contacting Server, Please Wait..."
Visibility="{Binding IsServerActive, Converter={StaticResource MwBoolToVisibilityConverterReverse}}" />
<views1:VoyageEditorControl Grid.Row="2" Grid.Column="0" />
Здесь ниже приведен код из моей Nunit
framework
[TestFixture(AutomationType.UIA3)]
public class UnitTest1 : FlaUITestBase
{
public AutomationType AutomationType { get; }
protected override ApplicationStartMode ApplicationStartMode => ApplicationStartMode.OncePerFixture;
public UnitTest1(AutomationType automationType)
{
AutomationType = automationType;
}
protected override AutomationBase GetAutomation()
{
return UtilityMethods.GetAutomation(AutomationType);
}
protected override Application StartApplication()
{
string executableLocation = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string projectPath = executableLocation.Replace("BP.GIS.Synergy.ShipTracker.UITests", "BP.GIS.Synergy.ShipTracker");
string exeLocation = Path.Combine(projectPath, "BP.GIS.Synergy.ShipTracker.exe");
var app= Application.Launch(exeLocation);
app.WaitWhileMainHandleIsMissing();
return app;
}
#region Test cases
[Test]
public void getAppHandleFirst()
{
// Thread.Sleep(10000);
var mainWindow = Application.GetMainWindow(Automation);
var elementName = mainWindow.FindFirstDescendant(cf => cf.ByAutomationId("AvailableViews")).AsComboBox();
Assert.That(elementName.IsEnabled, Is.True);
Action action = () => elementName.Click();
RetryResults retryResult = Retry.While(action, TimeSpan.FromSeconds(1));
bool isCompletedSuccessfully = retryResult.IsCompletedSuccessfully;
}
[Test]
public void checkAppLoadProgress()
{
var mainWindow = Application.GetMainWindow(Automation);
var elementName = mainWindow.FindFirstDescendant(cf => cf.ByAutomationId("showProgress")).AsProgressBar();
}
Короче говоря, метод getAppHandleFirst()
и другие должен начинать выполнение только после того, как индикатор прогресса исчезнет с экрана.