我正在为我的应用程序做FlaUI测试,我在应用程序启动时遇到了一个问题。基类中的步骤看起来像应用程序启动,等待打开,最大化窗口,等待控件改变状态,然后它应该进入测试执行。但不是这样,应用程序再启动两次,然后正确地开始测试执行。我不能定位哪里是问题所在。您是否有任何想法或类似的问题,并知道如何解决它?下面是我的基类代码:
using System;
using System.Diagnostics;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using UI.Tests.Utilities;
using FlaUI.Core.AutomationElements;
using FlaUI.Core.Conditions;
using FlaUI.Core.Definitions;
using FlaUI.Core.Tools;
using FlaUI.UIA3;
using Application = FlaUI.Core.Application;
namespace UI.Tests
{
public class UiTestsFixture: IDisposable
{
public Application Application;
public AutomationElement Desktop { get; }
public ConditionFactory ConditionFactory { get; }
public const string ApplicationName = "App.Shell";
public UiTestsFixture()
{
ConditionFactory = new ConditionFactory(new UIA3PropertyLibrary());
UIA3Automation automation = new UIA3Automation();
var configuration = "Debug";
var mainWindowTitle = "App (DEBUG 32-bit)";
var loadingWindowTitle = "Opening - App";
var applicationExecutablePath = GetApplicationExecutablePath(configuration);
GetApplication(applicationExecutablePath);
Desktop = automation.GetDesktop();
GetApplicationWindow(loadingWindowTitle);
WaitForMainPageToAppear(mainWindowTitle);
WaitForOOServiceAndMaximizeWindow();
}
private string GetApplicationExecutablePath(string configuration)
{
var solutionDirectory = Directory.GetParent(Directory.GetCurrentDirectory())
?.Parent
?.Parent
?.Parent
?.FullName;
var applicationDirectory = Path.Combine(solutionDirectory, $@"App.Shell\bin\x86\{configuration}");
var applicationPath = Path.Combine(applicationDirectory, $"{ApplicationName}.exe");
return applicationPath;
}
private void GetApplication(string applicationExecutablePath)
{
PreventOpenMoreThenOneWindowApplication();
Application = Application.Launch(applicationExecutablePath);
if (Application is null)
{
throw new ApplicationException("application can't be null!");
}
}
private void PreventOpenMoreThenOneWindowApplication()
{
var processes = Process.GetProcessesByName(ApplicationName);
foreach (var process in processes)
{
process.Kill();
}
}
private void GetApplicationWindow(string loadingWindowTitle)
{
if (Desktop is null)
{
throw new ArgumentNullException(nameof(Desktop), "Window can't be null!");
}
}
private void WaitForMainPageToAppear(string mainWindowTitle)
{
Retry.Find(() => Desktop.FindFirstDescendant(ConditionFactory.ByClassName("ServiceStatusTopMenuItemControl")),
new RetrySettings
{
Timeout = TimeSpan.FromSeconds(30),
Interval = TimeSpan.FromSeconds(5)
});
}
private void WaitForOOServiceAndMaximizeWindow()
{
Desktop.FindFirstDescendant(ConditionFactory.ByAutomationId("PART_Max")).AsButton().Click();
while (!Desktop.FindFirstDescendant(ConditionFactory.ByClassName("StateIndicatorControl")).HelpText.Contains("Service is running"))
{
Thread.Sleep(2000);
}
Desktop.FindFirstDescendant(ConditionFactory.ByAutomationId("NotificationCloseBtn")).AsButton().Click();
}
public void Dispose()
{
Application.Dispose();
}
}
}发布于 2021-11-10 16:07:41
只需检查和丢弃选项:在第一行的UiTestsFixture()构造函数中添加:
System.Diagnostics.StackTrace t = new System.Diagnostics.StackTrace();
Console.WriteLine("Constructor" + t.ToString());最后:
Console.WriteLine("Constructor end");还要检查cmd打开它是否也会打开应用程序3次(win + r和"cmd",回车),输入C:....\Debug\App.Shell.exe
操作:
感谢你的建议,我注意到我在测试中错误地使用了构造函数。感谢您的帮助:)
https://stackoverflow.com/questions/69897072
复制相似问题