Ожидание запуска приложения без использования Thread.Sleep () с использованием FLAUI - PullRequest
0 голосов
/ 25 июня 2018

Я новичок в использовании FLAUI и автоматизации тестирования и хотел бы использовать его для тестирования моей системы.В настоящее время я использую Thread.Sleep (), чтобы дождаться запуска приложения, а затем найти текстовое поле для входа.Есть ли более эффективный способ сделать это, чем использовать Thread.Sleep ()?

В данный момент я запускаю приложение и использую Thread.sleep (10000), чтобы дождаться полного запуска приложения и того, что текстовое поле входа в систему можно найти, прежде чем нажать на элемент управления, чтобы ввести пароль для входа в приложение.,Однако я понимаю, что Thread.Sleep - это худший способ заставить систему ждать, особенно в автоматических тестах.Может ли кто-нибудь предложить что-нибудь еще, что я могу проверить?

Ответы [ 3 ]

0 голосов
/ 28 июня 2018
private void RunProc()
{
Process.Start("exeName");
}


public async Task StartProcessAsync()
{
var result= await Task.Run(()=>RunProc());
//optional
Task.Delay(new TimeSpan.FromSeconds(5));
}
0 голосов
/ 02 августа 2018

Всегда лучше использовать механизм повтора и подождать, пока загрузится главное окно и элементы управления станут видны.Например, после вызова Application.Launch вы можете повторить попытку до 30 секунд, чтобы найти главное окно, и txtLogin в нем:

        Retry.WhileException(() =>
        {
            using (var automation = new UIA3Automation())
            {
                Window mainWindow = Application.GetMainWindow(automation, TimeSpan.FromSeconds(60));

                Assert.IsNotNull(Mainwindow, "Main window is not found");

                TextBox loginTextBox = mainWindow.FindFirstDescendant(x => x.ByAutomationId("txtLogin")).AsTextBox();

                Assert.IsNotNull(loginTextBox, "txtLogin is not found");
            }

        }, TimeSpan.FromSeconds(30), null, true);
0 голосов
/ 25 июня 2018

Вы пробовали это решение?

public static void LaunchApplication(string exePath, string arguments, bool waitForExit, bool waitForStart, int waitForStartTimeout)
    {
        ProcessStartInfo thisProcessInfo = new ProcessStartInfo();
        thisProcessInfo.CreateNoWindow = true;
        thisProcessInfo.UseShellExecute = false;
        thisProcessInfo.RedirectStandardOutput = false;
        thisProcessInfo.FileName = exePath;
        thisProcessInfo.Arguments = arguments;
        using(Process thisProcess = Process.Start(thisProcessInfo))
        {
            if(waitForStart)
                thisProcess.WaitForInputIdle(waitForStartTimeout);
            if(waitForExit)
                thisProcess.WaitForExit();
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...