diff --git a/pom.xml b/pom.xml
index 0ef5339..d975084 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,30 +1,21 @@
- 文件名:IncorrectConditionException.java
* 文件名:Time.java
diff --git a/src/main/java/pres/auxiliary/tool/file/ExcelConfigXmlTool.java b/src/main/java/pres/auxiliary/tool/file/ExcelConfigXmlTool.java
index 52cff1a..fb0bfd9 100644
--- a/src/main/java/pres/auxiliary/tool/file/ExcelConfigXmlTool.java
+++ b/src/main/java/pres/auxiliary/tool/file/ExcelConfigXmlTool.java
@@ -5,7 +5,6 @@ import java.io.FileWriter;
import java.io.IOException;
import org.dom4j.Document;
-import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
@@ -61,12 +60,4 @@ public class ExcelConfigXmlTool {
writer.write(document);
writer.close();
}
-
- private void root() {
- document.setRootElement(document.addElement("templet"));
- }
-
- private void sheet(String name, String freeze) {
- Element root = document.getRootElement();
- }
}
diff --git a/src/main/java/pres/auxiliary/tool/web/Condition.java b/src/main/java/pres/auxiliary/tool/web/Condition.java
deleted file mode 100644
index 61d27b3..0000000
--- a/src/main/java/pres/auxiliary/tool/web/Condition.java
+++ /dev/null
@@ -1,506 +0,0 @@
-package pres.auxiliary.tool.web;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.regex.Pattern;
-
-import org.openqa.selenium.WebDriver;
-
-/**
- *
- * 文件名:Condition.java
- *
- * 用途:用于页面统计中记录需要读取的列的定位方式 ,以及其统计的约束条件,并提供数据对比方法
- * 注意:
- *
- *
- *
- * 编码时间:2019年7月28日下午2:13:59 - *
- *- * 修改时间:2019年7月31日下午7:03:59 - *
- * - * @author 彭宇琦 - * @version Ver1.0 - * @since JDK 1.8 - * - */ -public class Condition { - - /** - * 用于存储元素定位方式 - */ - private String element; - /** - * 用于存储约束条件,当约束的类型为数字和日期时,此时存储的数据将是前后值是否允许包含的条件 - */ - private ArrayList文件名:ConstraintType.java
- *用途:用于定义约束条件的类型
- *编码时间:2019年7月28日下午2:24:40
- *修改时间:2019年7月28日下午2:24:40
- * @author 彭宇琦 - * @version Ver1.0 - * @since JDK 1.8 - * - */ -public enum ConstraintType { - /** - * 字符串类型 - */ - STRING, - /** - * 日期类型 - */ - DATE, - /** - * 数字类型 - */ - NUMBER -} diff --git a/src/main/java/pres/auxiliary/tool/web/IncorrectFileException.java b/src/main/java/pres/auxiliary/tool/web/IncorrectFileException.java deleted file mode 100644 index 6773ed9..0000000 --- a/src/main/java/pres/auxiliary/tool/web/IncorrectFileException.java +++ /dev/null @@ -1,43 +0,0 @@ -package pres.auxiliary.tool.web; - -/** - *文件名:IncorrectFileException.java
- *用途:用于读取的文件与相应的代码不匹配时弹出的异常
- *编码时间:2019年8月2日下午5:33:01
- *修改时间:2019年8月2日下午5:33:01
- * @author 彭宇琦 - * @version Ver1.0 - * @since JDK 1.8 - * - */ -public class IncorrectFileException extends RuntimeException { - - private static final long serialVersionUID = -5513588664798256321L; - - public IncorrectFileException() { - super(); - // TODO Auto-generated constructor stub - } - - public IncorrectFileException(String message, Throwable cause, boolean enableSuppression, - boolean writableStackTrace) { - super(message, cause, enableSuppression, writableStackTrace); - // TODO Auto-generated constructor stub - } - - public IncorrectFileException(String message, Throwable cause) { - super(message, cause); - // TODO Auto-generated constructor stub - } - - public IncorrectFileException(String message) { - super(message); - // TODO Auto-generated constructor stub - } - - public IncorrectFileException(Throwable cause) { - super(cause); - // TODO Auto-generated constructor stub - } - -} diff --git a/src/main/java/pres/auxiliary/tool/web/WebDataCompare.java b/src/main/java/pres/auxiliary/tool/web/WebDataCompare.java deleted file mode 100644 index 20362e7..0000000 --- a/src/main/java/pres/auxiliary/tool/web/WebDataCompare.java +++ /dev/null @@ -1,305 +0,0 @@ -package pres.auxiliary.tool.web; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.util.LinkedHashMap; - -import org.apache.poi.ss.usermodel.VerticalAlignment; -import org.apache.poi.ss.util.CellRangeAddress; -import org.apache.poi.xssf.usermodel.XSSFCellStyle; -import org.apache.poi.xssf.usermodel.XSSFRow; -import org.apache.poi.xssf.usermodel.XSSFSheet; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.openqa.selenium.WebDriver; - -/** - *- * 文件名:WebDataCompare.java - *
- *- * 用途:用于对页面数据的操作工具 - *
- *- * 编码时间:2019年8月2日上午9:45:00 - *
- *- * 修改时间:2019年8月3日上午10:42:00 - *
- * - * @author 彭宇琦 - * @version Ver1.0 - * @since JDK 1.8 - * - */ -public class WebDataCompare { - /** - * 定义文件中的换行符 - */ - private static final String FILE_LINK = "\r\n"; - - /** - * 存储用户传入的WebDriver对象,当为null时,则使用默认的WebDriver对象,若用户定义时,则使用定义的WebDriver对象 - */ - private static WebDriver driver = null; - - /** - * 该方法用于设置WebDriver对象 - * @param driver WebDriver对象 - */ - public static void setWebDriver(WebDriver driver) { - WebDataCompare.driver = driver; - } - - /** - * 该方法用于统计页面数据,根据数据的约束条件进行数据的组合统计,并将统计存储指定的excel文件中 - * - * @param folder 文件保存的文件夹 - * @param fileName 文件名 - * @param conditions 条件类对象组 - * @param iframes 需要定位到列表所在的窗体 - * @return 统计结果文件 - * @throws IOException - */ - public static File statisData(File folder, String fileName, Condition[] conditions, String... iframes) - throws IOException { - Event event = null; - if (driver == null) { - // 构造事件类对象 - event = Event.newInstance(new ChromeBrower("resource/BrowserDriver/chromedriver.exe", 9222).getDriver()); - // 循环,添加所有的iframe - for (String iframe : iframes) { - event.switchFrame(iframe); - } - } else { - event = Event.newInstance(driver); - } - - // 定义map对象,用于记录列表数据 - LinkedHashMap文件名:WebDataToFile.java
- *用途:用于从页面爬取数据以文本的形式存储至本地的工具
- *编码时间:2019年7月19日下午5:04:20
- *修改时间:2019年7月20日下午6:17:20
- * @author 彭宇琦 - * @version Ver1.0 - * @since JDK 1.8 - * - */ -public class WebDataToFile { - /** - * 定义元素行间的分隔方式 - */ - private static final String LINE = "\n"; - - /** - * 该方法可用于获取页面的数据,并以docx的文件形式进行存储 - * @param folder 生成的文件存放位置 - * @param fileName 生成的文件名 - * @param element 需要获取文本的元素 - * @param iframes 定位到元素前所需进入的iframe - * @return 返回生成的文件对象 - * @throws IOException - */ - public static File webTextDataToFile(File folder, String fileName, String element, String... iframes) throws IOException { - //定义浏览器对象,该对象暂时定义为已开启的浏览器对象 - Event event = Event.newInstance(new ChromeBrower("resource/BrowserDriver/chromedriver.exe", 9222).getDriver()); - - //循环,添加所有的框架 - for (String iframe : iframes) { - event.switchFrame(iframe); - } - - //获取页面数据 - String text = event.getTextEvent().getText(element).getStringValve().trim(); - - //返回生成的文件的文件对象 - return writeData(folder, fileName, text, false); - } - - /** - * 该方法可用于获取页面列表上的一页数据,并以xlsx的文件形式进行存储 - * @param folder 生成的文件存放位置 - * @param fileName 生成的文件名 - * @param title 列表的标题 - * @param element 元素的定位方式 - * @param iframes 定位到元素前所需进入的iframe - * @return 返回生成的文件对象 - * @throws IOException - */ - public static File webListDataToFile(File folder, String fileName, String title, String element, String... iframes) throws IOException { - //定义事件类,用于定位iframe - Event event = Event.newInstance(new ChromeBrower("resource/BrowserDriver/chromedriver.exe", 9222).getDriver()); - - //循环,添加所有的框架 - for (String iframe : iframes) { - event.switchFrame(iframe); - } - - //定义列表元素操作类对象 - DataListEvent listEvent = new DataListEvent(event.getDriver()); - //存储从页面上获取到的元素,并存储传入的标题 - String text = title + LINE; - - //获取页面列表数据 - listEvent.add(element); - //循环,将获取到的文本存储至text中 - for(ListEvent e : listEvent.getEvents(element)) { - text += (e.getText().getStringValve() + LINE); - } - - //返回生成的文件的文件对象 - return writeData(folder, fileName, text, true); - } - - /** - * 该方法用于将数据写入相应的文件中 - * @param targeFile 目标文件对象 - * @param text 需要写入文件的文本 - * @param list 定义写入数据的方式是否为列表 - * @return 生成的文件对象 - * @throws IOException - */ - private static File writeData(File folder, String fileName, String text, boolean list) throws IOException { - //创建文件夹 - folder.mkdirs(); - File targeFile = null; - - //判断写入数据的方式是否为列表,为列表,则按照excel形式存储,为文本则按照docx形式存储 - if (list) { - //定义需要存储的目标文件 - targeFile = new File(folder + "\\" + fileName + ".xlsx"); - //打开文件夹 - java.awt.Desktop.getDesktop().open(folder); - return writeXlsx(targeFile, text); - } else { - //定义需要存储的目标文件 - targeFile = new File(folder + "\\" + fileName + ".docx"); - //打开文件夹 - java.awt.Desktop.getDesktop().open(folder); - return writeDocx(targeFile, text); - } - } - - /** - * 用于对docx文本的写入 - * @param targeFile 目标文件 - * @param text 文本 - * @return 生成的文件对象 - * @throws IOException - */ - private static File writeDocx(File targeFile, String text) throws IOException { - //定义docx操作类对象,若文件存在则续写,文件不存在则新写 - XWPFDocument docx = null; - if (targeFile.exists()) { - docx = new XWPFDocument(new FileInputStream(targeFile)); - } else { - docx = new XWPFDocument(); - } - - //创建新的段落,并写入text中的内容 - docx.createParagraph().createRun().setText(text); - docx.write(new FileOutputStream(targeFile)); - docx.close(); - - return targeFile; - } - - /** - * 用于对xlsx文本的写入 - * @param targeFile 目标文件 - * @param text 文本 - * @return 生成的文件 - */ - private static File writeXlsx(File targeFile, String text) throws IOException { - //切割内容,便于后续的存储 - String[] texts = text.split("\\n"); - - //定义xlsx操作类对象,若文件存在则续写,文件不存在则新写 - XSSFWorkbook xlsx = null; - XSSFSheet sheet = null; - //定义需要写入文件中的行和列,用于指向文本内容在文件中的某列的某行写入 - int row = 0; - int cell = 0; - //定义循环时需要从texts的哪一个元素开始循环读取 - int i = 0; - if (targeFile.exists()) { - xlsx = new XSSFWorkbook(new FileInputStream(targeFile)); - sheet = xlsx.getSheetAt(0); - - //获取文件的标题,用于判断该标题是否存在于文件中 - String title = texts[0].trim(); - //循环,读取文件中标题行的所有列,以对比标题是否存在 - for (; cell < sheet.getRow(0).getLastCellNum(); cell++) { - //对比标题是否存在,若存在,则结束循环,则可以得到cell的值 - if (sheet.getRow(0).getCell(cell).toString().equals(title)) { - break; - } - - } - - //判断当前需要写入的列是否为最后一列,若为不为最后一列,则不需要记录标题列,其i值设为1,表示从texts的第二个元素读取 - //并记录从哪一行开始写入数据 - if (cell != sheet.getRow(0).getLastCellNum()) { - i = 1; - //循环,判断当前的应从当前列的哪一行开始写入数据 - //需要注意的是,此处去sheet中的最大行数作为循环结束的标志,这是因为文本中最长的列为sheet.getLastRowNum(),若该列的数据 - //相较sheet.getLastRowNum()短时则直接结束循环,其结束的row + 1便是可写入数据的行 - for (; row < sheet.getLastRowNum(); row++) { - if (sheet.getRow(row).getCell(cell) == null) { - row--; - break; - } - } - System.out.println(row); - - row++; - } - } else { - //由于文件不存在,则不需要计算任何的循环值(row、cell、i都为0) - xlsx = new XSSFWorkbook(); - sheet = xlsx.createSheet(); - } - - //写入数据 - for (; i < texts.length; i++, row++) { - XSSFRow xr = null; - //判断当前行是否存在,存在则不创新创建,以免清空之前的数据 - if ((xr = sheet.getRow(row)) == null) { - xr = sheet.createRow(row); - } - xr.createCell(cell).setCellValue(texts[i]); - } - - xlsx.write(new FileOutputStream(targeFile)); - xlsx.close(); - - return targeFile; - } -} diff --git a/src/main/java/pres/auxiliary/work/selenium/event/extend/DataTableEvent.java b/src/main/java/pres/auxiliary/work/selenium/event/extend/DataTableEvent.java index 66537c6..377b811 100644 --- a/src/main/java/pres/auxiliary/work/selenium/event/extend/DataTableEvent.java +++ b/src/main/java/pres/auxiliary/work/selenium/event/extend/DataTableEvent.java @@ -21,12 +21,19 @@ import pres.auxiliary.work.selenium.event.TextEvent; import pres.auxiliary.work.selenium.event.WaitEvent; /** - *文件名:OperateDataTable.java
- *用途: - * 提供对数据表格进行基本操作的事件,包括对数据列表的翻页、跳页、获取等操作,以简化部分操作的代码 + *
+ * 文件名:OperateDataTable.java *
- *编码时间:2020年11月17日上午7:58:40
- *修改时间:2020年11月17日上午7:58:40
+ *+ * 用途: 提供对数据表格进行基本操作的事件,包括对数据列表的翻页、跳页、获取等操作,以简化部分操作的代码 + *
+ *+ * 编码时间:2020年11月17日上午7:58:40 + *
+ *+ * 修改时间:2020年11月17日上午7:58:40 + *
+ * * @author 彭宇琦 * @version Ver1.0 * @since JDK 1.8 @@ -49,7 +56,7 @@ public final class DataTableEvent extends AbstractEvent { * 用于进行等待事件 */ private WaitEvent waitEvent; - + /** * 用于存储当前的列表的一列元素 */ @@ -63,17 +70,17 @@ public final class DataTableEvent extends AbstractEvent { * 指向列表加载等待控件 */ private Element waitElement; - + /** * 用于存储当前列表的长度 */ protected int listSize = -1; - + /** * 标记是否进行元素个数长度校验 */ protected boolean isExamine = true; - + /** * 构造对象 * @@ -81,24 +88,26 @@ public final class DataTableEvent extends AbstractEvent { */ public DataTableEvent(AbstractBrower brower) { super(brower); - + clickEvent = new ClickEvent(brower); textEvent = new TextEvent(brower); assertEvent = new AssertEvent(brower); waitEvent = new WaitEvent(brower); } - + /** * 用于设置是否对传入的元素列表的个数进行严格校验,即在调用{@link #add(DataListBy)}方法时, * 若元素个数与初次传入的个数不符且需要严格校验,则抛出异常;反之,则直接进行存储 + * * @param isExamine 是否严格校验元素个数 */ public void setExamine(boolean isExamine) { this.isExamine = isExamine; } - + /** * 用于设置列表加载等待元素,通过该元素,将应用与列表操作后,等待该控件消失后再进行断言的操作 + * * @param waitElement 列表加载等待控件 */ public void setWaitElement(Element waitElement) { @@ -108,64 +117,70 @@ public final class DataTableEvent extends AbstractEvent { /** * 用于添加一列元素,若启用严格校验(即通过{@link #setExamine(boolean)}方法设置为true), * 则调用该方法时将对存储的数据个数进行校验,若传入的列元素个数与当前存储的列表元素个数 - * 不一致时,则抛出{@link InvalidDataListException}异常 + * 不一致时,则抛出{@link InvalidDataListException}异常。 * *- * 注意:传入的{@link DataListBy}类对象中元素的名称请勿与其他元素名称一致,否则会 - * 覆盖原有的元素列 + * 注意:传入的{@link DataListBy}类对象中元素的名称请勿与其他元素名称一致,否则会覆盖原有的元素列。 + * 其元素名称将作为列表名称,可通过该名称获取当前列 *
* * @param dataListBy 元素列查找对象 * @throws InvalidDataListException 启用严格校验且元素个数与存储列表元素个数不一致时抛出的异常 */ public void addList(DataListBy dataListBy) { - //判断当前是否存储元素,若未存储元素,则不进行元素个数判断 + // 判断当前是否存储元素,若未存储元素,则不进行元素个数判断 if (!tableMap.isEmpty()) { - //判断传入的列的元素个数是否与当前存储的元素个数一致,若不一致,则进行个数判定校验 + // 判断传入的列的元素个数是否与当前存储的元素个数一致,若不一致,则进行个数判定校验 int nowSize = dataListBy.size(); if (nowSize != listSize()) { - //若当前需要严格校验列表元素个数,则抛出异常 + // 若当前需要严格校验列表元素个数,则抛出异常 if (isExamine) { - throw new InvalidDataListException("当前传入的元素列个数与存储的元素列个数不一致!" - + "(当前元素列个数:" + listSize() + ",传入的元素列元素个数:" + nowSize + ")"); + throw new InvalidDataListException( + "当前传入的元素列个数与存储的元素列个数不一致!" + "(当前元素列个数:" + listSize() + ",传入的元素列元素个数:" + nowSize + ")"); } else { - //若无需校验元素个数,则判断传入的元素个数与存储的元素列个数,存储较小的数字 + // 若无需校验元素个数,则判断传入的元素个数与存储的元素列个数,存储较小的数字 listSize = listSize < nowSize ? listSize : nowSize; } } - + } else { listSize = dataListBy.size(); } - + tableMap.put(dataListBy.getElementData().getName(), dataListBy.getAllElement()); } - + /** * 用于添加列表控件的枚举,在调用部分列表操作方法时会使用在此处添加的映射 + * * @param dataTableKeywordType 列表可映射的控件枚举{@link DataTableKeywordType} - * @param by 控件相应的元素对象{@link Element} + * @param by 控件相应的元素对象{@link Element} */ public void putControl(DataTableKeywordType dataTableKeywordType, Element elemenet) { controlMap.put(dataTableKeywordType, elemenet); } - + /** - * 返回元素列中元素的个数,若设置了严格判断,则该数值为所有列的元素个数;反之,则该 - * 数值表示列表集合中,最短元素列的元素个数 + * 返回元素列中元素的个数,若设置了严格判断,则该数值为所有列的元素个数;反之,则该 数值表示列表集合中,最短元素列的元素个数 * * @return 元素列的元素个数 */ public int listSize() { return listSize; } - + + /** + * 获取列表名称指向列的元素个数 + * @param name 列表名称 + * @return 指向的列表元素个数 + */ public int listSize(String name) { return tableMap.get(name).size(); } - + /** * 用于返回元素表中的列数 + * * @return */ public int rowSize() { @@ -173,57 +188,58 @@ public final class DataTableEvent extends AbstractEvent { } /** - * 用于点击多次上一页按钮,并返回实际点击次数(实际点击次数)。若设置的翻页次数小于0 - * ,则持续翻页至无法翻页为止 + * 用于点击多次上一页按钮,并返回实际点击次数(实际点击次数)。若设置的翻页次数小于0 ,则持续翻页至无法翻页为止 + * * @param count 点击次数 * @return 实际点击次数 */ public int previousPage(int count) { return pageTurning(DataTableKeywordType.PREVIOUS_PAGE_BUTTON, count); } - + /** - * 用于点击多次下一页按钮,并返回实际点击次数(实际点击次数)。若设置的翻页次数小于0 - * ,则持续翻页至无法翻页为止 + * 用于点击多次下一页按钮,并返回实际点击次数(实际点击次数)。若设置的翻页次数小于0 ,则持续翻页至无法翻页为止 + * * @param count 点击次数 * @return 实际点击次数 */ public int nextPage(int count) { return pageTurning(DataTableKeywordType.NEXT_PAGE_BUTTON, count); } - + /** * 用于对列表进行翻页操作 + * * @param dataTableKeywordType 翻页按钮类型 - * @param count 指定的翻页次数 + * @param count 指定的翻页次数 * @return 实际翻页次数 */ private int pageTurning(DataTableKeywordType dataTableKeywordType, int count) { - //判断当前按钮是否存在映射 + // 判断当前按钮是否存在映射 if (!controlMap.containsKey(dataTableKeywordType)) { throw new ControlException(dataTableKeywordType.getName(), dataTableKeywordType.toString()); } - - //根据设置的点击次数循环点击翻页按钮 + + // 根据设置的点击次数循环点击翻页按钮 int nowCount = 0; - while(true) { - //判断翻页数,若当前翻页数大于指定翻页数时,则结束循环 - //若指定的翻页数小于0,则持续翻页,直到翻页失败为止 + while (true) { + // 判断翻页数,若当前翻页数大于指定翻页数时,则结束循环 + // 若指定的翻页数小于0,则持续翻页,直到翻页失败为止 if (nowCount >= count && count >= 0) { break; } - + Element controlElement = controlMap.get(dataTableKeywordType); - - boolean result = assertData(() -> { - //判断按钮是否可以点击 + + boolean result = assertData(() -> { + // 判断按钮是否可以点击 if (!controlElement.getWebElement().isEnabled()) { return false; } - + try { clickEvent.click(controlElement); - //等待控件消失 + // 等待控件消失 if (waitElement != null) { waitEvent.disappear(waitElement); } @@ -232,120 +248,117 @@ public final class DataTableEvent extends AbstractEvent { return false; } }); - - //若点击成功,则nowCount自增,若点击失败,则退出循环 + + // 若点击成功,则nowCount自增,若点击失败,则退出循环 if (!result) { break; } - + nowCount++; } - - logText = "点击“" - + controlMap.get(DataTableKeywordType.PREVIOUS_PAGE_BUTTON).getElementData().getName() - + "”元素,使列表返回至" - + (dataTableKeywordType == DataTableKeywordType.PREVIOUS_PAGE_BUTTON ? "上" : "下") + + logText = "点击“" + controlMap.get(DataTableKeywordType.PREVIOUS_PAGE_BUTTON).getElementData().getName() + + "”元素,使列表返回至" + (dataTableKeywordType == DataTableKeywordType.PREVIOUS_PAGE_BUTTON ? "上" : "下") + "页,其实际翻页数为:" + nowCount; resultText = String.valueOf(nowCount); - - //返回实际点击次数 + + // 返回实际点击次数 return nowCount; - } - + } + /** * 用于对列表进行点击跳页按钮后的跳页操作。若当前存储过元素列表,则对元素列表进行断言, * 即取存储的列表的第一行元素,若操作前后,该行元素不变,则判定为跳页失败 * - * @param pageTextbox 跳页文本框元素 + * @param pageTextbox 跳页文本框元素 * @param jumpPageButton 跳页按钮 - * @param pageCountText 页码文本 + * @param pageCountText 页码文本 */ public boolean jumpPage(String pageCount) { if (!controlMap.containsKey(DataTableKeywordType.PAGE_INPUT_TEXTBOX)) { - throw new ControlException(DataTableKeywordType.PAGE_INPUT_TEXTBOX.getName() - , DataTableKeywordType.PAGE_INPUT_TEXTBOX.toString()); + throw new ControlException(DataTableKeywordType.PAGE_INPUT_TEXTBOX.getName(), + DataTableKeywordType.PAGE_INPUT_TEXTBOX.toString()); } - + boolean result = assertData(() -> { - //输入页码 + // 输入页码 textEvent.input(controlMap.get(DataTableKeywordType.PAGE_INPUT_TEXTBOX), pageCount); - //判断是否存在跳页按钮的映射,若不存在,则使用回车进行跳页 + // 判断是否存在跳页按钮的映射,若不存在,则使用回车进行跳页 if (controlMap.containsKey(DataTableKeywordType.JUMP_PAGE_BUTTON)) { - //点击跳页 + // 点击跳页 clickEvent.click(controlMap.get(DataTableKeywordType.JUMP_PAGE_BUTTON)); } else { textEvent.keyToSend(controlMap.get(DataTableKeywordType.PAGE_INPUT_TEXTBOX), Keys.ENTER); } - - //清空输入框 + + // 清空输入框 textEvent.clear(controlMap.get(DataTableKeywordType.PAGE_INPUT_TEXTBOX)); - - //等待控件消失 + + // 等待控件消失 if (waitElement != null) { waitEvent.disappear(waitElement); } - + return true; }); - - logText = "在“" - + controlMap.get(DataTableKeywordType.PAGE_INPUT_TEXTBOX).getElementData().getName() - + "”元素中输入" + pageCount - + ",使列表跳转到相应的页码,其翻页" - + (result ? "" : "不") + "成功"; + + logText = "在“" + controlMap.get(DataTableKeywordType.PAGE_INPUT_TEXTBOX).getElementData().getName() + "”元素中输入" + + pageCount + ",使列表跳转到相应的页码,其翻页" + (result ? "" : "不") + "成功"; resultText = String.valueOf(result); - + return result; } - + /** * 通过条件,点击{@link DataTableKeywordType#SEARCH_BUTTON}映射的按钮,对列表进行搜索。方法中需要接收一个 * 返回值为boolean类型的操作,若操作的返回值为false时,则不会点击按钮,可参考以下写法: - *
+ *
+ *
+ *
* DataTableEvent test = new DataTableEvent(brower);
* test.searchList(() -> {
* te.input(cb.getElement("账号搜索文本框"), "13000000000");
* return true;
* });
- *
+ *
+ *
*
* @param action 返回值为boolean类型的操作
* @return 列表是否有变化
*/
public boolean searchList(BooleanSupplier action) {
- //判断控件是否存在
+ // 判断控件是否存在
if (!controlMap.containsKey(DataTableKeywordType.SEARCH_BUTTON)) {
- throw new ControlException(DataTableKeywordType.SEARCH_BUTTON.getName()
- , DataTableKeywordType.SEARCH_BUTTON.toString());
+ throw new ControlException(DataTableKeywordType.SEARCH_BUTTON.getName(),
+ DataTableKeywordType.SEARCH_BUTTON.toString());
}
-
- boolean result = false;
- //若操作成功,则点击搜索按钮
- if (action.getAsBoolean()) {
- clickEvent.click(controlMap.get(DataTableKeywordType.SEARCH_BUTTON));
-
- //等待控件消失
- if (waitElement != null) {
- waitEvent.disappear(waitElement);
+
+ boolean result = assertData(() -> {
+ // 若操作成功,则点击搜索按钮
+ if (action.getAsBoolean()) {
+ clickEvent.click(controlMap.get(DataTableKeywordType.SEARCH_BUTTON));
+
+ // 等待控件消失
+ if (waitElement != null) {
+ waitEvent.disappear(waitElement);
+ }
+
+ return true;
+ } else {
+ return false;
}
-
- //TODO 走列表文本断言
- result = true;
- } else {
- result = false;
- }
-
+ });
+
logText = "通过搜索条件,点击“" + controlMap.get(DataTableKeywordType.SEARCH_BUTTON).getElementData().getName()
+ "”元素,对列表进行搜索";
resultText = String.valueOf(result);
-
+
return result;
}
-
+
/**
* - * 获取指定的一行元素,下标允许传入负数,表示从后向前遍历,具体遍历逻辑 - * 可参考{@link DataListBy#getElement(int)}方法。 + * 获取指定的一行元素,下标允许传入负数,表示从后向前遍历,具体遍历逻辑可参考{@link DataListBy#getElement(int)}方法。 *
*
* 注意:下标将按照元素列长度进行计算,若下标的绝对值大于元素列长度,且下标为正数,则
@@ -356,19 +369,68 @@ public final class DataTableEvent extends AbstractEvent {
* @return 指定行的元素集合
*/
public ArrayList 文件名:DataTableEvent.java 用途:
- * 枚举列表中可操作的控件,如上一页、下一页按钮等
+ *
+ * 文件名:DataTableEvent.java
* 编码时间:2020年11月30日上午8:03:59 修改时间:2020年11月30日上午8:03:59
+ * 用途: 枚举列表中可操作的控件,如上一页、下一页按钮等
+ *
+ * 编码时间:2020年11月30日上午8:03:59
+ *
+ * 修改时间:2020年11月30日上午8:03:59
+ * 文件名:DataTableEvent.java 用途:
- * 若元素列表无法添加时抛出的异常
+ *
+ * 文件名:DataTableEvent.java
* 编码时间:2020年11月19日下午8:26:49 修改时间:2020年11月19日下午8:26:49
+ * 用途: 若元素列表无法添加时抛出的异常
+ *
+ * 编码时间:2020年11月19日下午8:26:49
+ *
+ * 修改时间:2020年11月19日下午8:26:49
+ *
+ * 预期:
+ *
+ */
+ @Test
+ public void getRowTextTest() {
+ test.getRowText(2).forEach(System.out :: println);
+ }
+
+ /**
+ * 用于测试{@link DataTableEvent#getListText(String)}方法
+ * 预期:
+ *
+ */
+ @Test
+ public void getListTextTest() {
+ test.getListText("账号列").forEach(System.out :: println);
+ }
//---------------------单元测试区---------------------------
}