Как запустить Word для повторных тестов пользовательского интерфейса? - PullRequest
1 голос
/ 01 марта 2012

Я работаю в команде тестирования, и мы пишем тесты для Word Plugin. У нас есть метод начального слова, который мы повторяем перед каждым вашим тестом. Он отлично работает для отдельных тестов, но когда мы помещаем их в упорядоченный тест, возникает исключение. Вот что у нас было раньше:

if (!Playback.IsInitialized)
{
     Playback.Initialize();
}

// Launch '%ProgramFiles%\Microsoft Office\Office12\WINWORD.EXE'
ApplicationUnderTest wINWORDApplication = ApplicationUnderTest.Launch(exePath, altPath);

if (killAllPreviousWordProcesses == true)
{
       wINWORDApplication.Maximized = true;
}

После просмотра мы нашли сообщение, в котором предлагалось использовать Process.Start () вместо ApplicationUnderTest. Это был код, который они предложили.

Process np = Process.Start(@"C:\Windows\System32\Notepad.exe");
while (np.MainWindowHandle == IntPtr.Zero)
  {
    System.Threading.Thread.Sleep(100);
  }

 //This line throws the error
 WinWindow npWindow = UITestControlFactory.FromWindowHandle(np.MainWindowHandle) as WinWindow;

 MessageBox.Show(npWindow.Name);
 ApplicationUnderTest aut = ApplicationUnderTest.FromProcess(np);
 MessageBox.Show(aut.Title);

Мы изменили его на использование Word (заменив строку на «WINWORD», мы также опробовали путь), но теперь мы получаем исключение NullReferenceException при каждом запуске метода. Я проверил все на ноль и убедился, что np.MainWindowHandle не был нулевым, но он все еще дает мне ошибку. Любые идеи, чтобы исправить это или альтернативные предложения?

StackTrace:

at Microsoft.VisualStudio.TestTools.UITest.Playback.ScreenElement.FindFromWindowHandle(IntPtr windowHandle)
at Microsoft.VisualStudio.TestTools.UITesting.UITestControl..ctor(IntPtr windowHandle)
at Microsoft.VisualStudio.TestTools.UITesting.UITestControl.FromWindowHandle(IntPtr windowHandle)
at Microsoft.VisualStudio.TestTools.UITesting.UITestControlFactory.FromWindowHandle(IntPtr windowHandle)
at Common.BaseUIMapClasses.BaseUIMap.startWord(Boolean killAllPreviousWordProcesses, Boolean maximizeWord, String exePath, String altPath) in C:\Source1\Common\BaseUIMap.cs:line 170

Ответы [ 2 ]

3 голосов
/ 01 марта 2012

Вы должны проверить этот пост

0 голосов
/ 02 февраля 2015

Большое спасибо Никола. Я вижу, что проблема решена, но я хочу поделиться своим интересным случаем. Давайте представим, что у меня есть один тестовый класс, и это базовый класс. Базовый класс определяет некоторые ClassInitialize действия. Тестовый класс имеет атрибут CodedUITest, но базовый класс также имеет атрибут - [TestClass]. Это сломало все.

[CodedUITest]
public class ProjectTabTests : CodedUIFunctionalTestBase
{ 
    [TestInitialize]
    public override void SetUp()
    {
        base.SetUp();
    }

    [TestMethod]
    public void Test()
    {
    }
}

[TestClass] // this broke everything! remove it!
public class CodedUIFunctionalTestBase
{
    public virtual void SetUp()
    {
        KillProcess(Constanst.ProcessName);

        Playback.PlaybackSettings.SmartMatchOptions = SmartMatchOptions.None;
        Playback.PlaybackSettings.LoggerOverrideState = HtmlLoggerState.AllActionSnapshot; // here I got internal NullReferenceException
        Playback.PlaybackSettings.SearchTimeout = 10000;
        Playback.PlaybackSettings.WaitForReadyTimeout = 10000;
        Playback.PlaybackSettings.ThinkTimeMultiplier = 1;
        Playback.PlaybackSettings.MaximumRetryCount = 3;

        Application = ApplicationUnderTest.Launch(Constants.Application);
    }
}

Надеюсь, этот пост кому-нибудь поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...