zoukankan      html  css  js  c++  java
  • 控制台应用项目中使用WatinWeb测试工具遇到的问题

    使用环境: 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(自由线程)。
    单线程套间,简单来说所有对于单线程套间中对象的访问都是通过消息来传递的,所以同一时间只有一个线程能够访问单线程套间中的对象。

     

     

     

  • 相关阅读:
    学WPF (1 of n)干啥都有第一次
    程序启动时显示Flash窗体(C#)
    对象序列化后直接获取byte[]的方法
    工程管理(1 of n): 建立用于管理代码开发的注释标记
    发现Visual Studio隐含的大礼包漂亮的Visual Studio图像库
    C# Hello World
    更人性化地控制用户输入(1 of n)
    快手导航 计算机软件网址导航 时空地图TimeGIS
    中国图书馆图书分类法(Chinese Library Classification CLC)的XML文档生成 时空地图TimeGIS
    快手软件 v2.5 发布 时空地图TimeGIS
  • 原文地址:https://www.cnblogs.com/xiaoqiangR/p/2620475.html
Copyright © 2011-2022 走看看