zoukankan      html  css  js  c++  java
  • HtmlAutoTestFrameWork

    前段时间做的自动化测试的是Silverlight的,框架都已经搭好。突然测试发现这里还有一个要发送邮件的html页面,并且将另外启动浏览器,于是今天下午把这个html的也写出来。

    用法 :

    HtmlAutoTestFrameWork htf = new HtmlAutoTestFrameWork();
    htf.BrowserDefaultIE();

     HtmlTextArea heTo2 = htf.ByPropert<HtmlTextArea>("Id:input-to;TagName:TEXTAREA;Class:text");

    heTo2.Text = "admin@cnblogs.com";

    HtmlButton hbSend = htf.ByPropert<HtmlButton>("Id:btnSend;TagName:INPUT;ControlType:Button");
    Mouse.Click(hbSend);

    下面是html的一个弹出层,用的jsalert.js .获取弹出层元素

    HtmlDiv htmlDiv = htf.ByPropert<HtmlDiv>("Id:popup_container;Class:ui-draggable");

    这是弹出层得一个按钮

    HtmlInputButton hbok = htf.ByPropert<HtmlInputButton>("Id:popup_ok;Type:button");
    Mouse.Click(hbok);

    下面是源码供参考

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.VisualStudio.TestTools.UITesting;
    using System.Threading;
    using Microsoft.VisualStudio.TestTools.UITesting.HtmlControls;
    using System.Diagnostics;
    using System.Reflection;
    
    namespace autoUI
    {
       public class HtmlAutoTestFrameWork
        {
           private string m_uri = string.Empty;
           private BrowserWindow browser;
           public HtmlDocument htmlDoc;
           public string Title = string.Empty;
           public string AbsolutePath = string.Empty;
           public string ClassName = string.Empty;
           public string FrameDocument = string.Empty;
    
           #region HtmlDocument
           public void BrowserLaunch()
           {
              
           }
           public void BrowserLaunch(String Url)
           {
               m_uri = Url;
               browser = BrowserWindow.Launch(Url);
               BuildParams();
           }
    
           private void BuildParams()
           {
               browser.SearchProperties[UITestControl.PropertyNames.ClassName] = "IEFrame";
               htmlDoc = new Microsoft.VisualStudio.TestTools.UITesting.HtmlControls.HtmlDocument(browser);
               if (!string.IsNullOrWhiteSpace(m_uri))
                   htmlDoc.SearchProperties[Microsoft.VisualStudio.TestTools.UITesting.HtmlControls.HtmlDocument.PropertyNames.PageUrl] = m_uri;
               if (!string.IsNullOrWhiteSpace(Title))
                   htmlDoc.SearchProperties[Microsoft.VisualStudio.TestTools.UITesting.HtmlControls.HtmlDocument.PropertyNames.Title] = Title;
               if (!string.IsNullOrWhiteSpace(AbsolutePath))
                   htmlDoc.SearchProperties[Microsoft.VisualStudio.TestTools.UITesting.HtmlControls.HtmlDocument.PropertyNames.AbsolutePath] = AbsolutePath;
               if (!string.IsNullOrWhiteSpace(ClassName))
                   htmlDoc.SearchProperties[Microsoft.VisualStudio.TestTools.UITesting.HtmlControls.HtmlDocument.PropertyNames.ClassName] = ClassName;
               if (!string.IsNullOrWhiteSpace(FrameDocument))
                   htmlDoc.SearchProperties[Microsoft.VisualStudio.TestTools.UITesting.HtmlControls.HtmlDocument.PropertyNames.FrameDocument] = FrameDocument;
              
           }
    
           public void BrowserDefaultIE()
           {
               browser = BrowserWindow.FromProcess(GetProcess("iexplore"));
               BuildParams();
           }
    
           public void BrowserFromProcess(Process p)
           {
               browser = BrowserWindow.FromProcess(p);
               BuildParams();
           }
          
           public Process GetProcess(string browerType)
           {
               Process p = Process.GetCurrentProcess();
               List<Process> list = new List<Process>();
               foreach (var item in Process.GetProcesses())
               {
                   if (item.ProcessName.Equals(browerType,StringComparison.CurrentCultureIgnoreCase))
                   {
                       list.Add(item);
                   }
               }
    
               list.Sort(
                   (a, b) =>
                   {
                       return a.TotalProcessorTime.CompareTo(b.TotalProcessorTime);
                   });//浏览器启动时间排序
    
              return list[0];//返回浏览器启动用时最少的
           }
    
           #endregion
    
           #region Find
           private T GetControl<T>(HtmlControl hc) where T : HtmlControl
           {
               T to = null;
               try
               {
                   Type t = typeof(T);
                   var types = new Type[1];
                   types[0] = typeof(HtmlControl);
                   ConstructorInfo ci = t.GetConstructor(types);
                   var obj = new object[1];
                   obj[0] = hc;
                   to = (T)ci.Invoke(obj);
               }
               catch
               {
                   to = default(T);
               }
               return to;
           }
    
           public T ByID<T>(string id) where T : HtmlControl
           {
               return ByID<T>(htmlDoc, id);
           }
           public T ByID<T>(HtmlControl hc, string id) where T : HtmlControl
           {
               return GetHtmlControlByProperty<T>(hc, "Id:"+id);
           }
           /// <summary>
           ///Get Control By Propert. eg HtmlDiv hd=f.ByPropert<HtmlDiv>("Id:IdValue;Name:NamaValue")
           /// </summary>
           /// <typeparam name="T">ControlType</typeparam>
           /// <param name="attributeValue">Id:IdValue;Name:NamaValue</param>
           /// <returns>T</returns>
           public T ByPropert<T>(string propertyValue) where T : HtmlControl
           {
               return ByPropert<T>(htmlDoc, propertyValue);
           }
    
           public T ByPropert<T>(HtmlControl hc, string propertyValue) where T : HtmlControl
           {
               return GetHtmlControlByProperty<T>(hc, propertyValue);
           }
    
           public T GetHtmlControlByProperty<T>(HtmlControl hc, string propertyValue) where T: HtmlControl
           {
               T t = GetControl<T>(hc);
               try
               {
                   if (!string.IsNullOrWhiteSpace(propertyValue))
                   {
                       string[] arr1 = propertyValue.Split(';');
                       for (int i = 0; i < arr1.Length; i++)
                       {
                             string[] arr2 = arr1[i].Split(':');
                             t.SearchProperties[arr2[0]] = arr2[1];
                       }
                   }
                 
               }
               catch { 
               
               }
               return t;
           }
           #endregion
    
           public void Close()
           {
               browser.Close();
               Thread.Sleep(5000);
           }
        }
    }

      

  • 相关阅读:
    统一身份认证部署ca 问题
    用组件beanutils,dbutils简化JDBC操作
    java 几种远程服务调用协议的比较
    让Tomcat支持路径、中文文件名(浏览器的get方式) .
    Spring 2.5中JdbcTemplate类query方法的三种回调接口
    tomcat 支持文件下载
    Eclipse 插件开发遇到问题心得总结
    eclipse user library的创建
    SCSI>SAS磁盘与FC磁盘的比较说明
    关于properties文件的字符编码
  • 原文地址:https://www.cnblogs.com/jiebian/p/2796406.html
Copyright © 2011-2022 走看看