2017-02-17 6 views
0

콘솔 응용 프로그램에서 작동하는 코딩 된 UI를 사용하여 자동화 스크립트 (테스트 용이 아닌)를 만들려고합니다.코드화 된 UI의 DrawHighlight()가 C# 콘솔 응용 프로그램에서 작동하지 않습니다.

이 웹 페이지는 나를 상당히 도움이되었습니다. 내가 DrawHighlight()를 사용하는 경우 http://blogs.microsoft.co.il/shair/2010/07/15/running-codedui-test-from-another-application/

그러나, 나는 예외 아래

System.InvalidOperationException를 얻을 것이다 : { "많은 UI 구성 요소이 필요하기 때문에 호출하는 스레드는 STA해야합니다."}

이 예외에 대한 연구를 한 적이 있는데 모든 솔루션은 WPF 또는 winform 응용 프로그램 용이며이를 제대로 작동시키지 못합니다.

내 프로그램은 다음과 같습니다 : 아래

using Microsoft.VisualStudio.TestTools.UITesting; 
using Microsoft.VisualStudio.TestTools.UITesting.HtmlControls; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Playback.PlaybackSettings.SearchTimeout = 10000; 
      Playback.Initialize(); 
      var browser = BrowserWindow.Launch("https://www.google.com/"); 
      HtmlEdit uIGoogleEdit = new HtmlEdit(browser); 
      uIGoogleEdit.SearchProperties.Add(HtmlControl.PropertyNames.Name, "q"); 
      uIGoogleEdit.DrawHighlight(); 
      //......(do something here)...... 
      Playback.Cleanup(); 
     } 
    } 
} 

은 내가 노력 코드 조각,하지만 작동하지 않습니다 (위의 "uIGoogleEdit.DrawHighlight()"를 대체) :

 Thread myThread = new Thread(new ThreadStart(delegate() 
     { 
       Dispatcher.CurrentDispatcher.Invoke(
        DispatcherPriority.Normal, 
        new Action(delegate() 
        { 
         uIGoogleEdit.DrawHighlight(); 
        })); 
     })); 

     myThread.SetApartmentState(ApartmentState.STA); 
     myThread.Start(); 

답변

0

내가 직접 해결책을 찾았습니다 : Main 함수 앞에 [STAThread]를 추가하면 코드가 작동합니다.

[STAThread] 
    static void Main(string[] args)