完成json格式存储元素定位方式读取方法
This commit is contained in:
parent
70157cfc80
commit
96a7cfdbc2
|
@ -1023,7 +1023,7 @@ public class TestReport extends AbstractReport {
|
|||
// 定义Control对象,读取禅道元素定位信息配置文件
|
||||
Event event = Event.newInstance(d);
|
||||
event.setXmlFile(new File(xpath));
|
||||
ReadXml r = new ReadXml(new File(xpath));
|
||||
XmlLocation r = new XmlLocation(new File(xpath));
|
||||
// 操作浏览器
|
||||
event.getTextEvent().input("用户名", username);
|
||||
event.getTextEvent().input("密码", password);
|
||||
|
|
|
@ -11,7 +11,7 @@ import org.openqa.selenium.WebElement;
|
|||
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||
|
||||
import pres.auxiliary.work.selenium.brower.AbstractBrower;
|
||||
import pres.auxiliary.work.selenium.location.AbstractRead;
|
||||
import pres.auxiliary.work.selenium.location.AbstractLocation;
|
||||
import pres.auxiliary.work.selenium.location.ByType;
|
||||
|
||||
/**
|
||||
|
@ -39,7 +39,7 @@ public abstract class AbstractBy {
|
|||
/**
|
||||
* 存储元素的定位方式读取类对象,由于多个子类之间需要互通,故此处标记为static
|
||||
*/
|
||||
protected static AbstractRead read;
|
||||
protected static AbstractLocation read;
|
||||
|
||||
/**
|
||||
* 用于存储浏览器对象
|
||||
|
@ -111,7 +111,7 @@ public abstract class AbstractBy {
|
|||
* @param xmlFile 存储元素定位方式的xml文件对象
|
||||
* @param isBreakRootFrame 是否需要将窗体切回到顶层
|
||||
*/
|
||||
public void setReadMode(AbstractRead read, boolean isBreakRootFrame) {
|
||||
public void setReadMode(AbstractLocation read, boolean isBreakRootFrame) {
|
||||
AbstractBy.read = read;
|
||||
|
||||
if (isBreakRootFrame) {
|
||||
|
|
|
@ -4,7 +4,7 @@ import java.util.ArrayList;
|
|||
import java.util.Arrays;
|
||||
import java.util.Iterator;
|
||||
|
||||
import pres.auxiliary.work.selenium.location.AbstractRead;
|
||||
import pres.auxiliary.work.selenium.location.AbstractLocation;
|
||||
import pres.auxiliary.work.selenium.location.ByType;
|
||||
|
||||
/**
|
||||
|
@ -51,9 +51,9 @@ public class ElementData {
|
|||
/**
|
||||
* 根据元素名称,在配置文件中查找元素,将元素的信息进行存储
|
||||
* @param name 元素名称
|
||||
* @param AbstractRead 配置文件类对象
|
||||
* @param AbstractLocation 配置文件类对象
|
||||
*/
|
||||
public ElementData(String name, AbstractRead read) {
|
||||
public ElementData(String name, AbstractLocation read) {
|
||||
//存储元素名称
|
||||
this.name = name;
|
||||
|
||||
|
@ -90,7 +90,7 @@ public class ElementData {
|
|||
if (!linkWordList.isEmpty()) {
|
||||
for (int i = 0; i < valueList.size(); i++) {
|
||||
//判断字符串是否包含替换词语的开始标志,若不包含,则进行不进行替换操作
|
||||
if (!valueList.get(i).contains(AbstractRead.START_SIGN)) {
|
||||
if (!valueList.get(i).contains(AbstractLocation.START_SIGN)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -99,10 +99,10 @@ public class ElementData {
|
|||
//存储当前定位内容文本
|
||||
StringBuilder value = new StringBuilder(valueList.get(i));
|
||||
//循环,替换当前定位内容中所有需要替换的词语,直到无词语替换或定位内容不存在需要替换的词语为止
|
||||
while(linkWordIter.hasNext() && value.indexOf(AbstractRead.START_SIGN) > -1) {
|
||||
while(linkWordIter.hasNext() && value.indexOf(AbstractLocation.START_SIGN) > -1) {
|
||||
//存储替换符的开始和结束位置
|
||||
int replaceStartIndex = value.indexOf(AbstractRead.START_SIGN);
|
||||
int replaceEndIndex = value.indexOf(AbstractRead.END_SIGN);
|
||||
int replaceStartIndex = value.indexOf(AbstractLocation.START_SIGN);
|
||||
int replaceEndIndex = value.indexOf(AbstractLocation.END_SIGN);
|
||||
|
||||
//对当前位置的词语进行替换
|
||||
value.replace(replaceStartIndex, replaceEndIndex + 1, linkWordIter.next());
|
||||
|
|
|
@ -15,7 +15,7 @@ import pres.auxiliary.work.selenium.element.ElementType;
|
|||
* @version Ver1.0
|
||||
*
|
||||
*/
|
||||
public abstract class AbstractRead {
|
||||
public abstract class AbstractLocation {
|
||||
/**
|
||||
* 定义用于正则的替换符开始标记
|
||||
*/
|
||||
|
@ -71,8 +71,6 @@ public abstract class AbstractRead {
|
|||
protected ElementType toElementType(String value) {
|
||||
//转换元素类型枚举,并返回
|
||||
switch (value) {
|
||||
case "0":
|
||||
return ElementType.COMMON_ELEMENT;
|
||||
case "1":
|
||||
return ElementType.DATA_LIST_ELEMENT;
|
||||
case "2":
|
||||
|
@ -81,8 +79,52 @@ public abstract class AbstractRead {
|
|||
return ElementType.SELECT_OPTION_ELEMENT;
|
||||
case "4":
|
||||
return ElementType.IFRAME_ELEMENT;
|
||||
case "0":
|
||||
default:
|
||||
return null;
|
||||
return ElementType.COMMON_ELEMENT;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 该方法用于根据标签的名称,返回相应的定位方式枚举
|
||||
* @param labelName 标签名称
|
||||
* @return {@link ByType}枚举
|
||||
*/
|
||||
protected ByType toByType(String labelName) {
|
||||
switch (labelName) {
|
||||
case "xpath":
|
||||
return ByType.XPATH;
|
||||
case "css":
|
||||
return ByType.CSS;
|
||||
case "classname":
|
||||
return ByType.CLASSNAME;
|
||||
case "id":
|
||||
return ByType.ID;
|
||||
case "linktext":
|
||||
return ByType.LINKTEXT;
|
||||
case "name":
|
||||
return ByType.NAME;
|
||||
case "tagname":
|
||||
return ByType.TAGNAME;
|
||||
default:
|
||||
throw new IllegalArgumentException("不存在的定位方式: " + labelName);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于对等待时间进行转换
|
||||
* @param text 获取的文本
|
||||
* @return 转换后的等待时间
|
||||
*/
|
||||
protected long toWaitTime(String text) {
|
||||
//获取元素存储等待时间属性值,并转换为long类型
|
||||
try {
|
||||
//将属性值进行转换,若属性值不存在,则赋为-1
|
||||
long time = Long.valueOf(text == null ? "-1" : text);
|
||||
//若转换的时间小于0,则返回-1
|
||||
return time < 0 ? -1L : time;
|
||||
} catch (NumberFormatException e) {
|
||||
return -1L;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,284 @@
|
|||
package pres.auxiliary.work.selenium.location;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
|
||||
import pres.auxiliary.work.selenium.element.ElementType;
|
||||
import pres.auxiliary.work.selenium.location.UndefinedElementException.ExceptionElementType;
|
||||
|
||||
/**
|
||||
* <p><b>文件名:</b>JsonLocation.java</p>
|
||||
* <p><b>用途:</b>
|
||||
* 用于读取以json形式的读取到的元素定位信息
|
||||
* </p>
|
||||
* <p><b>编码时间:</b>2020年10月28日上午8:24:56</p>
|
||||
* <p><b>修改时间:</b>2020年10月28日上午8:24:56</p>
|
||||
* @author 彭宇琦
|
||||
* @version Ver1.0
|
||||
*
|
||||
*/
|
||||
public class JsonLocation extends AbstractLocation {
|
||||
/**
|
||||
* 指向json中的模板key值
|
||||
*/
|
||||
protected final String KEY_TEMPLETE = "templet";
|
||||
/**
|
||||
* 指向json中的元素key值
|
||||
*/
|
||||
protected final String KEY_ELEMENT = "element";
|
||||
/**
|
||||
* 指向json中的元素定位方式key值
|
||||
*/
|
||||
protected final String KEY_LOCATION = "location";
|
||||
/**
|
||||
* 指向json中的元素定位模板key值
|
||||
*/
|
||||
protected final String KEY_TEMP = "temp";
|
||||
/**
|
||||
* 指向json中的元素定位模板key值
|
||||
*/
|
||||
protected final String KEY_VALUE = "value";
|
||||
/**
|
||||
* 指向json中的元素定位类型key值
|
||||
*/
|
||||
protected final String KEY_TYPE = "type";
|
||||
/**
|
||||
* 指向json中的元素等待时间key值
|
||||
*/
|
||||
protected final String KEY_WAIT = "wait";
|
||||
protected final String KEY_IFRAME = "iframe";
|
||||
|
||||
/**
|
||||
* 存储转换后获得到的模板json对象
|
||||
*/
|
||||
JSONObject templateJson;
|
||||
/**
|
||||
* 存储转换后获得的元素json对象
|
||||
*/
|
||||
JSONObject elementJson;
|
||||
|
||||
/**
|
||||
* 通过写在文件中的json文本类对象对类进行构造
|
||||
* @param jsonTextFile 存储json的文件类对象
|
||||
*/
|
||||
public JsonLocation(File jsonTextFile) {
|
||||
//读取json文件中的内容
|
||||
StringBuilder jsonText = new StringBuilder();
|
||||
try(BufferedReader br = new BufferedReader(new FileReader(jsonTextFile))) {
|
||||
String text = "";
|
||||
while((text = br.readLine()) != null) {
|
||||
jsonText.append(text);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
throw new IncorrectFileException("json文件异常,文件位置:" + jsonTextFile.getAbsolutePath());
|
||||
}
|
||||
|
||||
//转换读取的json内容
|
||||
toJsonObject(jsonText.toString());
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过json文本对类进行构造
|
||||
* @param json json文本
|
||||
*/
|
||||
public JsonLocation(String jsonText) {
|
||||
toJsonObject(jsonText);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArrayList<ByType> findElementByTypeList(String name) {
|
||||
ArrayList<ByType> byTypeList = new ArrayList<ByType>();
|
||||
|
||||
//获取当前元素的定位数组
|
||||
JSONArray locationList = getElementJson(name).getJSONArray(KEY_LOCATION);
|
||||
//若获取到的数组不为空,则读取其中的内容
|
||||
if (locationList != null) {
|
||||
//遍历locationList组,读取元素的定位内容,存储相应的
|
||||
for (int i = 0; i < locationList.size(); i++) {
|
||||
//获取当前读取的json
|
||||
JSONObject locationJson = locationList.getJSONObject(i);
|
||||
//读取其中的"type"值的内容
|
||||
String typeText = locationJson.getString(KEY_TYPE);
|
||||
//若当前值不存在内容,则抛出异常
|
||||
if (typeText == null || typeText.isEmpty()) {
|
||||
throw new UndefinedElementException("元素“" + name + "”不存在" + KEY_TYPE + "值");
|
||||
}
|
||||
|
||||
//转换并存储定位方式
|
||||
byTypeList.add(toByType(typeText));
|
||||
}
|
||||
}
|
||||
|
||||
return byTypeList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArrayList<String> findValueList(String name) {
|
||||
ArrayList<String> valueList = new ArrayList<String>();
|
||||
|
||||
//获取当前元素的定位数组
|
||||
JSONArray locationList = getElementJson(name).getJSONArray(KEY_LOCATION);
|
||||
//若获取到的数组不为空,则读取其中的内容
|
||||
if (locationList != null) {
|
||||
//遍历locationList组,读取元素的定位内容,存储相应的
|
||||
for (int i = 0; i < locationList.size(); i++) {
|
||||
//获取当前读取的json
|
||||
JSONObject locationJson = locationList.getJSONObject(i);
|
||||
//读取其中的"type"值的内容
|
||||
String tempText = locationJson.getString(KEY_TEMP);
|
||||
//若当前值不存在内容,则抛出异常
|
||||
if (tempText == null || tempText.isEmpty()) {
|
||||
String valueText = locationJson.getString(KEY_VALUE);
|
||||
//若不存在模板key,则判断是否存在定位值key,若均不存在,则抛出异常
|
||||
if (valueText == null || valueText.isEmpty()) {
|
||||
throw new UndefinedElementException("元素“" + name + "”不存在定位方式键值对");
|
||||
}
|
||||
|
||||
//若存在value值,则读取相应的值,并进行存储
|
||||
valueList.add(valueText);
|
||||
} else {
|
||||
//若存在模板,则按照模板读取方式进行处理
|
||||
valueList.add(analysisTemplet(locationJson));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return valueList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于返回读取到的模板内容
|
||||
* @param locationJson 定位方式json
|
||||
* @return 经过转换的定位方式
|
||||
*/
|
||||
private String analysisTemplet(JSONObject locationJson) {
|
||||
//获取模板名称
|
||||
String tempText = locationJson.getString(KEY_TEMP);
|
||||
//判断名称是否存在,若不存在,则抛出异常
|
||||
if (!templateJson.containsKey(tempText)) {
|
||||
throw new UndefinedElementException(tempText, ExceptionElementType.TEMPLET);
|
||||
}
|
||||
|
||||
//读取模板内容
|
||||
String tempValueText = templateJson.getString(tempText);
|
||||
|
||||
//遍历所有键值对,将相应的内容进行存储
|
||||
for (String key : locationJson.keySet()) {
|
||||
String matchKey = MATCH_START_SIGN + key + MATCH_END_SIGN;
|
||||
tempValueText = tempValueText.replaceAll(matchKey, locationJson.getString(key));
|
||||
}
|
||||
|
||||
return tempValueText;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElementType findElementType(String name) {
|
||||
//获取元素json
|
||||
JSONObject elementJson = getElementJson(name);
|
||||
String elementTypeText = elementJson.getString(KEY_TYPE);
|
||||
//若elementTypeText为空,则赋为0
|
||||
return toElementType(elementTypeText == null ? "0" : elementTypeText);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArrayList<String> findIframeNameList(String name) {
|
||||
//存储当前窗体的名称集合
|
||||
ArrayList<String> iframeNameList = new ArrayList<>();
|
||||
//查找当前元素
|
||||
JSONObject elementJson = getElementJson(name);
|
||||
//存储当前元素的父窗体的名称
|
||||
String iframeName = "";
|
||||
|
||||
//循环,根据父层级向上遍历元素,直到元素无父层窗体为止
|
||||
while(!(iframeName = getNextIframe(elementJson)).isEmpty()) {
|
||||
elementJson = getElementJson(iframeName);
|
||||
iframeNameList.add(iframeName);
|
||||
}
|
||||
|
||||
//反序集合,使最高层窗体放在最前
|
||||
Collections.reverse(iframeNameList);
|
||||
return iframeNameList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long findWaitTime(String name) {
|
||||
return toWaitTime(getElementJson(name).getString(KEY_WAIT));
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回获取的模板json内容
|
||||
* @return 模板json
|
||||
*/
|
||||
public String getTempletJson() {
|
||||
return templateJson.toJSONString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回获取的元素json内容
|
||||
* @return 元素json
|
||||
*/
|
||||
public String getElementJson() {
|
||||
return elementJson.toJSONString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于将读取到的json进行转换,分离模板json与元素json
|
||||
* @param text json文本
|
||||
* @throws UndefinedElementException json中无元素信息时抛出的异常
|
||||
*/
|
||||
private void toJsonObject(String text) {
|
||||
//将文件解析成JSONObject类对象
|
||||
JSONObject json = JSONObject.parseObject(text);
|
||||
|
||||
//获取元素json,若不存在元素json,则抛出异常
|
||||
if (json.containsKey(KEY_ELEMENT)) {
|
||||
this.elementJson = json.getJSONObject(KEY_ELEMENT);
|
||||
//判断获取到的元素json是否为空,若为空,则抛出异常
|
||||
if (this.elementJson.isEmpty()) {
|
||||
throw new UndefinedElementException("Json的“" + KEY_ELEMENT + "”key值中不存在元素信息");
|
||||
}
|
||||
} else {
|
||||
throw new UndefinedElementException("Json中不存在“" + KEY_ELEMENT + "”key值");
|
||||
}
|
||||
|
||||
//获取模板json,若不存在模板json,则不进行处理
|
||||
if (json.containsKey(KEY_TEMPLETE)) {
|
||||
this.templateJson = json.getJSONObject(KEY_TEMPLETE);
|
||||
} else {
|
||||
this.templateJson = new JSONObject();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于获取元素json
|
||||
* @param name 元素名称
|
||||
* @return 获取到的元素json类对象
|
||||
*/
|
||||
private JSONObject getElementJson(String name) {
|
||||
//判断元素是否存在,若不存在,则抛出异常
|
||||
if (!elementJson.containsKey(name)) {
|
||||
throw new UndefinedElementException(name, ExceptionElementType.ELEMENT);
|
||||
}
|
||||
|
||||
//获取当前元素的定位数组
|
||||
return elementJson.getJSONObject(name);
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于返回当前元素是否存在父层窗体,若存在,则返回相应的窗体名称;反之则返回空串
|
||||
* @param elementJson 元素json
|
||||
* @return 元素对应的父层窗体名称
|
||||
*/
|
||||
private String getNextIframe(JSONObject elementJson) {
|
||||
//获取元素父窗体的名称
|
||||
String iframeName = elementJson.getString(KEY_IFRAME);
|
||||
return iframeName == null ? "" : iframeName;
|
||||
}
|
||||
}
|
|
@ -4,10 +4,10 @@ package pres.auxiliary.work.selenium.location;
|
|||
* <p><b>文件名:</b>UndefinedElementException.java</p>
|
||||
* <p><b>用途:</b>用于查找xml文件中元素不存在时抛出的异常</p>
|
||||
* <p><b>编码时间:</b>2019年10月25日上午8:30:20</p>
|
||||
* <p><b>修改时间:</b>2019年10月25日上午8:30:20</p>
|
||||
* <p><b>修改时间:</b>2020年10月28日上午11:31:51</p>
|
||||
* @author 彭宇琦
|
||||
* @version Ver1.0
|
||||
* @since JDK 12
|
||||
* @since JDK 8
|
||||
*
|
||||
*/
|
||||
public class UndefinedElementException extends RuntimeException {
|
||||
|
@ -32,7 +32,22 @@ public class UndefinedElementException extends RuntimeException {
|
|||
public UndefinedElementException(Throwable cause) {
|
||||
super(cause);
|
||||
}
|
||||
|
||||
public UndefinedElementException(String elemenetName, ExceptionElementType exceptionElementType) {
|
||||
super("不存在的" + exceptionElementType.name+ "名称:" + elemenetName);
|
||||
}
|
||||
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public enum ExceptionElementType {
|
||||
ELEMENT("元素"),
|
||||
TEMPLET("模板")
|
||||
;
|
||||
String name;
|
||||
|
||||
private ExceptionElementType(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ import org.dom4j.Element;
|
|||
import org.dom4j.io.SAXReader;
|
||||
|
||||
import pres.auxiliary.work.selenium.element.ElementType;
|
||||
import pres.auxiliary.work.selenium.location.UndefinedElementException.ExceptionElementType;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
|
@ -41,7 +42,7 @@ import pres.auxiliary.work.selenium.element.ElementType;
|
|||
* @since JDK 8
|
||||
*
|
||||
*/
|
||||
public class ReadXml extends AbstractRead {
|
||||
public class XmlLocation extends AbstractLocation {
|
||||
/**
|
||||
* 存储构造后的Document类对象,以读取xml文件中的内容
|
||||
*/
|
||||
|
@ -52,7 +53,7 @@ public class ReadXml extends AbstractRead {
|
|||
* @param xmlFile xml文件对象
|
||||
* @throws IncorrectFileException xml文件有误时抛出的异常
|
||||
*/
|
||||
public ReadXml(File xmlFile) {
|
||||
public XmlLocation(File xmlFile) {
|
||||
//将编译时异常转换为运行时异常
|
||||
try {
|
||||
dom = new SAXReader().read(xmlFile);
|
||||
|
@ -66,7 +67,7 @@ public class ReadXml extends AbstractRead {
|
|||
* 根据xml文件的{@link Document}对象进行构造
|
||||
* @param dom {@link Document}对象
|
||||
*/
|
||||
public ReadXml(Document dom) {
|
||||
public XmlLocation(Document dom) {
|
||||
this.dom = dom;
|
||||
}
|
||||
|
||||
|
@ -78,7 +79,7 @@ public class ReadXml extends AbstractRead {
|
|||
|
||||
//遍历元素下所有的定位标签,并将其转换为相应的ByType枚举,存储至byTypeList中
|
||||
for (Object byElement : element.elements()) {
|
||||
byTypeList.add(getByType(((Element)byElement).getName()));
|
||||
byTypeList.add(toByType(((Element)byElement).getName()));
|
||||
}
|
||||
|
||||
return byTypeList;
|
||||
|
@ -101,7 +102,7 @@ public class ReadXml extends AbstractRead {
|
|||
//判断元素是否启用模板,若启用模板,则获取模板内容,并将定位内容进行转换
|
||||
String tempId = ((Element) byElement).attributeValue("temp_id");
|
||||
String value = tempId != null ?
|
||||
getTemplateValue(tempId, getByType(((Element) byElement).getName())) :
|
||||
getTemplateValue(tempId, toByType(((Element) byElement).getName())) :
|
||||
((Element)byElement).getText();
|
||||
|
||||
valueList.add(replaceValue(((Element) byElement), value));
|
||||
|
@ -164,32 +165,6 @@ public class ReadXml extends AbstractRead {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 该方法用于根据标签的名称,返回相应的定位方式枚举
|
||||
* @param labelName 标签名称
|
||||
* @return {@link ByType}枚举
|
||||
*/
|
||||
private ByType getByType(String labelName) {
|
||||
switch (labelName) {
|
||||
case "xpath":
|
||||
return ByType.XPATH;
|
||||
case "css":
|
||||
return ByType.CSS;
|
||||
case "classname":
|
||||
return ByType.CLASSNAME;
|
||||
case "id":
|
||||
return ByType.ID;
|
||||
case "linktext":
|
||||
return ByType.LINKTEXT;
|
||||
case "name":
|
||||
return ByType.NAME;
|
||||
case "tagname":
|
||||
return ByType.TAGNAME;
|
||||
default:
|
||||
throw new IllegalArgumentException("不存在的定位方式: " + labelName);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于返回元素标签对象
|
||||
* @param name 元素名称
|
||||
|
@ -204,7 +179,7 @@ public class ReadXml extends AbstractRead {
|
|||
if (element != null) {
|
||||
return element;
|
||||
} else {
|
||||
throw new UndefinedElementException("不存在的元素名称:" + name);
|
||||
throw new UndefinedElementException(name, ExceptionElementType.ELEMENT);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -222,7 +197,7 @@ public class ReadXml extends AbstractRead {
|
|||
if (element != null) {
|
||||
return element.getText();
|
||||
} else {
|
||||
throw new UndefinedElementException("不存在的模板:" + selectTempXpath);
|
||||
throw new UndefinedElementException(tempId, ExceptionElementType.TEMPLET);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,158 +0,0 @@
|
|||
package pres.auxiliary.work.selenium.datadriven;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
import pres.auxiliary.work.selenium.datadriven.DataNotFoundException;
|
||||
|
||||
public class TestDataDriven {
|
||||
DataDriven dataList = new DataDriven();
|
||||
|
||||
@After
|
||||
public void after() {
|
||||
while(dataList.hasNext()) {
|
||||
System.out.println("*******************************");
|
||||
System.out.println("正在读取第" + (dataList.getNowIndex() + 1) + "行数据:");
|
||||
int i = 0;
|
||||
for (String data : dataList.next()) {
|
||||
System.out.println("第" + (i + 1) + "列(列名:" + dataList.getReadListName()[i++] + ")数据:" + data);
|
||||
}
|
||||
}
|
||||
System.out.println("*******************************");
|
||||
System.out.println("整体数据:");
|
||||
System.out.println("[" + dataList.toString() + "]");
|
||||
}
|
||||
|
||||
@Before
|
||||
public void readFile() throws DataNotFoundException {
|
||||
// dataList.setEmptyCell(true);
|
||||
// test_04_ReadTxtFile();
|
||||
// dataList.addDataFile(new File("src/test/java/pres/auxiliary/selenium/datadriven/Test2.txt"), true);
|
||||
|
||||
/*
|
||||
for ( int i = 0; i < dataList.getColumnLength(); i++ ) {
|
||||
dataList.replaceListName(i, ("测试数据第" + (i + 1) + "列"));
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void test_01_ReadCsvFile() throws DataNotFoundException {
|
||||
dataList.addDataFile(new File("src/test/java/pres/auxiliary/selenium/datadriven/Test.csv"), true);
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void test_02_ReadXlsxFile() throws DataNotFoundException {
|
||||
dataList.addDataFile(new File("src/test/java/pres/auxiliary/selenium/datadriven/Test.xlsx"), true);
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void test_03_ReadXlsFile() throws DataNotFoundException {
|
||||
dataList.addDataFile(new File("src/test/java/pres/auxiliary/selenium/datadriven/Test.xls"), true);
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void test_04_ReadTxtFile() throws DataNotFoundException {
|
||||
dataList.addDataFile(new File("src/test/java/pres/auxiliary/selenium/datadriven/Test.txt"), true);
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void test_05_setEmptyCell() throws DataNotFoundException {
|
||||
dataList.setEmptyCell(false);
|
||||
dataList.addDataFile(new File("src/test/java/pres/auxiliary/selenium/datadriven/Test.xls"), true);
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void test_06_next() {
|
||||
int index = 0;
|
||||
while(dataList.hasNext()) {
|
||||
System.out.println("*******************************");
|
||||
System.out.println("正在读取第" + (index + 1) + "行数据:");
|
||||
int i = 0;
|
||||
for (String data : dataList.next()) {
|
||||
System.out.println("第" + (i + 1) + "列(列名:" + dataList.getListName(i++) + ")数据:" + data);
|
||||
}
|
||||
|
||||
index++;
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_07_setReadListName() {
|
||||
dataList.setReadListName("测试1", "测试3");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_08_setReadListId() {
|
||||
dataList.setReadListId(1, 2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_09_readFiles() throws DataNotFoundException {
|
||||
dataList.addDataFile(new File("src/test/java/pres/auxiliary/selenium/datadriven/Test2.txt"), true);
|
||||
test_01_ReadCsvFile();
|
||||
test_02_ReadXlsxFile();
|
||||
test_03_ReadXlsFile();
|
||||
test_04_ReadTxtFile();
|
||||
dataList.setReadListName("测试1", "xls1", "测试4", "csv1", "xlsx1");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_10_setNowIndex() {
|
||||
dataList.setNowIndex(3);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_11_getRowAndsetReadAllList() {
|
||||
dataList.setReadListId(1, 3, 5);
|
||||
int index = 1;
|
||||
for (String data : dataList.getRow(2)) {
|
||||
System.out.println("第" + (index++) + "行数据:" + data);
|
||||
}
|
||||
dataList.setReadAllList();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_12_getColumn() {
|
||||
int index = 1;
|
||||
for (String data : dataList.getColumn(3)) {
|
||||
System.out.println("第" + (index++) + "行数据:" + data);
|
||||
}
|
||||
System.out.println("******************************");
|
||||
index = 1;
|
||||
for (String data : dataList.getColumn("测试2")) {
|
||||
System.out.println("第" + (index++) + "行数据:" + data);
|
||||
}
|
||||
dataList.setReadAllList();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_13_saveData() throws Exception {
|
||||
dataList.setEmptyCell(false);
|
||||
dataList.addDataFile(new File("src/test/java/pres/auxiliary/selenium/datadriven/Test2.txt"), true);
|
||||
test_01_ReadCsvFile();
|
||||
test_02_ReadXlsxFile();
|
||||
test_03_ReadXlsFile();
|
||||
test_04_ReadTxtFile();
|
||||
|
||||
test_01_ReadCsvFile();
|
||||
test_02_ReadXlsxFile();
|
||||
test_03_ReadXlsFile();
|
||||
test_04_ReadTxtFile();
|
||||
|
||||
dataList.saveData(new File("D:\\测试\\test.txt"));
|
||||
dataList.saveData(new File("D:\\测试\\test.csv"));
|
||||
dataList.saveData(new File("D:\\测试\\test.xls"));
|
||||
dataList.saveData(new File("D:\\测试\\test.xlsx"));
|
||||
}
|
||||
}
|
|
@ -6,8 +6,8 @@ import org.testng.annotations.BeforeClass;
|
|||
import org.testng.annotations.BeforeMethod;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import pres.auxiliary.work.selenium.location.AbstractRead;
|
||||
import pres.auxiliary.work.selenium.location.ReadXml;
|
||||
import pres.auxiliary.work.selenium.location.AbstractLocation;
|
||||
import pres.auxiliary.work.selenium.location.XmlLocation;
|
||||
|
||||
/**
|
||||
* <p><b>文件名:</b>ElementDataTest.java</p>
|
||||
|
@ -21,14 +21,14 @@ import pres.auxiliary.work.selenium.location.ReadXml;
|
|||
*
|
||||
*/
|
||||
public class ElementDataTest {
|
||||
AbstractRead ar;
|
||||
AbstractLocation ar;
|
||||
ElementData test;
|
||||
|
||||
final File XML_FILE = new File("src/test/java/pres/auxiliary/work/selenium/element/测试用xml文件.xml");
|
||||
|
||||
@BeforeClass
|
||||
public void init() {
|
||||
ar = new ReadXml(XML_FILE);
|
||||
ar = new XmlLocation(XML_FILE);
|
||||
}
|
||||
|
||||
@BeforeMethod
|
||||
|
|
|
@ -0,0 +1,162 @@
|
|||
package pres.auxiliary.work.selenium.location;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
|
||||
import org.testng.annotations.BeforeClass;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
|
||||
/**
|
||||
* <p><b>文件名:</b>JsonLocationTest.java</p>
|
||||
* <p><b>用途:</b>
|
||||
* 对{@link JsonLocation}类进行单元测试
|
||||
* </p>
|
||||
* <p><b>编码时间:</b>2020年10月28日上午7:55:07</p>
|
||||
* <p><b>修改时间:</b>2020年10月28日上午7:55:07</p>
|
||||
* @author 彭宇琦
|
||||
* @version Ver1.0
|
||||
*
|
||||
*/
|
||||
public class JsonLocationTest {
|
||||
private final File JSON_FILE = new File("src/test/java/pres/auxiliary/work/selenium/location/测试用json文件.txt");
|
||||
/**
|
||||
* 定义类
|
||||
*/
|
||||
JsonLocation test;
|
||||
|
||||
/**
|
||||
* 初始化数据
|
||||
*/
|
||||
@BeforeClass
|
||||
public void init() {
|
||||
test = new JsonLocation(JSON_FILE);
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试读取文件中的json,并测试其是否能被转换为json
|
||||
*/
|
||||
@Test
|
||||
public void readJson() {
|
||||
StringBuilder jsonText = new StringBuilder();
|
||||
try(BufferedReader br = new BufferedReader(new FileReader(JSON_FILE))) {
|
||||
String text = "";
|
||||
while((text = br.readLine()) != null) {
|
||||
jsonText.append(text);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
}
|
||||
|
||||
// System.out.println(jsonText.toString());
|
||||
JSONObject json = JSONObject.parseObject(jsonText.toString());
|
||||
System.out.println(json.toJSONString());
|
||||
|
||||
// System.out.println(new JSONObject().isEmpty());
|
||||
System.out.println(json.getJSONArray("test"));
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于测试{@link JsonLocation#findElementByTypeList(String)}方法<br>
|
||||
* 预期:<br>
|
||||
* xpath
|
||||
* css
|
||||
* xpath
|
||||
* id
|
||||
*/
|
||||
@Test
|
||||
public void findElementByTypeListTest() {
|
||||
test.findElementByTypeList("XX控件5").forEach(System.out :: println);
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于测试{@link JsonLocation#findValueList(String)}方法,不抛出异常<br>
|
||||
* 预期:<br>
|
||||
* //XXX模板控件1[@X='${name}']/div/div[@src='Test']/input
|
||||
* http body div
|
||||
* //XXX模板控件1[@X='${src}']/div[@name='${name}']
|
||||
* 测试控件55555
|
||||
*/
|
||||
@Test
|
||||
public void findValueListTest_NotException() {
|
||||
test.findValueList("XX控件5").forEach(System.out :: println);
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于测试{@link JsonLocation#findValueList(String)}方法,抛出异常<br>
|
||||
* 预期:<br>
|
||||
* 通过
|
||||
*/
|
||||
@Test (expectedExceptions = UndefinedElementException.class)
|
||||
public void findValueListTest_Exception() {
|
||||
test.findValueList("XX控件20").forEach(System.out :: println);
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于测试{@link JsonLocation#findElementType(String)}方法<br>
|
||||
* 预期:<br>
|
||||
* COMMON_ELEMENT
|
||||
* DATA_LIST_ELEMENT
|
||||
* SELECT_DATAS_ELEMENT
|
||||
* COMMON_ELEMENT
|
||||
* COMMON_ELEMENT
|
||||
* SELECT_OPTION_ELEMENT
|
||||
*/
|
||||
@Test
|
||||
public void findElementTypeTest() {
|
||||
System.out.println(test.findElementType("XX控件16"));
|
||||
System.out.println(test.findElementType("XX控件17"));
|
||||
System.out.println(test.findElementType("XX控件18"));
|
||||
System.out.println(test.findElementType("XX控件19"));
|
||||
System.out.println(test.findElementType("XX控件21"));
|
||||
System.out.println(test.findElementType("XX控件20"));
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于测试{@link JsonLocation#findWaitTime(String)}方法<br>
|
||||
* 预期:<br>
|
||||
* 1
|
||||
* 0
|
||||
* -1
|
||||
* -1
|
||||
* -1
|
||||
* -1
|
||||
*/
|
||||
@Test
|
||||
public void findWaitTimeTest() {
|
||||
System.out.println(test.findWaitTime("XX控件16"));
|
||||
System.out.println(test.findWaitTime("XX控件17"));
|
||||
System.out.println(test.findWaitTime("XX控件18"));
|
||||
System.out.println(test.findWaitTime("XX控件19"));
|
||||
System.out.println(test.findWaitTime("XX控件21"));
|
||||
System.out.println(test.findWaitTime("XX控件20"));
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于测试{@link JsonLocation#findIframeNameList(String)}方法<br>
|
||||
* 预期:<br>
|
||||
* ["窗体1", "窗体1.1"]
|
||||
* ["窗体1", "窗体1.1", "窗体1.1.1"]
|
||||
*
|
||||
*/
|
||||
@Test
|
||||
public void findIframeNameListTest_NotException() {
|
||||
System.out.println(test.findIframeNameList("XX控件3"));
|
||||
System.out.println(test.findIframeNameList("XX控件3.1"));
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于测试{@link JsonLocation#findIframeNameList(String)}方法<br>
|
||||
* 预期:<br>
|
||||
* 显示无元素信息异常
|
||||
*/
|
||||
@Test
|
||||
public void findIframeNameListTest_Exception() {
|
||||
try {
|
||||
System.out.println(test.findIframeNameList("XX控件3.2"));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -7,30 +7,30 @@ import org.testng.annotations.Test;
|
|||
|
||||
/**
|
||||
* <p><b>文件名:</b>ReadXmlTest.java</p>
|
||||
* <p><b>用途:</b>用于对{@link ReadXml}类进行测试</p>
|
||||
* <p><b>用途:</b>用于对{@link XmlLocation}类进行测试</p>
|
||||
* <p><b>编码时间:</b>2020年10月8日 下午11:19:40</p>
|
||||
* <p><b>修改时间:</b>2020年10月8日 下午11:19:40</p>
|
||||
* @author 彭宇琦
|
||||
* @version Ver1.0
|
||||
* @since JDK 12
|
||||
*/
|
||||
public class ReadXmlTest {
|
||||
public class XmlLocationTest {
|
||||
private final File XML_FILE = new File("src/test/java/pres/auxiliary/work/selenium/location/测试用xml文件.xml");
|
||||
/**
|
||||
* 定义类
|
||||
*/
|
||||
ReadXml rx;
|
||||
XmlLocation rx;
|
||||
|
||||
/**
|
||||
* 初始化数据
|
||||
*/
|
||||
@BeforeClass
|
||||
public void init() {
|
||||
rx = new ReadXml(XML_FILE);
|
||||
rx = new XmlLocation(XML_FILE);
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试{@link ReadXml#findElementByTypeList(String)}方法
|
||||
* 测试{@link XmlLocation#findElementByTypeList(String)}方法
|
||||
* 预期:
|
||||
* XPATH
|
||||
* CSS
|
||||
|
@ -42,7 +42,7 @@ public class ReadXmlTest {
|
|||
}
|
||||
|
||||
/**
|
||||
* 测试{@link ReadXml#findElementType(String)}方法
|
||||
* 测试{@link XmlLocation#findElementType(String)}方法
|
||||
* 预期:
|
||||
* COMMON_ELEMENT
|
||||
* COMMON_ELEMENT
|
||||
|
@ -62,7 +62,7 @@ public class ReadXmlTest {
|
|||
}
|
||||
|
||||
/**
|
||||
* 测试{@link ReadXml#findIframeNameList(String)}方法
|
||||
* 测试{@link XmlLocation#findIframeNameList(String)}方法
|
||||
* 预期:
|
||||
* 窗体1
|
||||
* 窗体1.1
|
||||
|
@ -74,7 +74,7 @@ public class ReadXmlTest {
|
|||
}
|
||||
|
||||
/**
|
||||
* 测试{@link ReadXml#findWaitTime(String)}方法
|
||||
* 测试{@link XmlLocation#findWaitTime(String)}方法
|
||||
* 预期:
|
||||
* -1
|
||||
* 100
|
||||
|
@ -94,7 +94,7 @@ public class ReadXmlTest {
|
|||
}
|
||||
|
||||
/**
|
||||
* 测试{@link ReadXml#findValueList(String)}方法
|
||||
* 测试{@link XmlLocation#findValueList(String)}方法
|
||||
* 预期:
|
||||
* //XXX模板控件1[@X='XX控件11']/div/div[@src='Test']/input
|
||||
* http body div
|
|
@ -0,0 +1,261 @@
|
|||
{
|
||||
"templet":{
|
||||
"1":"//XXX模板控件1[@X='${name}']/div/div[@${att}='${id}']/input",
|
||||
"2":"http body ${tag_name}",
|
||||
"3":"//XXX模板控件1[@X='${src}']/div[@name='${name}']",
|
||||
"4":"//XXX模板控件1[@X='${src}']/div[@name='${name}']/div[@is='${str1}' and text()='${str1}']",
|
||||
"5":"//XXX模板控件1[@X='${src}']/div[@name='${name}']/div[@is='${str1}' and text()='${src}']/span[text()='${str2}']/span[id='${aaaa}']",
|
||||
"6":"${name}"
|
||||
},
|
||||
"element":{
|
||||
"XX控件1":{
|
||||
"location":[
|
||||
{
|
||||
"type":"xpath",
|
||||
"value":"//XX控件1[@X='XXXX']"
|
||||
}
|
||||
],
|
||||
"type":"0",
|
||||
"wait":"5"
|
||||
},
|
||||
"窗体1":{
|
||||
"location":[
|
||||
{
|
||||
"type":"xpath",
|
||||
"value":"//窗体1[@X='XXXX']"
|
||||
},
|
||||
{
|
||||
"temp":"2",
|
||||
"type":"css",
|
||||
"tag_name":"iframe"
|
||||
}
|
||||
],
|
||||
"type":"1",
|
||||
"wait":"5"
|
||||
},
|
||||
"XX控件2":{
|
||||
"location":[
|
||||
{
|
||||
"type":"xpath",
|
||||
"value":"//XX控件2[@X='XXXX']"
|
||||
}
|
||||
],
|
||||
"type":"0",
|
||||
"wait":"5",
|
||||
"iframe":"窗体1"
|
||||
},
|
||||
"窗体1.1":{
|
||||
"location":[
|
||||
{
|
||||
"type":"xpath",
|
||||
"value":"//窗体1.1[@X='XXXX']"
|
||||
}
|
||||
],
|
||||
"type":"1",
|
||||
"iframe":"窗体1"
|
||||
},
|
||||
"XX控件3":{
|
||||
"location":[
|
||||
{
|
||||
"type":"xpath",
|
||||
"value":"//XX控件3[@X='XXXX']"
|
||||
}
|
||||
],
|
||||
"type":"0",
|
||||
"wait":"5",
|
||||
"iframe":"窗体1.1"
|
||||
},
|
||||
"窗体1.1.1":{
|
||||
"location":[
|
||||
{
|
||||
"type":"xpath",
|
||||
"value":"//窗体1.1.1[@X='XXXX']"
|
||||
}
|
||||
],
|
||||
"type":"1",
|
||||
"iframe":"窗体1.1"
|
||||
},
|
||||
"XX控件3.1":{
|
||||
"location":[
|
||||
{
|
||||
"type":"xpath",
|
||||
"value":"//XX控件3[@X='XXXX']"
|
||||
}
|
||||
],
|
||||
"type":"0",
|
||||
"wait":"5",
|
||||
"iframe":"窗体1.1.1"
|
||||
},
|
||||
"XX控件3.2":{
|
||||
"location":[
|
||||
{
|
||||
"type":"xpath",
|
||||
"value":"//XX控件3[@X='XXXX']"
|
||||
}
|
||||
],
|
||||
"type":"0",
|
||||
"wait":"5",
|
||||
"iframe":"窗体1.1.8"
|
||||
},
|
||||
"窗体1.2":{
|
||||
"location":[
|
||||
{
|
||||
"type":"xpath",
|
||||
"value":"//窗体1.2[@X='XXXX']"
|
||||
}
|
||||
],
|
||||
"iframe":"窗体1"
|
||||
},
|
||||
"XX控件4":{
|
||||
"location":[
|
||||
{
|
||||
"type":"xpath",
|
||||
"value":"//XX控件4[@X='XXXX']"
|
||||
}
|
||||
]
|
||||
},
|
||||
"窗体2":{
|
||||
"location":[
|
||||
{
|
||||
"type":"xpath",
|
||||
"value":"//窗体2[@X='XXXX']"
|
||||
}
|
||||
]
|
||||
},
|
||||
"XX控件5":{
|
||||
"location":[
|
||||
{
|
||||
"temp":"1",
|
||||
"type":"xpath",
|
||||
"id":"Test",
|
||||
"att":"src"
|
||||
},
|
||||
{
|
||||
"temp":"2",
|
||||
"type":"css",
|
||||
"tag_name":"div",
|
||||
"att":"src"
|
||||
},
|
||||
{
|
||||
"temp":"3",
|
||||
"type":"xpath"
|
||||
},
|
||||
{
|
||||
"temp":"6",
|
||||
"type":"id",
|
||||
"name":"测试控件55555"
|
||||
}
|
||||
],
|
||||
"iframe":"窗体2"
|
||||
},
|
||||
"窗体3":{
|
||||
"location":[
|
||||
{
|
||||
"type":"xpath",
|
||||
"value":"//窗体3[@X='${ccc}']"
|
||||
}
|
||||
]
|
||||
},
|
||||
"XX控件13":{
|
||||
"location":[
|
||||
{
|
||||
"temp":"3",
|
||||
"type":"xpath"
|
||||
}
|
||||
],
|
||||
"iframe":"窗体3"
|
||||
},
|
||||
"XX控件14":{
|
||||
"location":[
|
||||
{
|
||||
"temp":"4",
|
||||
"type":"xpath"
|
||||
}
|
||||
],
|
||||
"iframe":"窗体3"
|
||||
},
|
||||
"XX控件15":{
|
||||
"location":[
|
||||
{
|
||||
"temp":"5",
|
||||
"type":"xpath"
|
||||
}
|
||||
],
|
||||
"iframe":"窗体3",
|
||||
"wait":100
|
||||
},
|
||||
"XX控件16":{
|
||||
"location":[
|
||||
{
|
||||
"temp":"1",
|
||||
"type":"xpath",
|
||||
"id":"Test",
|
||||
"att":"src"
|
||||
}
|
||||
],
|
||||
"iframe":"窗体3",
|
||||
"type":0,
|
||||
"wait":1
|
||||
},
|
||||
"XX控件17":{
|
||||
"location":[
|
||||
{
|
||||
"temp":"1",
|
||||
"type":"xpath"
|
||||
}
|
||||
],
|
||||
"iframe":"窗体3",
|
||||
"type":1,
|
||||
"wait":0
|
||||
},
|
||||
"XX控件18":{
|
||||
"location":[
|
||||
{
|
||||
"temp":"5",
|
||||
"type":"xpath",
|
||||
"src":"Test",
|
||||
"str2":"string"
|
||||
}
|
||||
],
|
||||
"iframe":"窗体3",
|
||||
"type":2,
|
||||
"wait":-11
|
||||
},
|
||||
"XX控件19":{
|
||||
"location":[
|
||||
{
|
||||
"temp":"5",
|
||||
"type":"xpath",
|
||||
"src":"Test",
|
||||
"str2":"string"
|
||||
}
|
||||
],
|
||||
"iframe":"窗体3",
|
||||
"type":"sadasd",
|
||||
},
|
||||
"XX控件21":{
|
||||
"location":[
|
||||
{
|
||||
"temp":"5",
|
||||
"type":"xpath",
|
||||
"src":"Test",
|
||||
"str2":"string"
|
||||
}
|
||||
],
|
||||
"iframe":"窗体3",
|
||||
"type":2000,
|
||||
"wait":""
|
||||
},
|
||||
"XX控件20":{
|
||||
"location":[
|
||||
{
|
||||
"temp":"测试",
|
||||
"type":"xpath"
|
||||
}
|
||||
],
|
||||
"iframe":"窗体3",
|
||||
"type":3,
|
||||
"wait":"dasd"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -9,14 +9,14 @@ import org.testng.annotations.BeforeClass;
|
|||
import org.testng.annotations.Test;
|
||||
|
||||
public class ReadXmlTest {
|
||||
ReadXml r;
|
||||
XmlLocation r;
|
||||
|
||||
/**
|
||||
* 初始化数据
|
||||
*/
|
||||
@BeforeClass
|
||||
public void newReadXML() {
|
||||
r = new ReadXml(new File("src/test/java/pres/auxiliary/work/selenium/xml/测试用xml文件.xml"));
|
||||
r = new XmlLocation(new File("src/test/java/pres/auxiliary/work/selenium/xml/测试用xml文件.xml"));
|
||||
}
|
||||
|
||||
@AfterMethod
|
||||
|
@ -25,7 +25,7 @@ ReadXml r;
|
|||
}
|
||||
|
||||
/**
|
||||
* 用于测试{@link ReadXml#getBy(String, ByType)}方法,获取普通元素
|
||||
* 用于测试{@link XmlLocation#getBy(String, ByType)}方法,获取普通元素
|
||||
*/
|
||||
@Test
|
||||
public void getByTest_Element() {
|
||||
|
@ -33,7 +33,7 @@ ReadXml r;
|
|||
}
|
||||
|
||||
/**
|
||||
* 用于测试{@link ReadXml#getBy(String, ByType)}方法,获取窗体元素
|
||||
* 用于测试{@link XmlLocation#getBy(String, ByType)}方法,获取窗体元素
|
||||
*/
|
||||
@Test
|
||||
public void getByTest_Iframe() {
|
||||
|
@ -41,7 +41,7 @@ ReadXml r;
|
|||
}
|
||||
|
||||
/**
|
||||
* 用于测试{@link ReadXml#getBy(String, ByType)}方法,获取模板元素
|
||||
* 用于测试{@link XmlLocation#getBy(String, ByType)}方法,获取模板元素
|
||||
*/
|
||||
@Test
|
||||
public void getByTest_Templet() {
|
||||
|
@ -50,7 +50,7 @@ ReadXml r;
|
|||
}
|
||||
|
||||
/**
|
||||
* 用于测试{@link ReadXml#getBy(String, ByType)}方法,获取顶层元素
|
||||
* 用于测试{@link XmlLocation#getBy(String, ByType)}方法,获取顶层元素
|
||||
*/
|
||||
@Test
|
||||
public void getByTest_RootElement() {
|
||||
|
@ -58,7 +58,7 @@ ReadXml r;
|
|||
}
|
||||
|
||||
/**
|
||||
* 用于测试{@link ReadXml#getValue(String, ByType)}方法,获取普通元素
|
||||
* 用于测试{@link XmlLocation#getValue(String, ByType)}方法,获取普通元素
|
||||
*/
|
||||
@Test
|
||||
public void getElementValueTest_Element() {
|
||||
|
@ -66,7 +66,7 @@ ReadXml r;
|
|||
}
|
||||
|
||||
/**
|
||||
* 用于测试{@link ReadXml#getValue(String, ByType)}方法,获取窗体元素
|
||||
* 用于测试{@link XmlLocation#getValue(String, ByType)}方法,获取窗体元素
|
||||
*/
|
||||
@Test
|
||||
public void getElementValueTest_Iframe() {
|
||||
|
@ -74,7 +74,7 @@ ReadXml r;
|
|||
}
|
||||
|
||||
/**
|
||||
* 用于测试{@link ReadXml#getValue(String, ByType)}方法,获取模板元素
|
||||
* 用于测试{@link XmlLocation#getValue(String, ByType)}方法,获取模板元素
|
||||
*/
|
||||
@Test
|
||||
public void getElementValueTest_Templet() {
|
||||
|
@ -83,7 +83,7 @@ ReadXml r;
|
|||
}
|
||||
|
||||
/**
|
||||
* 用于测试{@link ReadXml#getValue(String, ByType)}方法,获取顶层元素
|
||||
* 用于测试{@link XmlLocation#getValue(String, ByType)}方法,获取顶层元素
|
||||
*/
|
||||
@Test
|
||||
public void getElementValueTest_RootElement() {
|
||||
|
@ -91,7 +91,7 @@ ReadXml r;
|
|||
}
|
||||
|
||||
/**
|
||||
* 用于测试{@link ReadXml#getIframeName(String, ByType)}方法,获取普通元素
|
||||
* 用于测试{@link XmlLocation#getIframeName(String, ByType)}方法,获取普通元素
|
||||
*/
|
||||
@Test
|
||||
public void getIframeNameTest_Element() {
|
||||
|
@ -99,7 +99,7 @@ ReadXml r;
|
|||
}
|
||||
|
||||
/**
|
||||
* 用于测试{@link ReadXml#getIframeName(String, ByType)}方法,获取窗体元素
|
||||
* 用于测试{@link XmlLocation#getIframeName(String, ByType)}方法,获取窗体元素
|
||||
*/
|
||||
@Test
|
||||
public void getIframeNameTest_Iframe() {
|
||||
|
@ -107,7 +107,7 @@ ReadXml r;
|
|||
}
|
||||
|
||||
/**
|
||||
* 用于测试{@link ReadXml#getIframeName(String, ByType)}方法,获取模板元素
|
||||
* 用于测试{@link XmlLocation#getIframeName(String, ByType)}方法,获取模板元素
|
||||
*/
|
||||
@Test
|
||||
public void getIframeNameTest_Templet() {
|
||||
|
@ -116,7 +116,7 @@ ReadXml r;
|
|||
}
|
||||
|
||||
/**
|
||||
* 用于测试{@link ReadXml#getIframeName(String)}方法,获取顶层元素
|
||||
* 用于测试{@link XmlLocation#getIframeName(String)}方法,获取顶层元素
|
||||
*/
|
||||
@Test
|
||||
public void getIframeNameTest_RootElement() {
|
||||
|
@ -124,7 +124,7 @@ ReadXml r;
|
|||
}
|
||||
|
||||
/**
|
||||
* 用于测试{@link ReadXml#getIframeName(String)}方法,获取模板元素
|
||||
* 用于测试{@link XmlLocation#getIframeName(String)}方法,获取模板元素
|
||||
*/
|
||||
@Test
|
||||
public void getIframeNameTest_NoPram() {
|
||||
|
@ -132,7 +132,7 @@ ReadXml r;
|
|||
}
|
||||
|
||||
/**
|
||||
* 用于测试{@link ReadXml#getValue(String, ByType)}方法,未查找到替换的属性
|
||||
* 用于测试{@link XmlLocation#getValue(String, ByType)}方法,未查找到替换的属性
|
||||
*/
|
||||
@Test
|
||||
public void getValueTest_NoPram() {
|
||||
|
@ -141,7 +141,7 @@ ReadXml r;
|
|||
}
|
||||
|
||||
/**
|
||||
* 用于测试{@link ReadXml#getValue(String, ByType)}方法,外链关键词
|
||||
* 用于测试{@link XmlLocation#getValue(String, ByType)}方法,外链关键词
|
||||
*/
|
||||
@Test
|
||||
public void getValueTest_Link() {
|
||||
|
|
Loading…
Reference in New Issue