控制台应用项目中使用WatinWeb测试工具遇到的问题

本文解决使用WatiN.Core进行自动化测试时遇到的依赖问题,以及通过设置[STAThread]属性解决线程模型冲突导致的异常。详细介绍了.NETFramework4.0与4.0ClientProfile的区别,以及STA线程模型的使用场景。

使用环境: vs2010, 项目类型: Console Application 引用程序集:Watin.Core

 

测试代码:

 

 1         //[STAThread]
 2         static void Main(string[] args)
 3         {
 4             //实例化IE类,可以把实例化的ie看成是页面,以后的操作基本都是它打交道
 5 
 6             IE ie = new IE("http://www.baidu.com/");
 7 
 8             //找到搜索输入框,并输入“Watin”
 9 
10             ie.TextField(Find.ById("kw")).TypeText("Watin");
11 
12             //找到搜索按钮并点击
13 
14             ie.Button(Find.ById("su")).Click();
15         }

遇到问题:

编译代码不通过,错误提示:

 

Warning    1    The referenced assembly "WatiN.Core" could not be resolved because it has a dependency on "System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" which is not in the currently targeted framework ".NETFramework,Version=v4.0,Profile=Client". Please remove references to assemblies not in the targeted framework or consider retargeting your project.    ConsoleAppWatin

 

解决:

上面提示大概意思是:Watin.Core有个依赖不在当前的NetFramework中,经检查发现项目中使用的 Target framework 版本为:.NET Framework 4 Clinet Profile,改为 NET Framework 即可通过编译正常使用.

这里顺便说说 .NET Framework 4.0 和.NET Framework 4.0 Client Profile 区别:Net Framework 4.0毫无疑问就像是.Net Framework 2.0一样是.Net Framework 的 4.0版本;而.Net Framework 4.0 Client Profile是.Net Framework 3.5 sp1的子集,是.Net Framework 4.0 简化版,是面向客户端应用程序的(估计这也是为什么不能够使用IIS7 API的原因)。

 

启动项目,报出异常:

 

Unhandled Exception: System.Threading.ThreadStateException: The CurrentThread ne
eds to have it's ApartmentState set to ApartmentState.STA to be able to automate
 Internet Explorer.
   at WatiN.Core.IE.CheckThreadApartmentStateIsSTA()
   at WatiN.Core.IE.CreateNewIEAndGoToUri(Uri uri, IDialogHandler logonDialogHan
dler, Boolean createInNewProcess)
   at WatiN.Core.IE..ctor(String url)
   at ConsoleAppWatin.Program.Main(String[] args) in D:\vs2010\ConsoleAppWatin\C
onsoleAppWatin\Program.cs:line 15 //IE ie = new IE("http://www.baidu.com/"); 15行的代码

 

 

 解决办法:

在 Main方法上加属性:[STAThread]

[STAThread]是Single  Thread  Apartment单线程套间的意思,是一种线程模型,用在程序的入口方法上
(在C#和VB.NET里是Main()方法),来指定当前线程的ApartmentState 是STA。用在其他方法上不产生影响。
在aspx页面上可以使用AspCompat = "true" 来达到同样的效果。这个属性只在 Com Interop 有用,
如果全部是  managed  code  则无用。简单的说法:[STAThread]指示应用程序的默认线程模型是单线程单元 (STA)。
启动线程模型可设置为单线程单元或多线程单元。如果未对其进行设置,则该线程不被初始化。也就是说如果你用的.NET Framework,
并且没有使用COM Interop,一般不需要这个Attribute。其它的还有MTA(多线程套间)、Free Thread(自由线程)。
单线程套间,简单来说所有对于单线程套间中对象的访问都是通过消息来传递的,所以同一时间只有一个线程能够访问单线程套间中的对象。

 

 

 

 

转载于:https://www.cnblogs.com/xiaoqiangR/archive/2012/08/02/2620475.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值