我们也可以用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的更多相关文章

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

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

  2. Selenium 学习笔记(一)

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

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

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

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

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

  5. ElasticSearch学习笔记-02集群相关操作_cat参数

    _cat参数允许你查看集群的一些相关信息,如集群是否健康,有哪些节点,以及索引的情况等的. 检测集群是否健康 curl localhost:9200/_cat/health?v 说明: curl 是一 ...

  6. CentOS学习笔记--基本命令--目录的相关操作

    Linux基本命令--目录的相关操作 常见的处理目录的命令吧: cd:变换目录 pwd:显示目前的目录 mkdir:创建一个新的目录 rmdir:删除一个空的目录 cd (变换目录) cd是Chang ...

  7. R语言学习笔记之外部文件读取

    在win32位的系统下,RODBC包内的函数是可以直接运行的,但在win64位的系统则不支持! 1.读取外部文件read.table()---csv,txt,excel 最基本函数是read.tabl ...

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

    1.百度搜索目标--实例 boolean flag; //点击次数 int shcs=3; int i=0; //窗口焦点控制 String detailWindowHandle = null; // ...

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

    1.查看网页的cookie信息 //查看cookie 登录后的cookie Set<Cookie> setcoke= driver.manage().getCookies(); for(C ...

随机推荐

  1. 渗透测试工具BurpSuite做网站的安全测试(基础版)

    渗透测试工具BurpSuite做网站的安全测试(基础版) 版权声明:本文为博主原创文章,未经博主允许不得转载. 学习网址: https://t0data.gitbooks.io/burpsuite/c ...

  2. CloudStack中云主机的UTC时间转为本地时间

    CloudStack项目中使用的时间是UTC时间,具体什么是UTC时间大家可以百度,但是我们需要的时间是正常的时间,所以在国泰君安开发测试云中,同步资源管理中虚拟机的同步管理,需要对虚拟机的时间格式化 ...

  3. (转)为什么用ls和du显示出来的文件大小有差别?

    曾经有几次,我用ls和du查看一个文件的大小,发现二者显示出来的大小并不一致,例如: bl@d3:~/test/sparse_file$ ls -l fs.img-rw-r--r-- 1 bl bl ...

  4. 关于Git和Github你不知道的十件事

    Git 和 GitHub都是非常强大的工具.即使你已经使用他们很长时间,你也很有可能不知道每个细节.我整理了Git和GitHub可能提高日常效率的10个常用技巧. GitHub 快捷键: t 和 w ...

  5. js日历表

    $scope.getCurrentWeek = function (day) { var days = ["星期日", "星期一", "星期二&quo ...

  6. 导出Excel之Epplus使用教程1(基本介绍)

    1.前言 目前Epplus的介绍中文资料很少,我也一直在摸索中使用它,以下是我在使用过程中得到的经验,写出来供大家参考.本系列共4章: 导出Excel之Epplus使用教程1(基本介绍) 导出Exce ...

  7. [ACM训练] DEV C++如何处理不能调试

    复试上机一定要用DEV C++,使用不熟练,出现一些问题,记录如下: 1.DEV C++ 不能调试 (1)tools->compiler option->settings:linker里设 ...

  8. 剑指offer?

    1. 在一个m*n二维数组中,每一行都按照从左到右的递增顺排序,每一列都按照从上到下的顺序排序,请完成一个函数,输入这样一个二维数组和一个整数,判断数组中是否含有该整数.1 2 8 92 4 9 12 ...

  9. Python之路,day2-Python基础1

    python2 range(20) for i in range(10): print(i) range(1,10)  ----->从1开始到9 else: #如果for循环正常结束,  就执行 ...

  10. js正则匹配只能输入有效数字可加小数点

    var reg = /^\d+\.?\d*$/; if(value.search(/^\d+\.?\d*$/)===0 && parseFloat(value)>0){//只能输 ...