WatiN-Html元素及元素属性识别-扩展
注:些部分内容需要对WatiN代码结构有所了解。
上篇讲的WatiN原生的有一部分Html元素类,WatiN从2012年9月15日后就未见更新,随着Html新标签的出现就需要我们自己定义一些Html元素类来扩充。
1、 例子分析
以time标签为例,首先需要知道time标签在Html中起到的什么作用,在W3School中解释为:该元素能够以机器可读的方式对日期和时间进行编码。既然是表示时间,那么就我们写这个标签类的时候就需要获取和设置时间。
2、创建Html标签
a、创建实体类,实体类继承于ElementContainer<TElement>,并新增其两个属性。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using WatiN.Core.Native; 6 7 namespace WatiN.Core 8 { 9 [ElementTag("time")] 10 public class Time : ElementContainer<Time> 11 { 12 public Time(DomContainer domContainer, INativeElement nativeElement) : base(domContainer, nativeElement) { } 13 public Time(DomContainer domContainer, ElementFinder finder) : base(domContainer, finder) { } 14 15 /// <summary> 16 /// 获取或设置datetime属性 17 /// </summary> 18 public virtual string DateTime 19 { 20 get { return GetAttributeValue("datetime"); } 21 set { SetAttributeValue("datetime", value); } 22 } 23 /// <summary> 24 /// 获取或设置pubdate属性 25 /// </summary> 26 public virtual string PubDate 27 { 28 get { return GetAttributeValue("pubdate"); } 29 set { SetAttributeValue("pubdate", value); } 30 } 31 } 32 }
b、创建检索类
1 namespace WatiN.Core 2 { 3 4 public class TimeCollection : BaseElementCollection<Time, TimeCollection> 5 { 6 7 public TimeCollection(DomContainer domContainer, ElementFinder finder) : base(domContainer, finder) { } 8 9 protected override TimeCollection CreateFilteredCollection(ElementFinder elementFinder) 10 { 11 return new TimeCollection(DomContainer, elementFinder); 12 } 13 } 14 }
c、修改NativeElementCollectionAdapter.cs类,此类为元素检索适配器,在其IElementsContainer Members代码块中添加Time元素的操作
1 public Time Time(string elementId) 2 { 3 return Time(Find.ByDefault(elementId)); 4 } 5 6 public Time Time(Regex elementId) 7 { 8 return Time(Find.ByDefault(elementId)); 9 } 10 11 public Time Time(Constraint findBy) 12 { 13 return new Time(domContainer, CreateElementFinder<Time>(findBy)); 14 } 15 16 public Time Time(Predicate<Time> predicate) 17 { 18 return Time(Find.ByElement(predicate)); 19 } 20 21 public TimeCollection Times 22 { 23 get { return new TimeCollection(domContainer, CreateElementFinder<Time>(null)); } 24 }
d、修改Document.cs类,此类为页面容器基类,其中IE、Browser、Frame、DomContainer都继承于它,在其中添加Time元素后其页面容器类中即可直接使用。将Time元素操作放入IElementsContainer代码块中。
1 #region 新增元素 2 #region Time 3 public virtual Time Time(string elementId) 4 { 5 return AllElements.Time(elementId); 6 } 7 8 public virtual Time Time(Regex elementId) 9 { 10 return AllElements.Time(elementId); 11 } 12 13 public virtual Time Time(Constraint findBy) 14 { 15 return AllElements.Time(findBy); 16 } 17 18 public virtual Time Ul(Predicate<Time> predicate) 19 { 20 return AllElements.Time(predicate); 21 } 22 23 public virtual TimeCollection Times 24 { 25 get { return AllElements.Times; } 26 } 27 #endregion 28 #endregion
e、修改元素容器类ElementContainer.cs,修改此类是为了可以在Div、P、Span等元素中使用。将Time元素操作放入IElementsContainer代码块中。
1 #region Time 2 public Time Time(string elementId) 3 { 4 return AllElements.Time(elementId); 5 } 6 7 public Time Time(Regex elementId) 8 { 9 return AllElements.Time(elementId); 10 } 11 12 public Time Time(Constraint findBy) 13 { 14 return AllElements.Time(findBy); 15 } 16 17 public Time Time(Predicate<Time> predicate) 18 { 19 return AllElements.Time(predicate); 20 } 21 22 public TimeCollection Times 23 { 24 get { return AllElements.Times; } 25 } 26 #endregion
3、验证
Html
1 <html> 2 <head> 3 <meta charset="utf-8"> 4 <title>WatiN测试页面</title> 5 </head> 6 <body> 7 <div id="arborday"><time datetime="2017-03-12">植树节</time></div> 8 <time datetime="2017-04-01">愚人节</time> 9 </body> 10 </html>
C#代码
1 public static string Test() 2 { 3 IE ie = IE.InternetExplorers().FirstOrDefault(p => !string.IsNullOrEmpty(p.Title) && p.Title == "WatiN测试页面"); 4 StringBuilder msg = new System.Text.StringBuilder(); 5 msg.Append("页面中的Time元素\r"); 6 foreach (var item in ie.Times) 7 { 8 msg.Append(item.Text + ":" + item.DateTime + "\r"); 9 } 10 Div dv = ie.Div(Find.ById("arborday")); 11 msg.Append("\rdiv中的Time元素\r"); 12 13 foreach (var item in dv.Times) 14 { 15 msg.Append(item.Text + ":" + item.DateTime + "\r"); 16 } 17 return msg.ToString(); 18 }
结果:
转载于:https://www.cnblogs.com/xiaoqiangcode/p/6426984.html
WatiN-Html元素及元素属性识别-扩展相关推荐
- jQuery(一):概述、选择器、操作(元素本身、属性、内容、样式)、元素遍历、事件
目录 一.jQuery概述 1.1 什么是jQuery 1.2 jQuery的优势 1.3 jQuery版本支持 1.4 jQuery引入 1.5 jQuery核心用法 1.5.1 $介绍 1.5.2 ...
- html常用语义化元素和全局属性整理
WWW www其实是World Wide Web 的缩写,它是一个由许多互相链接的超文本组成的系统,通过互联网访问, 在汉语中,www 被翻译成(web 万维网 全球广域网). <HTML> ...
- html元素的overflow属性详解
最近更新时间:2018年6月20日11:39:55 <我的博客地图> 最近接手一个老项目,该项目是用EasyReport这个Web报表工具在web页面动态展示数据库数据,在开发调试过程中遇 ...
- 文章目录 图片元素 img元素 显示图片的两种写法: alt 属性 与a元素连用 map元素 和figure元素 figcaption 联用
文章目录 图片元素 img元素 显示图片的两种写法: alt 属性 与a元素连用 map元素 和figure元素 figcaption 联用 图片元素 img元素 image 缩写,空元素 src属性 ...
- HTMLDOM中三种元素节点、属性节点、文本节点的测试案例
HTML dom中常用的三种节点分别是元素节点.属性节点.文本节点. 具体指的内容可参考下图: 以下为测试用例: <!DOCTYPE html> <html><head& ...
- angular学习笔记(四)- input元素的ng-model属性
input元素的ng-model属性: 用于将input的值和变量的值进行双向绑定 <!DOCTYPE html> <html ng-app> <head>< ...
- 浮动元素的display属性
在页面布局的时候,我们经常会将元素设置成浮动效果来解决一些实际问题,无论当前元素是块级元素还是行内元素, 似乎都有需要设置成浮动的时候,但与此同时,我们有没有想过,在元素被设置成浮动之后,他们的blo ...
- 元素节点、属性节点、文本节点 的节点属性
1 .nodeName 元素节点 元素标记名/节点名称, 相当于tagName .属性节点 属性节点返回属性名, 文本节点 文本节点返回#text.node ...
- document 获得元素节点,属性节点,文本节点
document 获得元素节点,属性节点,文本节点. ※Element在w3c xml DOM中,HTML没有. (添加,修改,替换,删除,都在xml dom中) http://www.w3schoo ...
最新文章
- Google AI 系统 DeepMind无法通过 高中数学
- 智能+制造,聪明的公司都走上了智能制造的道路
- 老板用人5大原则,能力绝不是首选!大多数人的想法是错误的
- Java Object类中的finalize()方法
- 求二叉树最长路径长度和
- java抽象类异常_求教JAVA里面的错误继承抽象类我都已经看傻了。
- ASP注入漏洞基础教程(二)
- python数据预处理案例_对pandas进行数据预处理的实例讲解
- bigdecimal不等于0怎么写_写文章死憋写不出来,怎么破?
- python读取文件名包含某字符的文件_python 读写文件时判断文件名是否包含某字符串...
- 给ListView视图添加行号
- 2017年第六届数学中国数学建模国际赛(小美赛)比赛心得
- SHELLEXECUTEINFO 和 ShellExecuteEx的使用
- 最坑人的辨色大比拼微信小游戏源码
- java毕业实习日志_《Java课程实习》日志(周一)
- leetcode【链表—中等】707.设计链表
- html网页文本框无法输入,浏览器打开网页文本框无法输入文字如何解决
- 合成冷色黑暗恐怖魔法师图片的PS教程
- 社保证照片怎么做?一招教你get既专业又好看的证件照!
- 移动安全--22--Android应用安全防护技术
热门文章
- bat如何执行完上一条命令_一条更新语句是如何执行的?
- dis的前缀单词有哪些_英语单词II词根词缀记忆法:必背英语前缀DIS (DI, DIF)
- pymysql安装_centos7.6 安装openstack stein组件之四
- mapreduce分组统计_如何优雅的理解MapReduce
- 10进制小数转化为任意进制小数
- 用python生成多个txt文件
- torch.Tensor和torch.tensor有什么区别?
- win7系统下的打印机不能扫描
- 排序算法lowb三人组-插入排序
- JAVA - 守护线程(Daemon Thread)