jaxen
jaxen
diff --git a/src/main/java/com/auxiliary/testcase/templet/Case.java b/src/main/java/com/auxiliary/testcase/templet/Case.java
index 01d318d..b127cc7 100644
--- a/src/main/java/com/auxiliary/testcase/templet/Case.java
+++ b/src/main/java/com/auxiliary/testcase/templet/Case.java
@@ -14,10 +14,19 @@ import org.dom4j.io.SAXReader;
import com.auxiliary.testcase.file.IncorrectFileException;
/**
- * 文件名:Case.java
- * 用途:定义测试用例模板类能返回的基本字段,提供其相应的get与set方法,但该方法不允许包外调用
- * 编码时间:2020年3月3日下午8:07:23
- * 修改时间:2020年3月4日 07:39:23
+ *
+ * 文件名:Case.java
+ *
+ *
+ * 用途:定义测试用例模板类能返回的基本字段,提供其相应的get与set方法,但该方法不允许包外调用
+ *
+ *
+ * 编码时间:2020年3月3日下午8:07:23
+ *
+ *
+ * 修改时间:2020年3月4日 07:39:23
+ *
+ *
* @author 彭宇琦
* @version Ver1.0
* @since JDK 1.8
@@ -36,12 +45,12 @@ public abstract class Case {
* 用于指向用例标签中的id属性
*/
public static final String ATTRIBUTE_ID = "id";
-
+
/**
* 用于标记获取标签下所有的文本
*/
protected final String ALL = "-1:getAllText";
-
+
/**
* 用于存储需要替换的词语的开始标记
*/
@@ -50,29 +59,30 @@ public abstract class Case {
* 用于存储需要替换的词语的结束标记
*/
protected final String END_SIGN = "}*";
-
+
/**
* 用于存储传入到正则表达式中的开始标记
*/
protected final String START_SIGN_REGIX = "\\*\\{";
-
+
/**
* 用于指向测试用例xml文件的Document对象
*/
- protected Document configXml;
-
+ protected Document configXml;
+
/**
* 存储xml文件中其需要替换的词语
*/
protected HashMap wordMap = new HashMap(16);
-
+
/**
* 存储字段的文本内容
*/
protected HashMap> fieldTextMap = new HashMap>(16);
-
+
/**
* 根据用例xml文件来构造Case类
+ *
* @param configXmlFile xml配置文件
* @throws IncorrectFileException 文件格式或路径不正确时抛出的异常
*/
@@ -81,200 +91,204 @@ public abstract class Case {
try {
configXml = new SAXReader().read(configXmlFile);
} catch (DocumentException e) {
- throw new IncorrectFileException("用例xml文件有误" );
+ throw new IncorrectFileException("用例xml文件有误");
}
-
- //查找并存储替换的词语
+
+ // 查找并存储替换的词语
saveWord();
- //保存字段的词语
+ // 保存字段的词语
saveField();
}
/**
* 用于设置需要替换的词语
+ *
* @param word 测试用例xml库中需要替换的词语
* @param text 被替换的词语
*/
public void setReplaceWord(String word, String text) {
- //判断该词语是否存在于textMap中,若不存在,则抛出异常
+ // 判断该词语是否存在于textMap中,若不存在,则抛出异常
if (!wordMap.containsKey(word)) {
throw new IncorrectFileException("未找到需要替换的词语:" + word);
}
- //存储替换的词语
+ // 存储替换的词语
wordMap.put(word, text);
}
-
+
/**
* 返回字段内容
+ *
* @return 字段内容
*/
public HashMap> getFieldTextMap() {
return fieldTextMap;
}
-
+
/**
* 用于替换文本中需要替换的单词,返回替换后的文本
+ *
* @param text 需要替换的文本
* @return 替换后的文本
*/
protected String replaceText(String text) {
StringBuilder sb = new StringBuilder(text);
- //存储替换符的位置
+ // 存储替换符的位置
int index = 0;
- //循环,替换content中所有需要替换的信息
- while( (index = sb.indexOf(START_SIGN)) != -1 ) {
- //存储待替换的变量名
+ // 循环,替换content中所有需要替换的信息
+ while ((index = sb.indexOf(START_SIGN)) != -1) {
+ // 存储待替换的变量名
String var = "";
try {
var = sb.substring(index + START_SIGN.length(), sb.indexOf(END_SIGN));
} catch (StringIndexOutOfBoundsException e) {
throw new CaseContentException("词语替换错误,无效的标记字符:" + text);
}
- //替换该变量名
+ // 替换该变量名
sb.replace(index, sb.indexOf(END_SIGN) + END_SIGN.length(), wordMap.get(var));
}
-
+
return sb.toString();
}
-
+
/**
* 用于获取用例xml中对应用例的标签内的文本,并返回替换词语后的文本
- * @param caseName 用例名称
+ *
+ * @param caseName 用例名称
* @param labelType 标签枚举{@link LabelType}
- * @param id 对应标签的id属性
+ * @param id 对应标签的id属性
* @return 标签中存储的文本,并进行处理
*/
protected String getLabelText(String caseName, LabelType labelType, String id) {
- //返回处理替换的单词后相应的文本
+ // 返回处理替换的单词后相应的文本
return getLabelText(caseName, labelType.getName(), id);
-
+
}
-
+
/**
* 用于获取用例xml中对应用例的标签内的文本,并返回替换词语后的文本
- * @param caseName 用例名称
+ *
+ * @param caseName 用例名称
* @param labelName 标签名称
- * @param id 对应标签的id属性
+ * @param id 对应标签的id属性
* @return 标签中存储的文本,并进行处理
*/
protected String getLabelText(String caseName, String labelName, String id) {
- //拼接xpath,规则"//case[@name='caseName']//标签名称[@id='id']"
- String xpath = "//" + LabelType.CASE.getName() +
- "[@" + ATTRIBUTE_NAME + "='" +
- caseName + "']//" + labelName +
- "[@" + ATTRIBUTE_ID + "='" + id +"']";
-
- //获取相应的文本内容
- Element textElement = (Element)(configXml.selectSingleNode(xpath));
- //判断获取的内容是否为空,为空则跑出异常
-
- //判断集合是否存在元素,若不存在元素,则抛出异常
+ // 拼接xpath,规则"//case[@name='caseName']//标签名称[@id='id']"
+ String xpath = "//" + LabelType.CASE.getName() + "[@" + ATTRIBUTE_NAME + "='" + caseName + "']//" + labelName
+ + "[@" + ATTRIBUTE_ID + "='" + id + "']";
+
+ // 获取相应的文本内容
+ Element textElement = (Element) (configXml.selectSingleNode(xpath));
+ // 判断获取的内容是否为空,为空则跑出异常
+
+ // 判断集合是否存在元素,若不存在元素,则抛出异常
if (textElement == null) {
throw new LabelNotFoundException("用例集“" + caseName + "”中不存在id为“" + id + "”的“" + labelName + "”标签");
}
-
- //返回处理替换的单词后相应的文本
+
+ // 返回处理替换的单词后相应的文本
return replaceText(textElement.attributeValue(ATTRIBUTE_VALUE));
-
+
}
-
+
/**
* 用于获取用例xml中对应用例的标签内所有的文本,并返回替换词语后的文本
- * @param caseName 用例名称
+ *
+ * @param caseName 用例名称
* @param labelType 标签枚举
* @return 标签中存储的文本,并进行处理
*/
- @SuppressWarnings("unchecked")
protected ArrayList getAllLabelText(String caseName, LabelType labelType) {
- //拼接xpath,规则"//case[@name='caseName']//标签名称[@id='id']"
- String xpath = "//" + LabelType.CASE.getName() +
- "[@" + ATTRIBUTE_NAME + "='" +
- caseName + "']//" + labelType.getName();
+ // 拼接xpath,规则"//case[@name='caseName']//标签名称[@id='id']"
+ String xpath = "//" + LabelType.CASE.getName() + "[@" + ATTRIBUTE_NAME + "='" + caseName + "']//"
+ + labelType.getName();
- //获取所有的节点
- List textElements = configXml.selectNodes(xpath);
- //存储节点中的value属性内的文本
- ArrayList texts = new ArrayList();
- //存储节点值
- for (int i = 0; i < textElements.size(); i++) {
- texts.add(replaceText(textElements.get(i).attributeValue(ATTRIBUTE_VALUE)));
- }
+ // 存储节点中的value属性内的文本
+ ArrayList texts = new ArrayList();
+ // 获取所有的节点
+ configXml.selectNodes(xpath).stream()
+ .map(e -> (Element) e)
+ .map(e -> e.attributeValue(ATTRIBUTE_VALUE))
+ .map(this::replaceText)
+ .forEach(texts::add);;
+
return texts;
}
-
+
/**
* 用于获取并存储需要替换的词语
*/
- @SuppressWarnings("unchecked")
private void saveWord() {
- //获取xml中包含value的元素,并将其中包含需要替换的词语存储至wordMap
- List textElement = configXml.selectNodes("//*[@" + ATTRIBUTE_VALUE + "]");
- textElement.stream().
- //获取元素的value属性,将其转换为文本对象
- map(e -> e.attributeValue(ATTRIBUTE_VALUE)).
- //筛选包含*{的文本
- filter(e -> e.indexOf(START_SIGN) > -1).forEach(e -> {
- //对文本按照*{切割,并筛选包含}*的文本
- Arrays.asList(e.split(START_SIGN_REGIX)).stream().filter(s -> s.indexOf(END_SIGN) > -1).
- forEach(s -> {
- //将需要存储的替换词语存入textMap中
- wordMap.put(s.substring(0, s.indexOf(END_SIGN)), "");
- });
- });
+ // 获取xml中包含value的元素,并将其中包含需要替换的词语存储至wordMap
+ configXml.selectNodes("//*[@" + ATTRIBUTE_VALUE + "]").stream().map(e -> (Element) e)
+ // 获取元素的value属性,将其转换为文本对象
+ .map(e -> e.attributeValue(ATTRIBUTE_VALUE))
+ // 筛选包含*{的文本
+ .filter(e -> e.indexOf(START_SIGN) > -1).forEach(e -> {
+ // 对文本按照*{切割,并筛选包含}*的文本
+ Arrays.asList(e.split(START_SIGN_REGIX)).stream().filter(s -> s.indexOf(END_SIGN) > -1)
+ .forEach(s -> {
+ // 将需要存储的替换词语存入textMap中
+ wordMap.put(s.substring(0, s.indexOf(END_SIGN)), "");
+ });
+ });
}
-
+
/**
* 用于保存xml文件中的字段
*/
- @SuppressWarnings("unchecked")
protected void saveField() {
- //获取case标签下所有的标签,存储至fieldTextMap,以初始化所有的字段名称
- ((List) (configXml.getRootElement().elements("case"))).forEach(caseElement -> {
- ((List) caseElement.elements()).forEach(labelElement -> {
- //去掉末尾的s
+ // 获取case标签下所有的标签,存储至fieldTextMap,以初始化所有的字段名称
+ configXml.getRootElement().elements("case").forEach(caseElement -> {
+ caseElement.elements().forEach(labelElement -> {
+ // 去掉末尾的s
String name = labelElement.getName();
fieldTextMap.put(name.substring(0, name.length() - 1), new ArrayList());
});
});
}
-
+
/**
* 用于添加一行文本
+ *
* @param labelType 标签名称(枚举)
- * @param text 相应内容
+ * @param text 相应内容
*/
protected void addFieldText(LabelType labelType, String text) {
fieldTextMap.get(labelType.getName()).add(text);
}
-
+
/**
* 用于添加多行文本
+ *
* @param labelName 标签名称
- * @param texts 相应内容
+ * @param texts 相应内容
*/
protected void addFieldText(String labelName, List texts) {
fieldTextMap.get(labelName).addAll(texts);
}
-
+
/**
* 用于添加一行文本
+ *
* @param labelName 标签名称
- * @param text 相应内容
+ * @param text 相应内容
*/
protected void addFieldText(String labelName, String text) {
fieldTextMap.get(labelName).add(text);
}
-
+
/**
* 用于添加多行文本
+ *
* @param label 标签名称(枚举)
* @param texts 相应内容
*/
protected void addFieldText(LabelType label, List texts) {
fieldTextMap.get(label.getName()).addAll(texts);
}
-
+
/**
* 用于清空字段的内容,以避免存储上一次输入的用例
*/
@@ -283,29 +297,28 @@ public abstract class Case {
fieldTextMap.get(key).clear();
});
}
-
- /**
- * 由于添加与参数相关的数据时需要将关联的字段(如步骤及结果)都添加至其中,
- * 若后期关联字段增加,则代码量将是成倍的增加,故将关联的内容提取出来,在
- * 外部进行添加,之后修改关联字段时只需修改该方法即可。若传入-1,则表示
- * 获取xml中该标签下的所有的信息
+
+ /**
+ * 由于添加与参数相关的数据时需要将关联的字段(如步骤及结果)都添加至其中, 若后期关联字段增加,则代码量将是成倍的增加,故将关联的内容提取出来,在
+ * 外部进行添加,之后修改关联字段时只需修改该方法即可。若传入-1,则表示 获取xml中该标签下的所有的信息
* 参数表:
*
* - 步骤
* - 预期
*
+ *
* @param caseName 读取的用例名称
- * @param ids id参数串
+ * @param ids id参数串
*/
- protected void relevanceAddData(String caseName, String...ids) {
- //添加步骤
+ protected void relevanceAddData(String caseName, String... ids) {
+ // 添加步骤
if (ids[0].equals(ALL)) {
addFieldText(LabelType.STEP, getAllLabelText(caseName, LabelType.STEP));
} else {
addFieldText(LabelType.STEP, getLabelText(caseName, LabelType.STEP, ids[0]));
}
-
- //添加预期
+
+ // 添加预期
if (ids[1].equals(ALL)) {
addFieldText(LabelType.EXCEPT, getAllLabelText(caseName, LabelType.EXCEPT));
} else {
From 4c647ad19261317f41f2ee6ee52b67a25a8c58c7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BD=AD=E5=AE=87=E7=90=A6?= <465645774@qq.com>
Date: Sat, 6 Feb 2021 19:24:35 +0800
Subject: [PATCH 4/8] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=81=97=E6=BC=8F?=
=?UTF-8?q?=E7=9A=84=E6=B3=A8=E9=87=8A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/main/java/com/auxiliary/selenium/event/AbstractEvent.java | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/main/java/com/auxiliary/selenium/event/AbstractEvent.java b/src/main/java/com/auxiliary/selenium/event/AbstractEvent.java
index 9e4f220..3eddf34 100644
--- a/src/main/java/com/auxiliary/selenium/event/AbstractEvent.java
+++ b/src/main/java/com/auxiliary/selenium/event/AbstractEvent.java
@@ -84,6 +84,10 @@ public abstract class AbstractEvent {
wait.withTimeout(Duration.ofSeconds(waitTime));
}
+ /**
+ * 用于设置是否将页面移至元素所在的位置
+ * @param isLocationElement 是否将页面移至元素所在的位置
+ */
public void setLocationElement(boolean isLocationElement) {
this.isLocationElement = isLocationElement;
}
From 5feb22981aeb0870c68e09d9f7c6fcdcf363ff42 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BD=AD=E5=AE=87=E7=90=A6?= <465645774@qq.com>
Date: Sat, 6 Feb 2021 19:42:55 +0800
Subject: [PATCH 5/8] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dxml=E5=BD=A2=E5=BC=8F?=
=?UTF-8?q?=E8=AF=BB=E5=8F=96=E7=AA=97=E4=BD=93=E5=85=83=E7=B4=A0=E6=97=B6?=
=?UTF-8?q?=E8=AF=BB=E5=8F=96=E9=94=99=E8=AF=AF=E7=9A=84=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 8 +--
.../selenium/location/XmlLocation.java | 51 ++++++++++---------
2 files changed, 28 insertions(+), 31 deletions(-)
diff --git a/pom.xml b/pom.xml
index 7aff44d..8a9ad31 100644
--- a/pom.xml
+++ b/pom.xml
@@ -55,13 +55,7 @@
3.17
-
-
+