分享和关爱由此萌生,测试的人生会像流水和氧气 ,逐渐逐渐染绿了山河,染蓝了天空,萌生了飞鸟鱼虫,遍地都是生命。这是寒武纪带给我们的这份喜悦和希望。

发布新日志

  • 本人2022年最新日志地址

    2022-11-29 15:28:29

    此博客是本人在年轻时候的博客,
    如果要访问本人在2022年之后的博客, 
    请登录 http://www.51testing.com/?154575
    欢迎大家交流技术经验。
    谢谢。
  • 软件测试中的西游记

    2018-04-07 09:03:56

    唐僧:soapUI--因为看起来比较正规
    猪八戒:jmeter--因为比较万能,什么都能测,也比较有亲和力
    孙悟空:monkeyrunner--因为有monkey
    沙和尚:loadrunner--因为名字显得比较稳重,脚踏实地
    女儿国国王:webservice-因为比较华丽
    观音:SQL语句,因为总是她决定命运
    铁扇公主:数据结构,因为时不时面试会来一次,像扇子的风


  • 有关2018年的测试

    2018-02-16 19:10:09

    2018年已经到了第二个月份,软件测试要学的东西也渐渐发生了变化
    我觉得作为一个2018年的软件测试工作者,需要熟练掌握如下工具:
    1: Jmeter
    2:  Loadrunner
    3:  Soap UI
    4: http F12的内容
    5: 各种相关书籍需要购买和阅读,以不断的补充和丰富自己的知识领域

  • 天蝎座的测试

    2017-07-17 19:08:25

    天蝎座的测试特点

    实事求是

    以测试的对象为主体 而不是以人际关系为主体

    测试追求的是尽善尽美和科学相关联


    只有和真理相关的是真实

    和真理无关的乱七八糟的人际关系什么的都是幻觉 


  • 软件测试心理学之一分钟改善你的心情

    2017-07-16 00:11:27


                  软件测试心理学之一分钟改善你的心情

                
       LOVE

    善念

    感恩

    谢谢

    宽容

    豁达

    你是光芒的中心并能把光芒波及到万事万物

    恒久的友谊

    互帮互助

    发现对方的优点

    理解对方

    发掘理解上的潜能

    运用类比,推理,联想

    想想自己心目中最伟大的数学家 

     



  • Appium搭建

    2017-07-13 21:43:38

    最近我 为了测试 APP的自动化测试

    搭建了 Appium  eclipse的环境,觉得真的比较复杂,而且在搭建环境的过程中,遇到了很多困难。

    也总结了一些经验:


    1:node.js
    必须使用版本比较低的node.js 比如 5.2.0

    2:为了保证运行正常,eclipse 必须使用最新的版本

    3:为了保证正常运行

    D:\Program Files (x86)\Appium\node_modules\appium\node_modules\appium-adb\lib 文件中

    adb.js中

        var procs = [];
        var utlines = stdout.split("\n");
    下面必须添加如下的一行语句
        outlines.shift();  

    4: 
    Eclipse 中
    build path --- configure build path
    ---java compiler 中的  compliance level  数值
    尽可能的大

    5: 我使用的 java client 是
    java-client-2.2.0.jar


  • Visual Studio Coded UI 当找不到控件时该如何思考-下

    2016-09-24 23:01:17

    4

    BrowserWindow Lisiyawindow = BrowserWindow.Launch(new Uri("http://***.com/"));

    #region Variable Declarations

       HtmlEdit uI用户名Edit = new HtmlEdit(Lisiyawindow.CurrentDocumentWindow);

    #endregion

     

       uI用户名Edit.SearchProperties[HtmlEdit.PropertyNames.Id] = "UserName";

                uI用户名Edit.SearchProperties[HtmlEdit.PropertyNames.Name] = "UserName";

                uI用户名Edit.FilterProperties[HtmlEdit.PropertyNames.LabeledBy] = "用户名";

                uI用户名Edit.FilterProperties[HtmlEdit.PropertyNames.Type] = "SINGLELINE";

                uI用户名Edit.FilterProperties[HtmlEdit.PropertyNames.Title] = null;

                uI用户名Edit.FilterProperties[HtmlEdit.PropertyNames.Class] = null;

                uI用户名Edit.FilterProperties[HtmlEdit.PropertyNames.ControlDefinition] = "name=\"UserName\" id=\"UserName\" type=\"text";

                uI用户名Edit.FilterProperties[HtmlEdit.PropertyNames.TagInstance] = "3";

     uI用户名Edit.Find();  //这句话加或不加都可以

       uI用户名Edit.Text = "a";

     

    5

    BrowserWindow Lisiyawindow = BrowserWindow.Launch(new Uri("http://***.com/"));

    #region Variable Declarations

       HtmlEdit uI用户名Edit = new HtmlEdit(Lisiyawindow);

    #endregion

     

       uI用户名Edit.SearchProperties[HtmlEdit.PropertyNames.Id] = "UserName";

                uI用户名Edit.SearchProperties[HtmlEdit.PropertyNames.Name] = "UserName";

                uI用户名Edit.FilterProperties[HtmlEdit.PropertyNames.LabeledBy] = "用户名";

                uI用户名Edit.FilterProperties[HtmlEdit.PropertyNames.Type] = "SINGLELINE";

                uI用户名Edit.FilterProperties[HtmlEdit.PropertyNames.Title] = null;

                uI用户名Edit.FilterProperties[HtmlEdit.PropertyNames.Class] = null;

                uI用户名Edit.FilterProperties[HtmlEdit.PropertyNames.ControlDefinition] = "name=\"UserName\" id=\"UserName\" type=\"text";

                uI用户名Edit.FilterProperties[HtmlEdit.PropertyNames.TagInstance] = "3";

     uI用户名Edit.Find();  //这句话加或不加都可以

       uI用户名Edit.Text = "a";

     

     

    在以上5种情况之下,对于情况A,都是可以成功执行的。

     

    现在我们来看对于情况B,这5种情况是否可以成功执行吧。

     

    对于情况B,我们只需

    1)修改初始的url

    2)增加一个点击的动作

    如:Mouse.Click(uI登录Hyperlink, new Point(13, 8));

    然后就可以跳到情况BURL

     

    现在我们来统计这5种查找语句情况是否可以对于情况B是否适用

    结果是对于情况B

    每次都是失败的。

     

     

    此外,我还试验了在第二页面使用如下语句,但是也没有成功的找到控件

     

       BrowserWindow Lisiyawindow2 = new BrowserWindow();

       HtmlEdit uI用户名Edit = new HtmlEdit(Lisiyawindow2);

       uI用户名Edit.SetFocus();

    因此我们可以说,使用情况B是很难获取控件的。

    但是这并不是说就永远无法测试情况B了,可以使用如下方法:

    当从A页面到B页面时,如果可以确认整个跳转过程是正确的,则可以再次重新编写加载B页面的语句。

     BrowserWindow Lisiyawindow = BrowserWindow.Launch(new Uri("http://*****.com/"));

    如有其他方法,可以与我探讨,谢谢。



  • Visual Studio Coded UI 当找不到控件时该如何思考-上

    2016-09-23 21:37:10

    最近,我在编辑Coded UI automation 的时候,遇到过一个问题。

    一个看似很简单的控件,却无法识别。在回放的过程中,它的报错信息为:


    也就是说,VS2012认为这个控件是隐藏的控件。可是,这个控件明明是显示的控件,并不是隐藏的控件,为何在回放的时候,VS2012无法识别呢?

    另外一点可以注意到,在这个报错信息下,还非常清楚的列出了这个控件的所有属性,比如:

    ControlType:Edit

    Id:username

     等等,一切仿佛都预示着,这个控件被很明确的找到了。

     而那句寻找用户名的语句是在登陆界面的如下语句:

     uI用户名Edit.Text = "a";

     如果需要寻找的控件是在浏览器直接打开的页面中(情况A),那么是可以成功的寻找到这个控件的,而如果,用户在浏览器直接打开的页面中点击了某个按钮或者链接而出现的页面中才会有这个控件(情况B),那么就会有一定的几率,VS2012无法识别到这个控件。

     于是,我就在想,VS2012,在寻找控件的时候是否有一定的机制?

     

    于是我模拟A的寻找机制,如果情况A百分之百找到控件,那么情况B是否可以找到

     

    于是有以下几种情况按照情况A寻找控件

     

    1

     #region Variable Declarations

    HtmlEdit uI用户名Edit = this.UIMap.UIChrome插件谷歌浏览器插件提供ChrWindow.UI登录Chrome插件Document.UI用户名Edit;

    #endregion

     

    uI用户名Edit.Text = "a";

    2

    #region Variable Declarations

    HtmlEdit uI用户名Edit = new HtmlEdit(this.UIMap.UIChrome插件谷歌浏览器插件提供ChrWindow.UI登录Chrome插件Document);//必须是HtmlEdit上一级以上

    #endregion

     

       uI用户名Edit.SearchProperties[HtmlEdit.PropertyNames.Id] = "UserName";

                uI用户名Edit.SearchProperties[HtmlEdit.PropertyNames.Name] = "UserName";

                uI用户名Edit.FilterProperties[HtmlEdit.PropertyNames.LabeledBy] = "用户名";

                uI用户名Edit.FilterProperties[HtmlEdit.PropertyNames.Type] = "SINGLELINE";

                uI用户名Edit.FilterProperties[HtmlEdit.PropertyNames.Title] = null;

                uI用户名Edit.FilterProperties[HtmlEdit.PropertyNames.Class] = null;

                uI用户名Edit.FilterProperties[HtmlEdit.PropertyNames.ControlDefinition] = "name=\"UserName\" id=\"UserName\" type=\"text";

                uI用户名Edit.FilterProperties[HtmlEdit.PropertyNames.TagInstance] = "3";

     

     uI用户名Edit.Find();  //这句话加或不加都可以

     

       uI用户名Edit.Text = "a";

    3

    #region Variable Declarations

    HtmlEdit uI用户名Edit = new HtmlEdit(this.UIMap.UIChrome插件谷歌浏览器插件提供ChrWindow);//必须是HtmlEdit上一级以上

    #endregion

     

       uI用户名Edit.SearchProperties[HtmlEdit.PropertyNames.Id] = "UserName";

                uI用户名Edit.SearchProperties[HtmlEdit.PropertyNames.Name] = "UserName";

                uI用户名Edit.FilterProperties[HtmlEdit.PropertyNames.LabeledBy] = "用户名";

                uI用户名Edit.FilterProperties[HtmlEdit.PropertyNames.Type] = "SINGLELINE";

                uI用户名Edit.FilterProperties[HtmlEdit.PropertyNames.Title] = null;

                uI用户名Edit.FilterProperties[HtmlEdit.PropertyNames.Class] = null;

                uI用户名Edit.FilterProperties[HtmlEdit.PropertyNames.ControlDefinition] = "name=\"UserName\" id=\"UserName\" type=\"text";

                uI用户名Edit.FilterProperties[HtmlEdit.PropertyNames.TagInstance] = "3";

     uI用户名Edit.Find();  //这句话加或不加都可以

     

       uI用户名Edit.Text = "a";



  • 学习Python

    2016-05-10 17:58:19

    Python添加到Eclipse简要说明
    1:需要在help--Install new software界面

    输入的url为

    重启

    2:Window > Preferences->Interpreters 添加Python

    3:添加Python的project

    4:添加Python的module


  • 已知网址和参数,获取cookie信息,打开另外一个网址及其参数的方法

    2016-04-22 14:53:04

    已知网址和参数,获取cookie信息,打开另外一个网址及其参数的方法
    1:已知网址和这个网址所携带的参数
    2:获取它的cookie值
    3:打开另外一个网址,并且也提交相应的参数
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLConnection;
    import java.util.List;
    import java.util.Map;

    import org.openqa.grid.web.servlet.handler.WebDriverRequest;
    import org.openqa.selenium.remote.http.HttpRequest;
    import org.openqa.selenium.remote.http.HttpResponse;

    public class correct {

    public static String sendGet(String url, String param, String newurl, String post) {
    HttpURLConnection connection;
    String result2 = "";

    BufferedReader in2 = null;
    String urlNameString = url + "?" + param;
    URL realUrl;
    try {
    realUrl = new URL(urlNameString);

    String cookieVal = null;
    String sessionId = "";
    String key = null;

    if (realUrl != null) {
    try {

    connection = (HttpURLConnection) realUrl.openConnection();
    for (int i = 1; (key = connection.getHeaderFieldKey(i)) != null; i++) {
    if (key.equalsIgnoreCase("set-cookie")) {
    cookieVal = connection.getHeaderField(i);
    cookieVal = cookieVal.substring(0, cookieVal.indexOf(";"));
    sessionId = sessionId + cookieVal + ";";
    }
    }
    System.out.println(sessionId);
    } catch (MalformedURLException e) {
    System.out.println("url can't connection");
    return null;
    } catch (IOException e) {
    System.out.println(e.getMessage());
    return null;
    }
    }

    try {
    URL NewURL = new URL(newurl);
    connection = (HttpURLConnection) NewURL.openConnection();


    if (realUrl != null) {
    connection.setRequestProperty("Cookie", sessionId);
    }
    if (post != "") {
    connection.setDoOutput(true);
    connection.setRequestMethod("POST");
    connection.getOutputStream().write(post.getBytes());
    connection.getOutputStream().flush();
    connection.getOutputStream().close();
    }
    int responseCode = connection.getResponseCode();
    int contentLength = connection.getContentLength();
    if (responseCode != HttpURLConnection.HTTP_OK)
    return (null);


    in2 = new BufferedReader(new InputStreamReader(connection.getInputStream()));
    String line;
    while ((line = in2.readLine()) != null) {
    result2 += line;

    }
    } catch (Exception e) {
    return (null);
    }

    return result2;

    } catch (MalformedURLException e1) {
    e1.printStackTrace();
    }

    return result2;

    }
  • 萌生

    2016-04-16 10:28:52

    分享和关爱由此萌生,测试的人生会像流水和氧气 ,逐渐逐渐染绿了山河,染蓝了天空,萌生了飞鸟鱼虫,遍地都是生命。这是寒武纪带给我们的这份喜悦和希望。


    请问地球在经历了40多亿年的时间,才有了生命是否太慢了?


    当你看到生命的绚烂,你是否惊艳到了?


    在练习芭蕾的时候,我们坚持的练习,于是,我们可以发现自己的技巧更纯熟,

    我们的身姿更为优美,那是因为,当一段时间的练习之后,一切美妙的幻化成果。


    可是我们该如何将测试与此相结合呢?

    通过10年的测试历程,我感到,美妙的梦幻只有在我的心中存在,

    有人说我,为什么说话总给人梦幻色彩?

    因为只有带着如此美妙的心境,


    才能真正的测试。


    每次有新的比较大的需求,我都必须通读需求,把我好需求的脉络,路径,然后再写
    测试用例,而一旦,发现了新的脉络,必然要重新的设计所有的测试脉络,这是耗费时间的,但是这是必要的,因为只有这样做,才能进行更完整的测试。

    最终可以把整个测试的脉络,写成一篇小说。

     


    可是,这个过程,并不是每个公司都会理解的。


    我每次进入一个公司,都会带着认为大家都认可我的测试思路的前提。


    因为我的心态很好,但是有的人可能会认为我只是来执行测试用例,或者只是在抢他


    们的地位的。


    我才不在乎谁的地位呢!如果被我发现你把我当作奴隶,那么我就说拜拜。



    我觉得人都是平等的。


    永远就是这样


    永远就是这样。

    对我来说,测试工程师都是高级测试工程师。因为每个爱幻想,爱测试,不在乎名利

    的测试工程师,都是高级测试工程师,因为他们的思想境界很高级!





    只有把别人当作奴隶的测试工程师,是低级测试工程师。






  • 连续打开多次浏览器并运行同一个脚本的方法

    2016-04-15 17:03:04

    1:使用Selenium IDE录制自动化脚本,并将脚本保存在 eclipse的 某个package下的 class中
    2:在同一个 package中建立另一个class,并调用前面的class。
    可以只调用一次,也可以循环调用多次。


    package testt;
    import org.junit.runner.JUnitCore;
    import org.junit.runner.Request;

    public class run {
    public static void main(String[] args) {
         /*   new Thread() {
                public void run() {
                    JUnitCore.runClasses(new Class[] { testt.class }); //这个是说要直接运行某一整个 class 中的所有方法。
                   //  new JUnitCore().run(Request.method(testt.class,"setUp")); //这个是指定 run 那个 class 中的哪个方法
                     
        } }.start();}} //new Thread() 
    */
    for (int i = 0; i< 10; i++)  
      {  
      new Thread() {  
      public void run() {  
      JUnitCore.runClasses(new Class[] { testt.class }); }}.start(); 
      }
      }
    }

    3:使用以下方法可以连续打开多个浏览器,并行的执行自动化程序
    public static void main(String agrs[]) {

            long startTime = System.currentTimeMillis(); 

             
            int threadNumber = 10;
          final CountDownLatch countDownLatch = new CountDownLatch(threadNumber);
            
            
            for (int i = 0; i < threadNumber; i++) {
                new Thread(new Runnable() {

                    public void run() {
                    ×××××××
                     
                      countDownLatch.countDown();
                 
                    }
                }).start();
                
               
              
            }

  • 靠近真理

    2016-04-14 11:23:45

    在测试的过程中,不仅仅是发现bug那么简单。
    真相只有一个。
    但是发现真相的道路是曲折的。
    接近真相的道路是迂回曲折的,有时候不免要走很多的弯路。
    在接近真相的道路上,会有很多人说你很多很多的坏话,说的你无法呼吸,
    说的你简直无法相信,自己是一个复旦大学的本科毕业生,也是一个
    华师大的本科毕业生,仿佛自己连一个幼儿园的文凭都无法拿到了。
    因为我在干什么,为什么要做蠢事?
    做别人无法理解的蠢事?
    。。。


    但是别急,也不要放弃,不要自暴自弃。

    接近真相的过程是迂回曲折的,我们的活动会被人误会,那是因为这些活动都是接近

    真相所不可避免要进行的活动。


    要坚持自己的每个活动,每个行动,那都是为了接近真相。


    最美的真相,比彩虹都美,

    而且当一切成功之后,一切的活动的历史,都将是最美的过程,也是值得保留的。

    回顾一切的历史,你会发出内心中最最宽慰的心声。

    反复的回顾这段历史吧,你会发现它的财富要比真相更美!


    千万不要抑郁,不要放弃!



  • 软件测试就像给人诊断

    2016-03-14 00:43:07

    软件测试的过程其实很像给人看病的过程
    首先,你看到一个人的症状的时候,就是看到了这个bug,
    然后通过这个bug可以联想到某种病
    通过对于这个种病的联想
    你可以查看有关这种病的关联性bug是否在这个人的身上也都存在,
    如果这种病的关联性的bug都存在
    那么就可以很肯定的说,这个人是得了这个病。


    。。。。
    当修复了这个bug之后,


    你应该把有关这个病的所有bug都验证一遍,

    并且最好把全身都检查一遍,以确保没有影响到整个人


    。。。。。
    这只是一个随想而已。。。。晚安
  • 软件测试给我的恐慌和迷茫

    2016-02-18 01:26:15

    经历过了那么多年的软件测试生涯,我也学到了很多知识,
    其中有一些也经过了实践的检验,现在我已经从一个25岁的女孩子,到现在我已经是一个比较**的女性了。
    软件测试曾经是一个让我觉得前途非常美好**业,我为此付出了许多许多,
    可是这一年来我却一直是在不断的修复中生活的。
    理解,这个词语非常重要。
    父母总是希望我永远都有工作,他们无法理解我一天不上班的生活,这给我相当大的压力,仿佛我必须去一个单位,不管是好的还是不好的,否则就是啃老族。
    可是这种思想,把我带入了一个死胡同,当遇到不好的人的时候我没有辨别能力。
    因为父母是思想高尚的人,他们的一生中也有很多种坏人并没有遇到过。
    我就更无法辨别哪种人是坏人,哪种人不是坏人了。

    公司不是学校,你的努力老师会表扬你,

    有些领导不会表扬你,即便你为这个公司鞠躬尽瘁,体力不支的时候,
    (我所指的并不是我现在的单位,而是曾经的单位)

    他们还是说你做的不够好,

    这时候,善良的我还是会以为自己不够好,继续做下去,

    到了自己的极限。

    事实上,我已经做的够好了,非常好了,可是这是他们的计谋。

    大家不可以上当。

    我在想,如果我不工作又怎样呢?

    我要学习很多知识,然后找一个更有前途的工作,一个更公平的工作,一个有正能量

    的工作单位,一个能施展才华的单位,可是我父母不会同意。

    他们以为只要有单位,就是万事大吉。

    可是一个负能量的单位,

    会不会给我的人生带来毁灭性的打击呢?

    我的人生,难道必须由一个单位主宰吗?

    我的世界观,难道一定要由一个单位来主宰吗?

    我可以有自由的生活吗?

    也许你会奇怪我怎么那么胆大,竟然敢说这种话?难道不想活了吗?

    就因为这种话说的人太少了,世界上的妥协就多了,那些被压抑的人,

    才渐渐老去,世界呈现出一种灰暗而没有正能量的形态。

    这是我所不喜欢的。





  • Loadrunner学习

    2015-04-17 03:51:21

    1:双击 Virtual User Generator”图标,打开VUG

  • 软件测试测试点

    2014-12-11 20:58:04

    功能性
    适合性
    准确性
    互操作性
    保密安全性

    可靠性
    容错性
    易恢复性

    易用性
    易理解性
    易学性
    易操作性

    效率
    时间特性
    资源利用性

    维护性
    易分析性
    易改变性
    稳定性
    易测试性

    可移植性
    适应性
    易安装性
    共存性
    易替换性



  • Eclipse Selenium Java操作步骤

    2014-12-04 19:57:23

     

    1:  http://docs.seleniumhq.org/download/

    2:下载selenium-server-standalone-2.44.0.jar


    3: selenium-java-2.44.0.zip-> 解压后生成selenium-java-2.44.0.jar


    4:打开EclipseFile -> new-> project->选择Java Project->next->输入Project name->点击next ->选择Library 标签->点击”Add external JARs…”按钮->选择刚才所下载的selenium-server-standalone-2.44.0.jarselenium-java-2.44.0.jar

    ->点击”Finish”按钮。




    5 这时候在左侧的Package Explorer中,就会有刚才创建的项目。



    6:右击项目名称->new -> class->输入Package 名称和class名称->点击Finish按钮


    7:打开Firefox浏览器,点击Tools->selenium IDE->Options->Format->HTML->点击Record按钮进行录制,录制完成之后,点击Options->Format->Java/Junit4/WebDriver


    Source中的内容CopyEclipse中的Class里面


     


    8:修改PackageClass的名字


    9:点击Run test按钮就可以进行运行了。


    10:到http://docs.seleniumhq.org/download/,下载一个Chrome driver,解压缩有,将这个exe文件放在一个目录之下



    11:在class文件中增加这样的语句,就可以用Google Chrome浏览器进行运行测试了。


    System.setProperty("webdriver.chrome.driver", "C:\\Shared Files\\workspace2\\AmyWu\\Browser Driver\\chromedriver.exe");


         


            driver = new ChromeDriver();





    PS

    有时候需要特别强调使用的firefox的地址

    可以添加此语句

     System.setProperty("webdriver.firefox.bin", "C:\\Program Files (x86)\\Mozilla Firefox2\\firefox.exe");  




    最近发现为什么最新的firefox无法使用selenium进行录制了,后来发现是版本问题
    1:使用45版本左右的firefox进行录制脚本
    2:使用更早的版本的firefox进行eclipse的调用
    调用firefox进行查看是否脚本正确





  • 测试日志的bug

    2014-09-29 17:01:52

    排版乱了
     
    4:双击“Button”按钮,我们将代码放入。
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using TestProject1;
    namespace WindowsFormsApplication2
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private void button1_Click(object sender, EventArgs e)
            {
                InstallManager.Init();
                CodedUITest1 t = new CodedUITest1();
                t.CodedUITestMethod1();
            }
            private void Form1_Load(object sender, EventArgs e)
            {
            }
        }
    }
    4:双击“Button”按钮,我们将代码放入。
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using TestProject1;
    namespace WindowsFormsApplication2
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private void button1_Click(object sender, EventArgs e)
            {
                InstallManager.Init();
                CodedUITest1 t = new CodedUITest1();
                t.CodedUITestMethod1();
            }
            private void Form1_Load(object sender, EventArgs e)
            {
            }
        }
    }
    4:双击“Button”按钮,我们将代码放入。
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using TestProject1;
    namespace WindowsFormsApplication2
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private void button1_Click(object sender, EventArgs e)
            {
                InstallManager.Init();
                CodedUITest1 t = new CodedUITest1();
                t.CodedUITestMethod1();
            }
            private void Form1_Load(object sender, EventArgs e)
  • 用VS2010的控件调用Coded UI

    2014-09-22 10:05:43

    1:打开VS2010 File->New->Project, 选择Windows Forms Applications,名称取WindowsFormsApplication1

     

     

    2:点击OK按钮,这样就会生成一个新的WindowsFormsApplication

    3:点击导航栏上方的ToolBox,将Button拖入Form1中,

    4:双击“Button”按钮,我们将代码放入。

    using System;

    using System.Collections.Generic;

    using System.ComponentModel;

     using System.Data;

      using System.Drawing;

     using System.Linq;

    using System.Text;

     using System.Windows.Forms;

    using TestProject1;

     namespace WindowsFormsApplication2

     {

        public partial class Form1 : Form

       {

           public Form1()

           {

               InitializeComponent();

         }

           private void button1_Click(object sender, EventArgs e)

             {

               InstallManager.Init();

             CodedUITest1 t = new CodedUITest1();

              t.CodedUITestMethod1();

          }

             private void Form1_Load(object sender, EventArgs e)

            {

            }

        }

     }

      4:点击File->New->Project,然后选择Test Project->Solution 选择 add to solution,表示增加在一个原先的project后面的projectLocation就是原先的Project

      5:点击OK 按钮。

     6WindowsFormsApplication1 要能调用Test Project1

     7 右击 WindowsFormsApplication1references,点击add references->projects标签下,选择Test Project1,然后点击OK按钮。

      8:右击“TestProject1”,点击Add->New Test->选择Coded UI Test 起名称CodedUITest1,然后点击“OK”

     9:在Coded UI test 中,添加最简单的Coded UI语句,方便测试

     

     

     

     10:右击“TestProject1”,点击Add->Class,然后取名为InstallManager,添加InstallManager的语句:

     using System;

     using System.Collections.Generic;

      using System.Linq;

      using System.Text;

      using Microsoft.VisualStudio.TestTools.UITesting;

     namespace TestProject1

      {

          public class InstallManager

          {

              public static void Init()

              {

                  if (!Playback.IsInitialized)

                  {

                      Playback.Initialize();

                  }

              }

              public static void Cleanup()

              {

                  try

                  {

                      Playback.Cleanup();

                  }

                  catch { }

              }

          }

      }

     

      11Debug成功,生成exe

      12:将以下dll放入WindowsFormsApplication \WindowsFormsApplication\bin\Debug之下,

      http://www.cnblogs.com/gannan/archive/2012/02/07/2341961.html

      Microsoft.VisualStudio.QualityTools.CodedUITestFramework.dll
    Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
    Microsoft.VisualStudio.QualityTools.UnitTestFramework.xml
    Microsoft.VisualStudio.TestTools.TestSettings.Common.dll
    Microsoft.VisualStudio.TestTools.TestSettings.dll
    Microsoft.VisualStudio.TestTools.UITest.CodeGeneration.dll
    Microsoft.VisualStudio.TestTools.UITest.CodeGeneration.xml
    Microsoft.VisualStudio.TestTools.UITest.Common.dll
    Microsoft.VisualStudio.TestTools.UITest.Common.xml
    Microsoft.VisualStudio.TestTools.UITest.Extension.dll
    Microsoft.VisualStudio.TestTools.UITest.Extension.IE.Communication.Interop.dll
    Microsoft.VisualStudio.TestTools.UITest.Extension.IE.dll
    Microsoft.VisualStudio.TestTools.UITest.Extension.MSAA.dll
    Microsoft.VisualStudio.TestTools.UITest.Extension.Uia.dll
    Microsoft.VisualStudio.TestTools.UITest.Extension.xml
    Microsoft.VisualStudio.TestTools.UITest.Framework.dll
    Microsoft.VisualStudio.TestTools.UITest.Playback.dll
    Microsoft.VisualStudio.TestTools.UITest.Recorder.dll
    Microsoft.VisualStudio.TestTools.UITesting.dll
    Microsoft.VisualStudio.TestTools.UITesting.dll

      如果还是不行,可以尝试双击WindowsFormsApplication,修改Properties,然后改

      .Net Framwork4

321/212>
Open Toolbar