当前位置: 首页 > 工具软件 > Watin > 使用案例 >

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

逑俊楚
2023-12-01

使用环境: 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

 类似资料: