沅芷湘兰 发表于 2013-11-28 16:45:53

SilkTest在Silk4NET中如何完成CS程序所有对象的遍历

如下代码主要完成了如下操作:
        在XP系统自带的“计算器”上将所有对象遍历并把对象类型打印出来
        进行对象类型的匹配(如:SilkTest.Ntf.PushButton)
        进行对象属性的匹配(如:caption)
        通过正则表达式来进行对象过滤(如:regexs)
        在匹配好的对象上完成了PushButton的点击(如:数字按钮)
        取得计算器上显示的数字并打印出来(如:TextField)

下面是完整的代码:using System;
using System.Collections.Generic;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using SilkTest.Ntf;
using System.Text.RegularExpressions;

namespace Silk4NETFoundAllObject
{
    [SilkTestClass]
    public class findAllCSObject
    {
      private readonly Desktop _desktop = Agent.Desktop;

      
      public void Initialize()
      {
            BaseState baseState = new BaseState();
            baseState.Execute();
      }

      
      public void TestMethod1()
      {
            Window 计算器 = _desktop.Window("@caption='计算器'");
            计算器.SetActive();
            计算器.PushButton("@caption='4'").Select();
            计算器.PushButton("@caption='+'").Select();
            计算器.PushButton("@caption='3'").Select();
            计算器.PushButton("@caption='='").Select();
            计算器.PushButton("").Select();
            计算器.PushButton("@caption='3'").Select();
            计算器.PushButton("@caption='='").Select();
            //计算器.TextField().SetText("21. ");
            //Assert.AreEqual("21. ", 计算器.TextField().Text);

            //定义一个正则表达式的模板
            String regexs = @"^\d$";
            //获取所有的计算器的list对象
            List<TestObject> lc = 计算器.GetChildren();
            //定义一个TestObject对象
            TestObject tobj;
            //获取计算器的list的总数
            int lcc = lc.Count;
            Console.WriteLine(lcc);
            //以list总数去遍历整个list对象
            for (int i = 0; i < lcc; i++)
            {
                //获取lc的i个对象
                tobj = lc;
                String tobjs;
                String tobjt;
                //获取tobj对象的类型,如“SilkTest.Ntf.PushButton”
                tobjt = tobj.GetType().ToString();
                //获取tobj对象的属性值,如“caption”
                tobjs = tobj.GetProperty("caption").ToString();
                Console.WriteLine(tobjt);
                Console.WriteLine(tobjs);
                //判断对象类型等于"SilkTest.Ntf.PushButton"
                if (tobjt == "SilkTest.Ntf.PushButton")
                {
                  //通过正则表达式来判断是否为数字,如果为数字则按下按钮
                  if (Regex.IsMatch(tobjs,regexs))
                  {
                        //点击对象类型为"SilkTest.Ntf.PushButton",对象属性为tobjs的对象
                        计算器.PushButton("@caption='" + tobjs + "'").Select();
                  }
                  
                }
                //判断对象类型等于"SilkTest.Ntf.TextField"
                else if(tobjt == "SilkTest.Ntf.TextField")
                {
                  //获取该对象的text属性值
                  string TF = 计算器.TextField("@caption='" + tobjs + "'").Text;
                  Console.WriteLine("TF shi:" + TF);
                }
               
                //Console.WriteLine("windowid:" + tobjs.ToString());
            }
      }
    }
}
页: [1]
查看完整版本: SilkTest在Silk4NET中如何完成CS程序所有对象的遍历