修改元素获取机制

This commit is contained in:
彭宇琦 2020-07-09 18:17:20 +08:00
parent 52f05d8741
commit bf549f3f32
9 changed files with 229 additions and 23 deletions

22
pom.xml
View File

@ -116,5 +116,27 @@
<version>1.13.1</version>
</dependency>
<!--spring aop + aspectj 切面-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.9.5</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.5</version>
</dependency>
</dependencies>
</project>

View File

@ -12,19 +12,10 @@ import pres.auxiliary.work.selenium.event.ClickEvent;
import pres.auxiliary.work.selenium.event.TextEvent;
public class Event {
/**
* 存储WebDriver对象
*/
private WebDriver driver;
/**
* 用于进行单一元素获取
*/
private CommonBy commonBy;
/**
* 用于进行列表元素获取
*/
private DataListBy dataListBy;
/**
* 用于进行选项元素获取
*/
@ -39,16 +30,26 @@ public class Event {
*/
private TextEvent textEvent;
/**
* 用于执行当前需要切换的xml文件对象
*/
private File xmlFile;
/**
* 用于指向是否需要切换到顶层
*/
private boolean isBreakRootFrame;
/**
* 存储WebDriver对象
*/
private WebDriver driver;
/**
* 初始化{@link WebDriver}对象
* @param driver {@link WebDriver}对象
*/
public Event(WebDriver driver) {
this.driver = driver;
//初始化元素获取类
commonBy = new CommonBy(driver);
dataListBy = new DataListBy(driver);
selectBy = new SelectBy(driver);
//初始化元素操作类
@ -71,8 +72,10 @@ public class Event {
*/
public void switchXmlFile(File xmlFile, boolean isBreakRootFrame) {
commonBy.setXmlFile(xmlFile, isBreakRootFrame);
dataListBy.setXmlFile(xmlFile, isBreakRootFrame);
selectBy.setXmlFile(xmlFile, isBreakRootFrame);
this.xmlFile = xmlFile;
this.isBreakRootFrame = isBreakRootFrame;
}
/**
@ -91,7 +94,8 @@ public class Event {
* @param keys 需要替换的定位方式内容的关键词
*/
public void click(String name, int index, String...keys) {
dataListBy.clearColumn(name, true);
DataListBy dataListBy = new DataListBy(driver);
dataListBy.setXmlFile(xmlFile, isBreakRootFrame);
dataListBy.add(name, keys);
clickEvent.click(dataListBy.getElement(name, index));
}
@ -108,16 +112,18 @@ public class Event {
/**
* 用于根据元素名称对列表元素进行双击事件
* @param name 元素名称
* @param index 元素所在下标
* @param keys 需要替换的定位方式内容的关键词
*/
public void doubleClick(String name, int index, String...keys) {
dataListBy.clearColumn(name, true);
DataListBy dataListBy = new DataListBy(driver);
dataListBy.setXmlFile(xmlFile, isBreakRootFrame);
dataListBy.add(name, keys);
clickEvent.doubleClick(dataListBy.getElement(name, index));
}
/**
* 用于根据元素名称对单一元素进行击事件
* 用于根据元素名称对单一元素进行击事件
* @param name 元素名称
* @param keys 需要替换的定位方式内容的关键词
*/
@ -128,11 +134,139 @@ public class Event {
/**
* 用于根据元素名称对列表元素进行右击事件
* @param name 元素名称
* @param index 元素所在下标
* @param keys 需要替换的定位方式内容的关键词
*/
public void rightClick(String name, int index, String...keys) {
dataListBy.clearColumn(name, true);
DataListBy dataListBy = new DataListBy(driver);
dataListBy.setXmlFile(xmlFile, isBreakRootFrame);
dataListBy.add(name, keys);
clickEvent.rightClick(dataListBy.getElement(name, index));
}
/**
* 用于根据元素名称对单一元素进行连续点击事件
* @param name 元素名称
* @param clickCount 点击次数
* @param sleepInMillis 操作时间间隔单位为毫秒
* @param keys 需要替换的定位方式内容的关键词
*/
public void continuousClick(String name, int clickCount, long sleepInMillis, String...keys) {
clickEvent.continuousClick(commonBy.getElement(name), clickCount, sleepInMillis);
}
/**
* 用于根据元素名称对列表元素进行连续点击事件
* @param name 元素名称
* @param clickCount 点击次数
* @param sleepInMillis 操作时间间隔单位为毫秒
* @param index 元素所在下标
* @param keys 需要替换的定位方式内容的关键词
*/
public void continuousClick(String name, int index, int clickCount, long sleepInMillis, String...keys) {
DataListBy dataListBy = new DataListBy(driver);
dataListBy.setXmlFile(xmlFile, isBreakRootFrame);
dataListBy.add(name, keys);
clickEvent.continuousClick(dataListBy.getElement(name, index), clickCount, sleepInMillis);
}
/**
* 用于根据控件名称清除单一控件的内容
* @param name 控件名称
* @param keys 需要替换的定位方式内容的关键词
* @return 被清除的内容
*/
public String clear(String name, String...keys) {
return textEvent.clear(commonBy.getElement(name));
}
/**
* 用于根据控件名称清除列表控件的内容
* @param name 控件名称
* @param index 元素所在下标
* @param keys 需要替换的定位方式内容的关键词
* @return 被清除的内容
*/
public String clear(String name, int index, String...keys) {
DataListBy dataListBy = new DataListBy(driver);
dataListBy.setXmlFile(xmlFile, isBreakRootFrame);
dataListBy.add(name, keys);
return textEvent.clear(dataListBy.getElement(name, index));
}
/**
* 用于根据控件名称获取单一控件指定属性的内容
* @param name 控件名称
* @param attributeName 属性名称
* @param keys 需要替换的定位方式内容的关键词
* @return 控件属性的内容
*/
public String getAttributeValue(String name, String attributeName, String...keys) {
return textEvent.getAttributeValue(commonBy.getElement(name), attributeName);
}
/**
* 用于根据控件名称获取列表控件指定属性的内容
* @param name 控件名称
* @param index 元素所在下标
* @param attributeName 属性名称
* @param keys 需要替换的定位方式内容的关键词
* @return 控件属性的内容
*/
public String getAttributeValue(String name, int index, String attributeName, String...keys) {
DataListBy dataListBy = new DataListBy(driver);
dataListBy.setXmlFile(xmlFile, isBreakRootFrame);
dataListBy.add(name, keys);
return textEvent.getAttributeValue(dataListBy.getElement(name, index), attributeName);
}
/**
* 用于根据控件名称获取单一控件的内容
* @param name 控件名称
* @param keys 需要替换的定位方式内容的关键词
* @return 控件的内容
*/
public String getText(String name, String...keys) {
return textEvent.getText(commonBy.getElement(name));
}
/**
* 用于根据控件名称获取列表控件的内容
* @param name 控件名称
* @param index 元素所在下标
* @param keys 需要替换的定位方式内容的关键词
* @return 控件的内容
*/
public String getText(String name, int index, String...keys) {
DataListBy dataListBy = new DataListBy(driver);
dataListBy.setXmlFile(xmlFile, isBreakRootFrame);
dataListBy.add(name, keys);
return textEvent.getText(dataListBy.getElement(name, index));
}
/**
* 用于根据控件名称对单一控件进行输入
* @param name 控件名称
* @param text 输入的内容
* @param keys 需要替换的定位方式内容的关键词
* @return 输入到控件的内容
*/
public String input(String name, String text, String...keys) {
return textEvent.input(commonBy.getElement(name), text);
}
/**
* 用于根据控件名称获取列表控件的内容
* @param name 控件名称
* @param index 元素所在下标
* @param text 输入的内容
* @param keys 需要替换的定位方式内容的关键词
* @return 输入到控件的内容
*/
public String input(String name, int index, String text, String...keys) {
DataListBy dataListBy = new DataListBy(driver);
dataListBy.setXmlFile(xmlFile, isBreakRootFrame);
dataListBy.add(name, keys);
return textEvent.input(dataListBy.getElement(name, index), text);
}
}

View File

@ -79,6 +79,16 @@ public abstract class AbstractBy {
browserHandles = this.driver.getWindowHandle();
}
/**
* 通过{@link AbstractBy}对象对类进行构造将传入的AbstractBy类中的关键参数设置到当前类对象中
* @param brower {@link AbstractBy}对象
*/
public AbstractBy(AbstractBy by) {
this.brower = by.brower;
this.driver = by.driver;
this.xml = by.xml;
}
/**
* 通过浏览器对象{@link AbstractBrower}进行构造
* @param brower {@link AbstractBrower}对象

View File

@ -39,6 +39,14 @@ public class CommonBy extends AbstractBy {
public CommonBy(AbstractBrower brower) {
super(brower);
}
/**
* 通过{@link AbstractBy}对象对类进行构造将传入的AbstractBy类中的关键参数设置到当前类对象中
* @param brower {@link AbstractBy}对象
*/
public CommonBy(AbstractBy by) {
super(by);
}
/**
* 用于根据xml文件中元素的名称返回对应的{@link Element}对象该方法亦可传入元素

View File

@ -76,6 +76,14 @@ public class DataListBy extends ListBy {
super(driver);
}
/**
* 通过{@link AbstractBy}对象对类进行构造将传入的AbstractBy类中的关键参数设置到当前类对象中
* @param brower {@link AbstractBy}对象
*/
public DataListBy(AbstractBy by) {
super(by);
}
/**
* 用于设置首行元素是否为标题元素
* @param isFristRowTitle 首行是否为标题元素

View File

@ -45,6 +45,14 @@ public abstract class ListBy extends MultiBy {
super(driver);
}
/**
* 通过{@link AbstractBy}对象对类进行构造将传入的AbstractBy类中的关键参数设置到当前类对象中
* @param brower {@link AbstractBy}对象
*/
public ListBy(AbstractBy by) {
super(by);
}
/**
* 返回列表名称对应的元素个数若该列未被获取则返回-1
* @param name 被获取的列名称

View File

@ -39,6 +39,14 @@ public abstract class MultiBy extends AbstractBy {
super(driver);
}
/**
* 通过{@link AbstractBy}对象对类进行构造将传入的AbstractBy类中的关键参数设置到当前类对象中
* @param brower {@link AbstractBy}对象
*/
public MultiBy(AbstractBy by) {
super(by);
}
/**
* 用于根据传入的元素在xml文件中的名称或者元素的定位内容添加元素由于该方法不指定元素的定位
* 方式若传入的参数不是xml元素且非xpath路径或绝对css路径时其识别效率较慢建议在该情况下

View File

@ -73,27 +73,31 @@ public class SelectBy extends MultiBy {
private boolean fristIsEmpty = false;
/**
* 通过浏览器对象{@link AbstractBrower}进行构造并指定第一个选项是否为空选项或者为请选择等文本
* 的选项若为该选项时则在随机选择时不会选择到该选项
* 通过浏览器对象{@link AbstractBrower}进行构造
*
* @param brower {@link AbstractBrower}对象
* @param fristIsEmpty 指定第一个元素是否为空串或为请选择等文本
*/
public SelectBy(AbstractBrower brower) {
super(brower);
}
/**
* 构造对象并存储浏览器的{@link WebDriver}对象并指定第一个选项是否为空选项或者为请选择等文本
* 的选项若为该选项时则在随机选择时不会选择到该选项
* 构造对象并存储浏览器的{@link WebDriver}对象
*
* @param driver 浏览器的{@link WebDriver}对象
* @param fristIsEmpty 指定第一个元素是否为空串或为请选择等文本
*/
public SelectBy(WebDriver driver) {
super(driver);
}
/**
* 通过{@link AbstractBy}对象对类进行构造将传入的AbstractBy类中的关键参数设置到当前类对象中
* @param brower {@link AbstractBy}对象
*/
public SelectBy(AbstractBy by) {
super(by);
}
@Override
public void add(String name, ByType byType) {
elementInfo = new ElementInformation(name, byType);

View File

@ -74,6 +74,10 @@ public class CommonByTest {
File xmlFile = new File("src/test/java/pres/auxiliary/work/selenium/element/测试文件.xml");
ce.setXmlFile(xmlFile, false);
System.out.println(ce.getElement("单位名称").getWebElement().getText());
DataListBy d = new DataListBy(ce);
d.add("单位名称");
System.out.println(d.getElement("单位名称", 1).getWebElement().getText());
}
/**