• Java解析XML


    对于POM的Webdriver架构进行测试,页面元素的获取占去了绝大部分的代码量,如果将元素值放在代码中,是不易维护的,对于将来想转移到平台上面进行测试也是比较困难的,页面稍作改动都需要我们进行大量的排错,所以将元素和代码分离是很有必要的,我前面也说了几种数据分离的方式,CSV、Excel等等,如果用CSV来存取元素,会觉得眼前一片黑有点无从下手的感觉,如果用Excel来存取元素又有点大材小用的感觉,资源浪费太大了,想来想去还是XML比较合适,说到这自己都感觉有点牵强了,不就是要写个Java来解析XML吗?有必要说这个不好那个不好吗?有这个必要吗?哈哈,好吧,闲话也不多说了,代码走起。。。

    PS:

    有许多比较好用的解析XML文件的开源宝,比如JDOM、Dom4j 还有java源生的,这里用到了JDOM来进行XML文件的解析。

    需要的Jar包:

    jdom-2.0.5.jar

    package com.util.datadriver;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    import org.jdom2.Attribute;
    import org.jdom2.Document;
    import org.jdom2.Element;
    import org.jdom2.input.SAXBuilder;
    import org.jdom2.output.Format;
    import org.jdom2.output.XMLOutputter;
    
    /**
     * 利用JDOM对XML进行创建析 Jar包: jdom-2.0.5.jar
     */
    public class XMLController {
    
        //创建一个XML文件,传入一个根元素名称,以及一个List来保存子元素
        public static void createXMLDom(String filePath, String fileName,
                String rootElement, List<Element> childElements) throws Exception {
    
            Element root = new Element(rootElement);
            Document document = new Document(root);
            
            //根据传进来子元素的数量来增加对应的子元素,具体参考main函数中的测试
            for (int i = 0; i < childElements.size(); i++) {
    
                root.addContent(childElements.get(i));
            }
    
            //定义XML个格式,以及写出XML文件
            XMLOutputter out = new XMLOutputter(Format.getPrettyFormat());
            out.output(document, new FileOutputStream(new File(filePath + "/"
                    + fileName)));
    
        }
    
        //获得根元素节点元素
        public static Element getRootElement(String file) throws Exception {
    
            SAXBuilder sb = new SAXBuilder();
            Document document = sb.build(new FileInputStream(file));
            Element rootElement = document.getRootElement();
    
            // String rootName = rootElement.getName();
    
            return rootElement;
        }
    
        // 代码稍微需要优化下,现在只能获取二级节点下面的元素值,
        // 主要是为执行自动化测试脚本获取页面元素,所以只获取到根元素下面节点的value
        public static List<String> getChildValue(String file, String elementName)
                throws Exception {
    
            Element rootElement = getRootElement(file);
            //获得根元素下面的子元素节点
            Element element = rootElement.getChild(elementName);
            
            //获取子元素节点下所有孩子节点元素
            List<Element> childLists = element.getChildren();
            //定义一个list来存放子元素节点的Value
            List<String> childValList = new ArrayList<String>();
            for (int i = 0; i < childLists.size(); i++) {
    
                String value = childLists.get(i).getText();
                childValList.add(value);
    
            }
    
            return childValList;
    
        }
    
        public static void main(String[] args) throws Exception {
    
            List<Element> list = new ArrayList<Element>();
            
            //定义两个子元素
            Element e1 = new Element("student1")
                    .setAttribute(new Attribute("color", "red")).setText("测试1")
                    .addContent(new Element("姓名").setText("张三"))
                    .addContent(new Element("成绩").setText("A"));
            
            Element e2 = new Element("student2")
                    .setAttribute(new Attribute("color", "blue")).setText("测试2")
                    .addContent(new Element("姓名").setText("李四"))
                    .addContent(new Element("成绩").setText("AAA+"));
            
            list.add(e1);
            list.add(e2);
            createXMLDom("date", "xmlData.xml", "Student", list);
    
            List<String> list2 = getChildValue("date/xmlData.xml", "student1");
            Iterator<String> ite = list2.iterator();
            while (ite.hasNext()) {
    
                System.out.println(ite.next());
    
            }
        }
    }
  • 相关阅读:
    [原创]网页级在线性能测试网站介绍
    [原创]浅谈测试团队文化
    [原创]浅谈自动化测试中的金字塔模型理解
    [原创]如何在面试时选择合适的测试人员?
    [原创]浅谈怎么写周报
    [原创]Windows下调试工具介绍
    [原创]浅谈我对持续集成的理解
    [原创]IBM AppScan工具培训
    [原创]Jenkins持续集成工具介绍
    [原创]什么是信息安全资产管理?
  • 原文地址:https://www.cnblogs.com/taoSir/p/5106417.html
Copyright © 2020-2023  润新知