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

发布新日志

  • 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";



  • 用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

  • VS测试中遇到的2个棘手问题--第二篇

    2014-04-07 00:12:02

        我遇到的第二个非常困难的问题是,我希望使用VS Coded UI Automation test 既能够测试网页中显示不到的地方,又能够测试被其他控件遮住的控件。

        因为显示屏的大小问题,导致有些控件无法显示完全,或者被其它控件所遮住是非常有可能的。

        如果一个控件仅仅是由于显示器大小的原因没有显示出来,那么可以使用此类函数:
     HtmlInputButton btnSubmit = new HtmlInputButton(browser);
      btnSubmit.SearchProperties[HtmlInputButton.PropertyNames.Class] = "AA";

        就能找到对应的属性,查找到相应的控件,就可以点击相应的按钮或者链接等等。

        如果这个控件被其他控件挡住,而显示不出,那么就应该把被挡住的控件设法取消被挡住的情况。

    有以下情况可能会被挡住:
    1:要打开A控件必须先打开B控件,那么就应该先录制打开B控件的自动化操作,这样就能顺利的打开A控件。
    2:必须要拖动浏览器右侧的滚动条才能使得控件摆脱被挡住的情况。
    对于第二种情况,我发现是可以进行录制的。
    录制的时候只需要拖动浏览器右侧的滚动条即可。
    它会形成这样的语句:
       Mouse.StartDragging(uI毒霸网址大全最安全实用的网址导航Document, new Point(1908, 254));
       Mouse.StopDragging(uI毒霸网址大全最安全实用的网址导航Document, 2, 1038);
    我想这就是我这几天的收获吧,我会继续和大家分享。



  • VS测试中遇到的2个棘手问题--第一篇

    2014-04-06 23:32:44

         这两天我在测试的过程中遇到了两个非常棘手的问题。
        第一个问题就是,VS2012在运行自动化测试完全完成之后,就会自动把浏览器关闭了。
        我希望能在录制回放之后,它能将最后一页的页面仍然保留着,这样就能方便测试人员查看情况。
        但是在VS2010中,就没有这个问题,VS2010 在回放之后,页面是保留着的。
        我家安装了VS2012,当时是想使用最先进的版本,所以就毫不犹豫的选择了VS2012。
        为了能够实现这个保留页面的效果,尝试了各种情况。都一一失败,最终还是痛心的卸载了VS2012,并安装了VS2010。
        以下是我尝试VS2012的情况。

    打开浏览器的两种命令:

    BrowserWindow window = BrowserWindow.Launch(new Uri("http://www.baidu.com/"));
    Process p = Process.Start(@"C:\Users\XXX\AppData\Roaming\360se6\Application\360se.exe", "http://www.baidu.com");
    BrowserWindow browser = BrowserWindow.FromProcess(p);
    根据网上的介绍我应该在这之后加上这个语句:
    window.CloseOnPlaybackCleanup = false;
    这样就应该能够在运行之后就关闭浏览器了。
    但是根据我的实验下来并不是完全无效的-当然也并不称之为有效的。
    当我打开了一个游览器之后,运行
    BrowserWindow window = BrowserWindow.Launch(new Uri("http://www.baidu.com/"));
    window.CloseOnPlaybackCleanup = false;
    此时就会有2个浏览器留着,也就是说,VS2012自动化测试所打开的那个浏览器也被保留下来了。--此时有效。
    如果我最初没有打开浏览器,而直接运行以上的语句,那么在以上语句运行完成之后,这个VS2012自动化测试所打开的那个浏览器就会被自动关闭。
    不管是使用IE,还是其他浏览器都是一样的结果。
    不管是在哪个函数中放置以上的语句,也都是一样的效果。(比如[TestInitialize]等等)
    浏览器被无情的关闭了。
    以下是我在国外博客上查到的此问题的回答:

    This change to this functionality in VS 2012 is by design. It is however possible to rollback the behaviour to how it originally was in VS 2010 i.e. the IE window will not close after the test execution unless otherwise commanded by the test to do so.

    To go back to the original functionality, set BrowserWindow.CloseOnPlaybackCleanup = false

    至此,卸载了VS2012。








Open Toolbar