From 95ef5bc5c3f264da1ef2c2f369650c9ea558ef9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E5=AE=87=E7=90=A6?= <465645774@qq.com> Date: Fri, 5 Feb 2021 08:15:21 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=AD=89=E5=BE=85?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E9=81=97=E6=BC=8F=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/WaitEvent.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/auxiliary/selenium/event/WaitEvent.java b/src/main/java/com/auxiliary/selenium/event/WaitEvent.java index e7e6b89..36477a2 100644 --- a/src/main/java/com/auxiliary/selenium/event/WaitEvent.java +++ b/src/main/java/com/auxiliary/selenium/event/WaitEvent.java @@ -115,6 +115,7 @@ public class WaitEvent extends AbstractEvent{ * 该方法用于等待指定元素中显示相应的文本,可指定显示文本的关键词,直到显示相应的关键词为止, * 若不传入关键词,则只判断元素加载出文本。若元素未出现,则返回false * @param element {@link Element}对象 + * @param keys 需要判断的文本 * @return 元素是否存在文本或包含指定文本 * @throws TimeoutException 等待超时时抛出的异常 */ From 25695b23205ba2ba701d697c23827b057bc48699 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:19:30 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=88=AA=E5=9B=BE?= =?UTF-8?q?=E6=97=B6=E8=B7=AF=E5=BE=84=E9=94=99=E8=AF=AF=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/auxiliary/selenium/tool/Screenshot.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/com/auxiliary/selenium/tool/Screenshot.java b/src/main/java/com/auxiliary/selenium/tool/Screenshot.java index fb5fc8a..136f792 100644 --- a/src/main/java/com/auxiliary/selenium/tool/Screenshot.java +++ b/src/main/java/com/auxiliary/selenium/tool/Screenshot.java @@ -101,10 +101,6 @@ public class Screenshot { * 该方法用于创建截图并保存到相应的路径下,通过指定的截图文件名称和类中存储的WebDriver对象、截图保存路径来创建截图 * * @param imageName 指定的截图文件名 - * @throws IOException 文件流状态不正确时抛出的异常 - * @throws WebDriverException WebDriver引用错误时抛出的异常 - * @throws NullPointerException WebDriver为空时抛出的异常 - * @throws UndefinedDirectoryException 截图保存路径或截图名称为指定时抛出的异常 */ public synchronized File creatImage(String imageName) { // 调用无参方法 @@ -150,7 +146,7 @@ public class Screenshot { } //判断是否传入文件名,若未传入文件名,则指定当前时间戳为文件名 - File imageFile = new File(savePathFolder + Optional.ofNullable(fileName).filter(text -> !text.isEmpty()) + File imageFile = new File(savePathFolder + "/" + Optional.ofNullable(fileName).filter(text -> !text.isEmpty()) .orElse(String.valueOf(Time.parse().getMilliSecond())) + ".png"); // 截图,并将得到的截图转移到指定的目录下 From 1f951c339092e3d113329b38f8bce6708b9c2412 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:01 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E5=8D=87=E7=BA=A7dom4j?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 9 +- .../com/auxiliary/testcase/templet/Case.java | 221 +++++++++--------- 2 files changed, 125 insertions(+), 105 deletions(-) diff --git a/pom.xml b/pom.xml index 32528a8..7aff44d 100644 --- a/pom.xml +++ b/pom.xml @@ -55,12 +55,19 @@ 3.17 - + + + + org.dom4j + dom4j + 2.1.3 + 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中该标签下的所有的信息
* 参数表: *
    *
  1. 步骤
  2. *
  3. 预期
  4. *
+ * * @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
- - + org.dom4j dom4j diff --git a/src/main/java/com/auxiliary/selenium/location/XmlLocation.java b/src/main/java/com/auxiliary/selenium/location/XmlLocation.java index be4e3d9..b16935f 100644 --- a/src/main/java/com/auxiliary/selenium/location/XmlLocation.java +++ b/src/main/java/com/auxiliary/selenium/location/XmlLocation.java @@ -59,7 +59,7 @@ public class XmlLocation extends AbstractLocation { try { dom = new SAXReader().read(xmlFile); } catch (DocumentException e) { - throw new IncorrectFileException("xml文件异常,文件位置:" + xmlFile.getAbsolutePath()); + throw new IncorrectFileException("xml文件异常,文件位置:" + xmlFile.getAbsolutePath(), e); } } @@ -76,12 +76,9 @@ public class XmlLocation extends AbstractLocation { public ArrayList findElementByTypeList(String name) { ArrayList byTypeList = new ArrayList(); //查询并存储元素下的子元素 - @SuppressWarnings("unchecked") - ArrayList lableElementList = new ArrayList<>(getElementLabelElement(name).elements()); + ArrayList lableElementList = new ArrayList<>(getElementLabelElement(name).elements()); lableElementList.stream() - //强转为Element类型 - .map(lable -> (Element)lable) //获取标签名称 .map(lable -> lable.getName()) //将名称转换为ByType枚举 @@ -90,7 +87,6 @@ public class XmlLocation extends AbstractLocation { .filter(lable -> lable != null) //存储标签 .forEach(byTypeList::add); - ; return byTypeList; } @@ -98,25 +94,32 @@ public class XmlLocation extends AbstractLocation { @Override public ArrayList findValueList(String name) { ArrayList valueList = new ArrayList<>(); - //查询元素 - Element element = getElementLabelElement(name); - //遍历元素下所有的定位标签,并将其转换为相应的ByType枚举,存储至byTypeList中 - for (Object byElement : element.elements()) { - //判断元素是否启用,若元素未启用,则下一个循环 - String isUserText = ((Element) byElement).attributeValue("is_user"); - if (isUserText != null && !Boolean.valueOf(isUserText)) { - continue; - } - - //判断元素是否启用模板,若启用模板,则获取模板内容,并将定位内容进行转换 - String tempId = ((Element) byElement).attributeValue("temp_id"); - String value = tempId != null ? - getTemplateValue(tempId, toByType(((Element) byElement).getName())) : - ((Element)byElement).getText(); - - valueList.add(replaceValue(((Element) byElement), value)); - } + //查询元素,遍历元素下所有的定位标签,并过滤掉元素标签 + getElementLabelElement(name).elements().stream().filter(ele -> !"element".equals(ele.getName())) + //过滤不启用的标签 + .filter(ele -> { + return Optional.ofNullable(ele.attributeValue("is_user")) + .filter(t -> !t.isEmpty()) + .map(t -> { + try { + return Boolean.valueOf(t).booleanValue(); + } catch (Exception e) { + return true; + } + }).orElse(true); + //根据值或模板,将定位内容转译,并存储至valueList + }).forEach(ele -> { + String value = ""; + String tempId = Optional.ofNullable(ele.attributeValue("temp_id")).orElse(""); + if (tempId.isEmpty()) { + value = ele.getText(); + } else { + value = getTemplateValue(tempId, toByType(ele.getName())); + } + + valueList.add(replaceValue(ele, value)); + }); return valueList; } From 470b7f217bfc890403e0419cdb038b155b9caeeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E5=AE=87=E7=90=A6?= <465645774@qq.com> Date: Thu, 18 Feb 2021 07:51:47 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A0=E6=95=88?= =?UTF-8?q?=E7=9A=84=E6=A0=87=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/auxiliary/tool/file/excel/AbstractWriteExcel.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/main/java/com/auxiliary/tool/file/excel/AbstractWriteExcel.java b/src/main/java/com/auxiliary/tool/file/excel/AbstractWriteExcel.java index e746967..211d48a 100644 --- a/src/main/java/com/auxiliary/tool/file/excel/AbstractWriteExcel.java +++ b/src/main/java/com/auxiliary/tool/file/excel/AbstractWriteExcel.java @@ -465,7 +465,6 @@ public abstract class AbstractWriteExcel> { * @throws IOException 流异常时抛出的异常 * @throws IncorrectFileException 当模板文件内容异常时抛出的异常 */ - @SuppressWarnings("unchecked") public void writeFile() throws IOException { // 定义输入流,用于读取模版文件 FileInputStream fip = new FileInputStream(tempFile); @@ -507,7 +506,6 @@ public abstract class AbstractWriteExcel> { * @param caseElement case标签对应的elemenet对象 * @return 当前行号 */ - @SuppressWarnings("unchecked") private void writeContent(int index, XSSFSheet xs, Element caseElement) { // 获取字段元素,需要获取配置xml文件中的以及用例xml文件中的字段 List fieldElements = caseElement.elements("field"); @@ -804,7 +802,6 @@ public abstract class AbstractWriteExcel> { * * @param sheetName sheet的name属性 */ - @SuppressWarnings("unchecked") private void getAllColumnId() { // 清空fieldMap中的内容 // fieldMap.clear(); @@ -1148,7 +1145,6 @@ public abstract class AbstractWriteExcel> { * @param content 标记中记录的内容 * @return 类本身 */ - @SuppressWarnings("unchecked") public FieldMark fieldComment(String sheetName, String field, String content) { // 查找nowSheetName指向的sheet中的与uuid一致的单元格 Element caseElement = getCaseElement(sheetName); @@ -1183,7 +1179,6 @@ public abstract class AbstractWriteExcel> { * @param markColorsType {@link MarkColorsType}类枚举 * @return 类本身 */ - @SuppressWarnings("unchecked") public FieldMark changeFieldBackground(String sheetName, String field, MarkColorsType markColorsType) { // 查找nowSheetName指向的sheet中的与uuid一致的单元格 Element caseElement = getCaseElement(sheetName); @@ -1216,7 +1211,6 @@ public abstract class AbstractWriteExcel> { * @param markColorsType {@link MarkColorsType}类枚举 * @return 类本身 */ - @SuppressWarnings("unchecked") public FieldMark changeRowBackground(String sheetName, MarkColorsType markColorsType) { // 查找nowSheetName指向的sheet中的与uuid一致的单元格 Element caseElement = getCaseElement(sheetName); @@ -1244,7 +1238,6 @@ public abstract class AbstractWriteExcel> { * @param markColorsType {@link MarkColorsType}类枚举 * @return 类本身 */ - @SuppressWarnings("unchecked") public FieldMark changeRowTextColor(String sheetName, MarkColorsType markColorsType) { // 查找nowSheetName指向的sheet中的与uuid一致的单元格 Element caseElement = getCaseElement(sheetName); @@ -1310,7 +1303,6 @@ public abstract class AbstractWriteExcel> { * @param markColorsType {@link MarkColorsType}类枚举 * @return 类本身 */ - @SuppressWarnings("unchecked") public FieldMark changeTextColor(String sheetName, String field, int startIndex, int endIndex, MarkColorsType markColorsType) { // 查找nowSheetName指向的sheet中的与uuid一致的单元格 From a77ab169ce9aabba351322aa0920fcbbe205620b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E5=AE=87=E7=90=A6?= <465645774@qq.com> Date: Thu, 18 Feb 2021 07:52:23 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A0=E6=95=88?= =?UTF-8?q?=E7=9A=84=E6=A0=87=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/auxiliary/tool/file/excel/CreateExcelFile.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/com/auxiliary/tool/file/excel/CreateExcelFile.java b/src/main/java/com/auxiliary/tool/file/excel/CreateExcelFile.java index 7ab7103..8db8955 100644 --- a/src/main/java/com/auxiliary/tool/file/excel/CreateExcelFile.java +++ b/src/main/java/com/auxiliary/tool/file/excel/CreateExcelFile.java @@ -239,7 +239,6 @@ public class CreateExcelFile { * * @param xw 指向excel文件对象 */ - @SuppressWarnings("unchecked") private void createDataValidation(XSSFWorkbook xw) { // 读取所有sheet标签 List xmlSheetList = xml.getRootElement().elements("sheet"); @@ -336,7 +335,6 @@ public class CreateExcelFile { * @param rowIndex * @param columnIndex */ - @SuppressWarnings("unchecked") private void writeDataValidity(Element datasElement, XSSFSheet dataSheet, int rowIndex, int columnIndex) { // 添加数据,获取相应datas下的所有data标签 List dataElementList = datasElement.elements(); From 3b1222eddc413af0b09ba1c19003d6d9b431d10c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E5=AE=87=E7=90=A6?= <465645774@qq.com> Date: Thu, 18 Feb 2021 16:54:53 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=85=83=E7=B4=A0?= =?UTF-8?q?=E6=9F=A5=E6=89=BE=E8=BD=AE=E8=AF=A2=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../selenium/element/FindElement.java | 53 ++++++++++--------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/auxiliary/selenium/element/FindElement.java b/src/main/java/com/auxiliary/selenium/element/FindElement.java index e7b5268..8612842 100644 --- a/src/main/java/com/auxiliary/selenium/element/FindElement.java +++ b/src/main/java/com/auxiliary/selenium/element/FindElement.java @@ -265,20 +265,13 @@ public abstract class FindElement { ArrayList elementByTypeList = elementData.getByTypeList(); ArrayList elementValueList = elementData.getValueList(); - //获取两个列表长度的最小者 - int minLength = Math.min(elementByTypeList.size(), elementValueList.size()); - //循环,遍历所有的定位方式,使用根据定位方式,判断页面是否存在定位方式指向的元素 - for (int index = 0; index < minLength; index++) { - //根据当前元素信息,在页面获取元素 - List elementList = findElement(elementByTypeList.get(index), - elementValueList.get(index), - elementData.getWaitTime() == -1 ? globalWaitTime : elementData.getWaitTime()); - - //若获取到的元素列表为空,则继续循环,调用下一个定位方式 - if (elementList.size() != 0) { - return elementList; - } - } + List elementList = findElement(elementByTypeList, elementValueList, + elementData.getWaitTime() == -1 ? globalWaitTime : elementData.getWaitTime()); + + //若获取到的元素列表为空,则继续循环,调用下一个定位方式 + if (elementList.size() != 0) { + return elementList; + } throw new TimeoutException("页面上无相应定位方式的元素,元素名称:" + elementData.getName()); } @@ -286,25 +279,35 @@ public abstract class FindElement { /** * 根据传入的定位方式枚举,以及定位内容,在页面查找 * 元素,返回查到的元素列表,若查不到元素,则返回空列表 - * @param byType {@link ByType}枚举类 - * @param value 元素定位内容 + * @param byTypeList {@link ByType}枚举类集合 + * @param valueList 元素定位内容集合 * @param waitTime 元素查找超时时间 * @return 页面查找到的{@link WebElement}类对象{@link List}集合 */ - protected List findElement(ByType byType, String value, long waitTime) { + protected List findElement(List byTypeList, List valueList, long waitTime) { try { return new WebDriverWait(brower.getDriver(), waitTime, 200) .until(driver -> { - try { - List webElementList = driver.findElements(getBy(value, byType)); - if (webElementList != null && webElementList.size() != 0) { - return webElementList; - } else { - return null; + int minLength = Math.min(byTypeList.size(), valueList.size()); + //遍历所有的定位方式与定位内容 + for (int i = 0; i < minLength; i++) { + try { + //页面查找元素 + List webElementList = driver.findElements(getBy(valueList.get(i), byTypeList.get(i))); + //若元素组为空或者获取的元素为空,则重新循环;反之,则返回找到元素 + if (webElementList != null && webElementList.size() != 0) { + return webElementList; + } else { + continue; + } + } catch (Exception e) { + //若抛出异常,则重新循环 + continue; } - } catch (Exception e) { - return null; } + + //若循环完毕仍未找到元素,则返回null + return null; }); } catch (TimeoutException e) { return new ArrayList();