appium 笔记三:页面对象数据存储

package com.datas.api;

/**
 * 遍历xml数据,并存放在arraylist 中
 */

import com.appium.api.Log;
import com.datas.api.Locator.ByType;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.util.HashMap;
import java.util.Iterator;

public class LocaterPaser {
    private Document doc;
    private String resourceName;

    public LocaterPaser(){
        File in=getInputFileAsStream();//得到文档
        SAXReader reader=new SAXReader(); //创建解析器
        try{
            doc = (Document) reader.read(in); //解析文档
            Log.info("解析xml文件成功...");
        }catch(DocumentException e){
            Log.error("解析xml文件出错...");
            e.printStackTrace();
        }
    }
    private   File getInputFileAsStream() {
        // TODO Auto-generated method stub
        String packageName = "";
        String xmlPath=System.getProperty("user.dir") + "\\src\\main\\conf\\LocaterPaser.xml";
        Log.info("页面对象路径在:"+xmlPath);
        File file = new File(xmlPath);
        if (!file.exists()) {
            Log.error("Can't find " + xmlPath);
        }
        Log.info("Searching for default input file: "+xmlPath);
        return file;
    }

    /**
     * 把page的页面元素信息存在HashMap
     * HashMap<String, Locator>,String的值为key(这里取button名字),Locator对象存放这个key的value和type
     * 参数: pageName  需要存贮的页面名称 ,
     * 找到返回 HashMap类型
     **/
    public HashMap<String, Locator> getLocator(String pageName){
        HashMap<String, Locator> locatorMap = new HashMap<String, Locator>();
        locatorMap.clear();
        Locator loca = null;
        Element datasets=(Element) this.doc.getRootElement();        //获取根节点元素对象
        //第一次迭代,获取所有page页面
        Log.info("开始迭代对象库的元素列表....");
        for(Iterator d=datasets.elementIterator("page"); d.hasNext();){
            Element page = (Element) d.next();
            if(page.attributeValue("pageName").equals(pageName)){             //找到自己需要的page
                Log.info("你要找的pageName is: "+ page.attributeValue("pageName"));
                //第二次迭代locator,即具体页面的元素列表
                for(Iterator<?> data = page.elementIterator("locator"); data.hasNext();){
                    String type = null;
                    String value = null;
                    String locatorName = null;
                    Element locator = (Element) data.next();
                    //利用locator的name属性值找到想要的locator
                  //  Log.info("开始在对象库迭代控件值列表....");
                    value=locator.attributeValue("value");
                    type = locator.attributeValue("type");
                    locatorName = locator.attributeValue("name"); //这个是locator的描述名字
                 //   Log.info("控件的描述是:" + locatorName);
                    loca = new Locator(value,getByType(type));
                    locatorMap.put(locatorName, loca);

                }
                Log.info("迭代对象库完成...");
                return locatorMap;
            }
        }

        return locatorMap;
    }


    private static ByType getByType(String type) {
        ByType byType = ByType.xpath;
        if (type == null || type.equalsIgnoreCase("xpath")) {
            byType = ByType.xpath;
        } else if (type.equalsIgnoreCase("id")) {
            byType = ByType.id;
        } else if (type.equalsIgnoreCase("name")) {
            byType = ByType.name;
        } else if (type.equalsIgnoreCase("className")) {
            byType = ByType.className;
        }
        return byType;
    }
}

Appium概述    appium 是一个自动化测试开源工具,支持 iOS, Android, Windows, Firefox OS平台上的原生应用, 纯web应用和混合应用。“移动原生应用”是指那些用iOS或者 Android SDK 写的应用(Application简称app)。“移动web应用”是指使用移动浏览器访问的应用(appium支持iOS上的Safari和Android上的 Chrome)。“混合应用”是指原生代码封装网页视图——原生代码和 web 内容交互。比如,像 Phonegap,可以帮助研发者使用网页技术开发应用,然    后用原生代码封装,这些就是混合应用。     更重要的是,appium是一个跨平台的工具:它允许测试人员在不同的平台(iOS,Android)使用同一套API来写自动化测试脚本,这样大大增加了iOS 和Android测试套件间代码的复用性。学习Tips    本系列课程所涵盖的内容,包括所有Appium APIs相关的讲解都是基于java语言,当然不需要测试学习者精通java语言,只需要稍微有些java基础就能轻松学习,比如,基本数据类型,循环控制结构,分支控制结构,java面向对象的概念等;    本系列课程的脚本案例编写是基于TestNG测试框架,测试项目使用Maven构建,课程内容中会对这些相关的基础知识点做简单介绍,没有基础的同学无需担心,为了尽可能得降低课程的学习难度,其他相关的工具用法只做简单介绍(够用为主)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值