Watin and ApartmentState.STA - PullRequest
       28

Watin and ApartmentState.STA

1 голос
/ 26 декабря 2011

Проблема: «CurrentThread должен иметь значение ApartmentState, установленное на ApartmentState.STA, чтобы иметь возможность автоматизировать Internet Explorer.»

Прежде всего, я прочитал все решения вышеуказанных проблем, и ни одна из них не работает для меня. Может быть, я что-то упустил. Я попытался добавить запись Threading Thread в мой app.config, также попытался установить атрибут STAThread, и я все еще сталкиваюсь с тем же исключением, как указано выше.

Инструменты: Visual Studio 2010, Watin 2.1, c #

Сценарий: Попытка запустить модульный тест [скрипт watin в c #] из веб-приложения при нажатии кнопки. Но вышеприведенное исключение выдается, когда скрипт собирается запустить IE в следующей строке: IE mybrowser = новый IE («SomeURL здесь»);

Есть мысли?

Ответы [ 4 ]

2 голосов
/ 30 декабря 2011

Получил от друга. На самом деле нам не нужно добавлять какие-либо записи app.config. Просто запустите поток в одном состоянии. В моем случае я написал следующий код в моем обработчике нажатия кнопок:

System.Threading.Thread th = new Thread(new ThreadStart(Test));
        th.SetApartmentState(ApartmentState.STA);
        th.Start();
        th.Join();

and i moved the call to unit test in the private. TEST method as follows:
 private void Test()
    {
        var som = new Project.ClassName();
        som.MethodToExecute();
}
1 голос
/ 02 октября 2014

Я уже внес изменения в app.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <sectionGroup name="NUnit">
      <section name="TestRunner" type="System.Configuration.NameValueSectionHandler" />
    </sectionGroup>
  </configSections>
  <NUnit>
    <TestRunner>
      <add key="ApartmentState" value="STA" />
    </TestRunner>
  </NUnit>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="nunit.framework" publicKeyToken="96d09a1eb7f44a77" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.6.3.13283" newVersion="2.6.3.13283" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

, но без кубиков.Я открыл AssemblyInfo и добавил

[assembly: RequiresSTA]

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

1 голос
/ 20 марта 2014

Просто добавьте [сборка: Требуется STA] вверху файла или в точке входа вашего проекта.

1 голос
/ 28 декабря 2011

Как выглядит ваш App.Config?

  <NUnit>
    <TestRunner>
      <!-- Valid values are STA,MTA. Others ignored. -->
      <add key="ApartmentState" value="STA"/>
    </TestRunner>
  </NUnit>

Вышеописанное работает для меня на Win7, IE9 (32 бита) и Watin2.1. Он также работает на WinXP, IE8, WatiN 2.1. Я на 99% уверен, что он отлично работал и на предыдущих версиях WatiN. Никаких других изменений ApartmentState не требовалось.

...