我们也可以用xml来定义一个信息更为丰富的UIMap.xml文件,比如,额外还添加控件所属的页,控件的类型,然后解析构建一个XMLParser类来读取相应的值。

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <UIMap>
  3. <Object ID="User Name">
  4. <Attributes Locator="userName" Page="Main Page" Type="Button"/>
  5. </Object>
  6.  
  7. <Object ID="Password">
  8. <Attributes Locator="Password" Page="Main Page" Type="Button"/>
  9. </Object>
  10. </UIMap>

相应的解析xml的代码:

  1. public static String getLocator(String locatorID){
  2. InputStream ins=Thread.currentThread().getContextClassLoader()
  3. .getResourceAsStream(FileConstants.XMLFILE_NAME);
  4. if(ins==null){
  5. System.out.println("Missing UIMap.xml file.");
  6. return null;
  7. }
  8.  
  9. DocumentBuilderFactory fac=DocumentBuilderFactory.newInstance();
  10. DocumentBuilder builder=null;
  11. try {
  12. builder = fac.newDocumentBuilder();
  13. } catch (ParserConfigurationException pce) {
  14. System.out.println("Failing to new DocumentBuilder for runtime exception.");
  15. throw new RuntimeException(pce);
  16. }
  17.  
  18. Document xmlDoc=null;
  19. try {
  20. xmlDoc = builder.parse(ins);
  21. } catch (SAXException se) {
  22. System.out.println("Failing to parse xml file for runtime exception.");
  23. throw new RuntimeException(se);
  24. } catch (IOException ie) {
  25. System.out.println("Failing to parse xml file for runtime exception.");
  26. throw new RuntimeException(ie);
  27. }
  28.  
  29. XPathFactory pathFac=XPathFactory.newInstance();
  30. XPath xpath = pathFac.newXPath();
  31.  
  32. XPathExpression exp=null;
  33. try {
  34. exp = xpath.compile("UIMap/Object[@ID='"+locatorID+"']/Attributes");
  35. } catch (XPathExpressionException e) {
  36. System.out.println("Failing to get locator for :"+locatorID);
  37. }
  38. Node node=null;
  39. try {
  40. node = (Node)exp.evaluate(xmlDoc, XPathConstants.NODE);
  41. } catch (XPathExpressionException e) {
  42.  
  43. e.printStackTrace();
  44. }finally{
  45. try{
  46. if(ins!=null){
  47. ins.close();
  48. }
  49. }catch(Exception ex){
  50. System.out.println("Failing to load UIMap.xml for runtime exception.");
  51. throw new RuntimeException(ex);
  52. }
  53. }
  54.  
  55. return node.getAttributes().getNamedItem("Locator").getNodeValue();
  56. }

测试代码:

  1. selenium.type(UIMapParser.getLocator("UserName"), "seleniumtest");
  2. selenium.type(UIMapParser.getLocator("Password"), "seleniumtest");

Selenium学习笔记之外部化相关测试数据---xml的更多相关文章

  1. java学习笔记12--国际化

    java学习笔记12--国际化 国际化的操作就是指一个程序可以同时适应多门语言,即:如果现在程序者是中国人,则会以中文为显示文字,如果现在程序的使用者是英国人,则会以英语为显示的文字,也就是说可以通过 ...

  2. CNN学习笔记:池化层

    CNN学习笔记:池化层 池化 池化(Pooling)是卷积神经网络中另一个重要的概念,它实际上是一种形式的降采样.有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见 ...

  3. amazeui学习笔记--css(布局相关1)--网格Grid

    amazeui学习笔记--css(布局相关1)--网格Grid 一.总结 基本使用 1.div+class布局:amaze里面采取的就是div+class的布局方式  <div class=&q ...

  4. amazeui学习笔记--css(布局相关3)--辅助类Utility

    amazeui学习笔记--css(布局相关3)--辅助类Utility 一.总结 1.元素清除浮动: 添加 am-cf 这个 class 即可 2.水平滚动: .am-scrollable-horiz ...

  5. amazeui学习笔记--css(布局相关2)--等分网格 AVG Grid

    amazeui学习笔记--css(布局相关2)--等分网格 AVG Grid 一.总结 1.与grid区别:网格中:am-g + am-u-xx-n 等分网格中只有一个: am-avg-sm-4(在u ...

  6. stm32寄存器版学习笔记03 外部中断

    stm32的每个I/O口都可以作为中断输入,要把I/O口设置为外部中断输入,必须将I/O口设置为上拉/下拉输入 或 浮空输入(但浮空的时候外部一定要带上拉或下拉电阻,否则可能导致 中断不停的触发),干 ...

  7. Selenium 学习笔记(一)

    selenium 学习整理 初学者,如果有不当得地方请指出,非常感谢. 准备事项: 1. Python 安装包 安装Python,并勾选添加环境变量. 安装完成后,打开dos窗口,输入python,看 ...

  8. STM32学习笔记(九) 外部中断,待机模式和事件唤醒

    学会知识只需要不段的积累和提高,但是如何将知识系统的讲解出来就需要深入的认知和系统的了解.外部中断和事件学习难度并不高,不过涉及到STM32的电源控制部分,还是值得认真了解的,在本文中我将以实际代码为 ...

  9. selenium 学习笔记 ---新手学习记录(1) 问题总结

    说明:每次学习各种语言时,环境搭建访问国外网址最头疼了,现在只要是工具下载好放到自己网盘,可以随时用. 1.首先工具准备,selenium需要用到的 下载地址 访问密码 ff8f 2.我选择的语言时j ...

随机推荐

  1. 每天一个linux命令(41):ps命令

    Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...

  2. run命令

    1.打开IIS %SystemRoot%\system32\inetsrv\iis.msc 2.打开EventView eventvwr 3.打开程序和功能 appwiz.cpl 4.打开intern ...

  3. 深入理解CSS中的长度单位

    前面的话 本文分为绝对长度单位和相对长度单位来介绍CSS中的长度单位的主要知识 绝对长度单位 绝对长度单位代表一个物理测量 像素px(pixels) 在web上,像素px是典型的度量单位,很多其他长度 ...

  4. Java多线程系列--“JUC集合”06之 ConcurrentSkipListSet

    概要 本章对Java.util.concurrent包中的ConcurrentSkipListSet类进行详细的介绍.内容包括:ConcurrentSkipListSet介绍ConcurrentSki ...

  5. 百度,淘宝,腾讯三大巨头HTML页面规范分解

    [兼容html5方案] 百度贴吧,百度图片的实现 <!--[if lt IE 9]> <script> (function(){ var tags = ['header','f ...

  6. 探秘重编译(Recompilations)(2/2)

    在上一篇文章里,我讨论了使用临时表如何引起SQL Server里的重编译.在文章最后我提到,今天这篇文章我会聚焦表变量(Table Variables)的更多信息,它可以避免重编译的昂贵开销.我们来详 ...

  7. 在SQL Server 2014里,如何用资源调控器压制你的存储?

    在今天的文章里,我想谈下SQL Server 2014里非常酷的提升:现在你终于可以根据需要的IOPS来压制查询!资源调控器(Resource Governor)自SQL Server 2008起引入 ...

  8. 开源服务专题之--------mysql的编译安装

    为什么选择MySQL 1:mysql性能卓越,服务稳定,很少出现异常宕机 2:mysql开源免费,无版权制约,自主性及使用成本低 3:产品耦合度,mysql支持多种操作系统,支持多开发语言,特别是ph ...

  9. MySql安装出现问题---无服务,修改密码

           之前在项目中一直使用的是SqlServer数据库,现在学习下MySql,下面是学习MySql的学习笔记. MySql简介       MySql是一种关联数据库管理系统(关系型),将数据 ...

  10. C++ - 虚基类、虚函数与纯虚函数

    虚基类       在说明其作用前先看一段代码 class A{public:    int iValue;}; class B:public A{public:    void bPrintf(){ ...