2017-01-19 9 views
0

В тесте CodedUI я использую System.Diagnostics.Process (Process.Start(exePath);) для выполнения .exe-файла. Теперь моя проблема: после выполнения теста мое приложение закрывается (front-end WPF). Мой вопрос: как я получу процесс, который я только начал независимым от потока, в котором выполняется Process.Start(), так что, как только я запускаю тест, exe продолжает работать. Я хочу, чтобы он продолжал работать, потому что есть другие тесты пользовательского интерфейса, которым нужен Front End Running. (Запуск exe в начале каждого теста слишком дорогостоящий и медленный) Надеюсь, это достаточно ясно.Как отсоединить exe от Process.Start

Это мой код:

//[TestInitialize()] has already started the exe, so I have my front end open. 



    [TestMethod] 
     [TestCategory("Default Layout")] 
     static void Move_StartTimer_Button_To_The_Top_Right_Corner_Keeps_Keeps_Button_Even_After_App_Restarts() 
     { 
      Process myExe = Process.GetProcesses().FirstOrDefault(process => process.ProcessName == "MyAppName"); 
      var fileName = myExe?.MainModule.FileName; 
      UIMap.Click_Close_Application(); 
      Assert.IsTrue(Application_Closed_Sucessfully); 
      Process.Start(fileName); 
Assert.IsTrue(Application_Layout_Has_Button_On_The_Top_Right_Corner); 
     } 

Когда Move_StartTimer_Button_To_The_Top_Right_Corner_Keeps_Keeps_Button_Even_After_App_Restarts() выполнил и завершил, мое приложение закрывается, а также. Как я могу сохранить переднюю часть даже после выполнения? ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: это код CodedUI Test, поэтому после выполнения «после выполнения» я имею в виду, что после того, как тест прошел (он может пройти или сбой, это не имеет значения до тех пор, пока он не закрывает передний конец).

+5

'Process.Start()' просто запускает процесс - он никогда не останавливает процесс. –

+0

просто запустите 'cmd' с аргументом'/C path/to/firefox.exe' –

+0

Ваш код - * is is * - не будет компилироваться. Вам не хватает ')' после 'Contains (« firefox »)'. Более того, ваш вопрос все еще не ясен. Что вы подразумеваете под «* Где-то между ними я закрываю firefox перед вызовом« Process.Start() «*»? –

ответ

0

Возможно, вы не находитесь в правильном направлении. Process.Start запускает процесс, и процесс должен управлять своим завершением, если вы не вызываете метод Kill. См.: https://msdn.microsoft.com/fr-fr/library/system.diagnostics.process(v=vs.110).aspx

Вы пытались заблокировать свою программу (Console.ReadLine()) после того, как вы запустили процесс, чтобы проверить, действительно ли этот процесс сохранился?

+0

Привет, Бруно, Пожалуйста, снова просмотрите вопрос ... Я внес в него много изменений, потому что Я перепутал вопрос в первый раз, когда никто не мог этого понять.Я также даю снимок моего фактического кода ... – OlizWell

1

Process.Start только начинает процесс самостоятельно. Он не прекращает процесс в любое время:

namespace ConsoleApplication5 
{ 
    using System.Diagnostics; 

    class Program 
    { 
    static void Main() 
    { 
     Process.Start("calc.exe"); 
    } 
    } 
} 

Это запустит калькулятор, программа сама закончится, но процесс калькулятор все еще работает.

+0

Это правильно, но теперь добавьте атрибут [TestMethod] в начало 'Main'. Как только тест пройдет, калькулятор закрывается. – OlizWell

+0

@ OlizWell Ну, тогда не делайте этого? Это * точка * единичного теста, чтобы очистить после факта. – nvoigt

+0

Точка теста - это макет ... Если при запуске приложения я перемещал элементы управления, тесты подтверждают, что когда элементы управления перезагрузкой приложений все еще находятся там, где они были в режиме. – OlizWell