问题:“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”);
有什么想法?
答案 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]
突然间,宇宙再次开始正常运作。