使用环境: vs2010, 项目类型: Console Application 引用程序集:Watin.Core
测试代码:
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 }
遇到问题:
编译代码不通过,错误提示:
解决:
上面提示大概意思是: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的原因)。
启动项目,报出异常:
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(自由线程)。
单线程套间,简单来说所有对于单线程套间中对象的访问都是通过消息来传递的,所以同一时间只有一个线程能够访问单线程套间中的对象。