Selenium学习笔记之外部化相关测试数据---xml
我们也可以用xml来定义一个信息更为丰富的UIMap.xml文件,比如,额外还添加控件所属的页,控件的类型,然后解析构建一个XMLParser类来读取相应的值。
- <?xml version="1.0" encoding="utf-8" ?>
- <UIMap>
- <Object ID="User Name">
- <Attributes Locator="userName" Page="Main Page" Type="Button"/>
- </Object>
- <Object ID="Password">
- <Attributes Locator="Password" Page="Main Page" Type="Button"/>
- </Object>
- </UIMap>
相应的解析xml的代码:
- public static String getLocator(String locatorID){
- InputStream ins=Thread.currentThread().getContextClassLoader()
- .getResourceAsStream(FileConstants.XMLFILE_NAME);
- if(ins==null){
- System.out.println("Missing UIMap.xml file.");
- return null;
- }
- DocumentBuilderFactory fac=DocumentBuilderFactory.newInstance();
- DocumentBuilder builder=null;
- try {
- builder = fac.newDocumentBuilder();
- } catch (ParserConfigurationException pce) {
- System.out.println("Failing to new DocumentBuilder for runtime exception.");
- throw new RuntimeException(pce);
- }
- Document xmlDoc=null;
- try {
- xmlDoc = builder.parse(ins);
- } catch (SAXException se) {
- System.out.println("Failing to parse xml file for runtime exception.");
- throw new RuntimeException(se);
- } catch (IOException ie) {
- System.out.println("Failing to parse xml file for runtime exception.");
- throw new RuntimeException(ie);
- }
- XPathFactory pathFac=XPathFactory.newInstance();
- XPath xpath = pathFac.newXPath();
- XPathExpression exp=null;
- try {
- exp = xpath.compile("UIMap/Object[@ID='"+locatorID+"']/Attributes");
- } catch (XPathExpressionException e) {
- System.out.println("Failing to get locator for :"+locatorID);
- }
- Node node=null;
- try {
- node = (Node)exp.evaluate(xmlDoc, XPathConstants.NODE);
- } catch (XPathExpressionException e) {
- e.printStackTrace();
- }finally{
- try{
- if(ins!=null){
- ins.close();
- }
- }catch(Exception ex){
- System.out.println("Failing to load UIMap.xml for runtime exception.");
- throw new RuntimeException(ex);
- }
- }
- return node.getAttributes().getNamedItem("Locator").getNodeValue();
- }
测试代码:
- selenium.type(UIMapParser.getLocator("UserName"), "seleniumtest");
- selenium.type(UIMapParser.getLocator("Password"), "seleniumtest");
Selenium学习笔记之外部化相关测试数据---xml的更多相关文章
- java学习笔记12--国际化
java学习笔记12--国际化 国际化的操作就是指一个程序可以同时适应多门语言,即:如果现在程序者是中国人,则会以中文为显示文字,如果现在程序的使用者是英国人,则会以英语为显示的文字,也就是说可以通过 ...
- CNN学习笔记:池化层
CNN学习笔记:池化层 池化 池化(Pooling)是卷积神经网络中另一个重要的概念,它实际上是一种形式的降采样.有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见 ...
- amazeui学习笔记--css(布局相关1)--网格Grid
amazeui学习笔记--css(布局相关1)--网格Grid 一.总结 基本使用 1.div+class布局:amaze里面采取的就是div+class的布局方式 <div class=&q ...
- amazeui学习笔记--css(布局相关3)--辅助类Utility
amazeui学习笔记--css(布局相关3)--辅助类Utility 一.总结 1.元素清除浮动: 添加 am-cf 这个 class 即可 2.水平滚动: .am-scrollable-horiz ...
- amazeui学习笔记--css(布局相关2)--等分网格 AVG Grid
amazeui学习笔记--css(布局相关2)--等分网格 AVG Grid 一.总结 1.与grid区别:网格中:am-g + am-u-xx-n 等分网格中只有一个: am-avg-sm-4(在u ...
- stm32寄存器版学习笔记03 外部中断
stm32的每个I/O口都可以作为中断输入,要把I/O口设置为外部中断输入,必须将I/O口设置为上拉/下拉输入 或 浮空输入(但浮空的时候外部一定要带上拉或下拉电阻,否则可能导致 中断不停的触发),干 ...
- Selenium 学习笔记(一)
selenium 学习整理 初学者,如果有不当得地方请指出,非常感谢. 准备事项: 1. Python 安装包 安装Python,并勾选添加环境变量. 安装完成后,打开dos窗口,输入python,看 ...
- STM32学习笔记(九) 外部中断,待机模式和事件唤醒
学会知识只需要不段的积累和提高,但是如何将知识系统的讲解出来就需要深入的认知和系统的了解.外部中断和事件学习难度并不高,不过涉及到STM32的电源控制部分,还是值得认真了解的,在本文中我将以实际代码为 ...
- selenium 学习笔记 ---新手学习记录(1) 问题总结
说明:每次学习各种语言时,环境搭建访问国外网址最头疼了,现在只要是工具下载好放到自己网盘,可以随时用. 1.首先工具准备,selenium需要用到的 下载地址 访问密码 ff8f 2.我选择的语言时j ...
随机推荐
- 每天一个linux命令(41):ps命令
Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...
- run命令
1.打开IIS %SystemRoot%\system32\inetsrv\iis.msc 2.打开EventView eventvwr 3.打开程序和功能 appwiz.cpl 4.打开intern ...
- 深入理解CSS中的长度单位
前面的话 本文分为绝对长度单位和相对长度单位来介绍CSS中的长度单位的主要知识 绝对长度单位 绝对长度单位代表一个物理测量 像素px(pixels) 在web上,像素px是典型的度量单位,很多其他长度 ...
- Java多线程系列--“JUC集合”06之 ConcurrentSkipListSet
概要 本章对Java.util.concurrent包中的ConcurrentSkipListSet类进行详细的介绍.内容包括:ConcurrentSkipListSet介绍ConcurrentSki ...
- 百度,淘宝,腾讯三大巨头HTML页面规范分解
[兼容html5方案] 百度贴吧,百度图片的实现 <!--[if lt IE 9]> <script> (function(){ var tags = ['header','f ...
- 探秘重编译(Recompilations)(2/2)
在上一篇文章里,我讨论了使用临时表如何引起SQL Server里的重编译.在文章最后我提到,今天这篇文章我会聚焦表变量(Table Variables)的更多信息,它可以避免重编译的昂贵开销.我们来详 ...
- 在SQL Server 2014里,如何用资源调控器压制你的存储?
在今天的文章里,我想谈下SQL Server 2014里非常酷的提升:现在你终于可以根据需要的IOPS来压制查询!资源调控器(Resource Governor)自SQL Server 2008起引入 ...
- 开源服务专题之--------mysql的编译安装
为什么选择MySQL 1:mysql性能卓越,服务稳定,很少出现异常宕机 2:mysql开源免费,无版权制约,自主性及使用成本低 3:产品耦合度,mysql支持多种操作系统,支持多开发语言,特别是ph ...
- MySql安装出现问题---无服务,修改密码
之前在项目中一直使用的是SqlServer数据库,现在学习下MySql,下面是学习MySql的学习笔记. MySql简介 MySql是一种关联数据库管理系统(关系型),将数据 ...
- C++ - 虚基类、虚函数与纯虚函数
虚基类 在说明其作用前先看一段代码 class A{public: int iValue;}; class B:public A{public: void bPrintf(){ ...