2017-02-17 54 views
0

Я пытаюсь создать сценарий автоматизации (не для целей тестирования) с использованием кодированного пользовательского интерфейса, который работает в консольном приложении.DrawHighlight() в кодированном пользовательском интерфейсе не может работать в приложении консоли C#

Эта страница очень помогла мне. http://blogs.microsoft.co.il/shair/2010/07/15/running-codedui-test-from-another-application/

Однако, если я использую DrawHighlight(), я буду получать ниже исключением

System.InvalidOperationException: { "Вызывающий поток должен быть 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

Я сам нашел решение: добавьте [STAThread] перед главной функцией, затем код работает.

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