Watin和ApartmentState.STA

时间:2011-12-25 22:43:53

标签: unit-testing watin

问题:“CurrentThread需要将它的ApartmentState设置为ApartmentState.STA才能自动化Internet Explorer。”

首先,我已经阅读了上述问题的所有解决方案,但没有一个适用于我。可能我错过了一些东西。我已经尝试将执行线程条目添加到我的app.config中,也尝试设置STAThread属性,我仍然面临与上述相同的异常。

工具:Visual Studio 2010,Watin 2.1,c#

场景:尝试在单击按钮时从Web应用程序运行单元测试[c#中的watin脚本]。但是当脚本即将在以下行启动IE时抛出上述异常: IE mybrowser =新IE(“SomeURL here”);

有什么想法?

4 个答案:

答案 0 :(得分:2)

从朋友那里得到它。我们实际上不必添加任何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 :(得分:1)

你的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更改。

答案 2 :(得分:1)

只需在文件顶部或项目的入口点添加[assembly:RequiresSTA]。

答案 3 :(得分:1)

我已经完成了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]
突然间,宇宙再次开始正常运作。