分离验证码识别事件;添加文本处理断言事件;修改js事件问题
This commit is contained in:
parent
be80eb20e3
commit
c977a366e1
|
@ -1,5 +1,7 @@
|
||||||
package pres.auxiliary.work.selenium.event;
|
package pres.auxiliary.work.selenium.event;
|
||||||
|
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
import org.openqa.selenium.NoSuchElementException;
|
import org.openqa.selenium.NoSuchElementException;
|
||||||
import org.openqa.selenium.TimeoutException;
|
import org.openqa.selenium.TimeoutException;
|
||||||
|
|
||||||
|
@ -99,10 +101,13 @@ public class AssertEvent extends AbstractEvent {
|
||||||
*/
|
*/
|
||||||
public boolean assertTextContainKey(Element element, boolean isJudgeAllKey, String... keys) {
|
public boolean assertTextContainKey(Element element, boolean isJudgeAllKey, String... keys) {
|
||||||
//判断是否传入关键词
|
//判断是否传入关键词
|
||||||
boolean result = true;
|
// boolean result = true;
|
||||||
if (keys != null && keys.length != 0) {
|
// if (keys != null && keys.length != 0) {
|
||||||
result = judgetText(textEvent.getText(element), isJudgeAllKey, false, keys);
|
// result = judgetText(textEvent.getText(element), isJudgeAllKey, false, keys);
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
boolean result = assertTextContainKey(element, (e) -> textEvent.getText(e),
|
||||||
|
isJudgeAllKey, keys);
|
||||||
|
|
||||||
logText = "断言“" + element.getElementData().getName() + "”元素的文本内容包含"
|
logText = "断言“" + element.getElementData().getName() + "”元素的文本内容包含"
|
||||||
+ (isJudgeAllKey ? "所有" : "部分") + "关键词" + arrayToString(keys);
|
+ (isJudgeAllKey ? "所有" : "部分") + "关键词" + arrayToString(keys);
|
||||||
|
@ -110,7 +115,7 @@ public class AssertEvent extends AbstractEvent {
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
* 断言元素的文本内容中不包含指定的关键词。可设置元素的文本内容是否需要判断传入的所有关键词,即
|
* 断言元素的文本内容中不包含指定的关键词。可设置元素的文本内容是否需要判断传入的所有关键词,即
|
||||||
|
@ -155,10 +160,13 @@ public class AssertEvent extends AbstractEvent {
|
||||||
*/
|
*/
|
||||||
public boolean assertTextNotContainKey(Element element, boolean isJudgeAllKey, String... keys) {
|
public boolean assertTextNotContainKey(Element element, boolean isJudgeAllKey, String... keys) {
|
||||||
//判断是否传入关键词
|
//判断是否传入关键词
|
||||||
boolean result = true;
|
// boolean result = true;
|
||||||
if (keys != null && keys.length != 0) {
|
// if (keys != null && keys.length != 0) {
|
||||||
result = judgetText(textEvent.getText(element), isJudgeAllKey, true, keys);
|
// result = judgetText(textEvent.getText(element), isJudgeAllKey, true, keys);
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
boolean result = assertTextNotContainKey(element, (e) -> textEvent.getText(e),
|
||||||
|
isJudgeAllKey, keys);
|
||||||
|
|
||||||
logText = "断言“" + element.getElementData().getName() + "”元素的文本内容不包含"
|
logText = "断言“" + element.getElementData().getName() + "”元素的文本内容不包含"
|
||||||
+ (isJudgeAllKey ? "所有" : "部分") + "关键词" + arrayToString(keys);
|
+ (isJudgeAllKey ? "所有" : "部分") + "关键词" + arrayToString(keys);
|
||||||
|
@ -182,10 +190,12 @@ public class AssertEvent extends AbstractEvent {
|
||||||
public boolean assertAttributeContainKey(Element element, String attributeName, boolean isJudgeAllKey,
|
public boolean assertAttributeContainKey(Element element, String attributeName, boolean isJudgeAllKey,
|
||||||
String... keys) {
|
String... keys) {
|
||||||
//判断是否传入关键词
|
//判断是否传入关键词
|
||||||
boolean result = true;
|
// boolean result = true;
|
||||||
if (keys != null && keys.length != 0) {
|
// if (keys != null && keys.length != 0) {
|
||||||
result = judgetText(textEvent.getAttributeValue(element, attributeName), isJudgeAllKey, false, keys);
|
// result = judgetText(textEvent.getAttributeValue(element, attributeName), isJudgeAllKey, false, keys);
|
||||||
}
|
// }
|
||||||
|
boolean result = assertTextContainKey(element, (e) -> textEvent.getAttributeValue(e, attributeName),
|
||||||
|
isJudgeAllKey, keys);
|
||||||
|
|
||||||
logText = "断言“" + element.getElementData().getName() + "”元素的“" + attributeName
|
logText = "断言“" + element.getElementData().getName() + "”元素的“" + attributeName
|
||||||
+ "”属性值包含"
|
+ "”属性值包含"
|
||||||
|
@ -209,11 +219,14 @@ public class AssertEvent extends AbstractEvent {
|
||||||
*/
|
*/
|
||||||
public boolean assertAttributeNotContainKey(Element element, String attributeName, boolean isJudgeAllKey,
|
public boolean assertAttributeNotContainKey(Element element, String attributeName, boolean isJudgeAllKey,
|
||||||
String... keys) {
|
String... keys) {
|
||||||
//判断是否传入关键词
|
// //判断是否传入关键词
|
||||||
boolean result = true;
|
// boolean result = true;
|
||||||
if (keys != null && keys.length != 0) {
|
// if (keys != null && keys.length != 0) {
|
||||||
result = judgetText(textEvent.getAttributeValue(element, attributeName), isJudgeAllKey, true, keys);
|
// result = judgetText(textEvent.getAttributeValue(element, attributeName), isJudgeAllKey, true, keys);
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
boolean result = assertTextNotContainKey(element, (e) -> textEvent.getAttributeValue(e, attributeName),
|
||||||
|
isJudgeAllKey, keys);
|
||||||
|
|
||||||
logText = "断言“" + element.getElementData().getName() + "”元素的“" + attributeName
|
logText = "断言“" + element.getElementData().getName() + "”元素的“" + attributeName
|
||||||
+ "”属性值不包含"
|
+ "”属性值不包含"
|
||||||
|
@ -223,6 +236,64 @@ public class AssertEvent extends AbstractEvent {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对元素内容进行处理,并断言处理后的文本内容中包含指定的关键词。
|
||||||
|
* 可设置元素的文本内容是否需要判断传入的所有关键词,具体参数介绍
|
||||||
|
* 可参考{@link #assertTextContainKey(Element, boolean, String...)}方法
|
||||||
|
*
|
||||||
|
* @param element {@link Element}对象
|
||||||
|
* @param dispose 对元素内容的处理方法,传入的参数为{@link Element}对象,返回的参数为字符串
|
||||||
|
* @param isJudgeAllKey 是否需要完全判断所有关键词
|
||||||
|
* @param keys 关键词组
|
||||||
|
* @return 断言结果
|
||||||
|
* @throws TimeoutException 元素无法操作时抛出的异常
|
||||||
|
* @throws NoSuchElementException 元素不存在或下标不正确时抛出的异常
|
||||||
|
*/
|
||||||
|
public boolean assertTextContainKey(Element element, Function<Element, String> dispose, boolean isJudgeAllKey, String... keys) {
|
||||||
|
//判断是否传入关键词
|
||||||
|
boolean result = true;
|
||||||
|
String text = "";
|
||||||
|
if (keys != null && keys.length != 0) {
|
||||||
|
text = dispose.apply(element);
|
||||||
|
result = judgetText(text, isJudgeAllKey, false, keys);
|
||||||
|
}
|
||||||
|
|
||||||
|
logText = "断言“" + element.getElementData().getName() + "”元素处理后的文本内容(" + text +")包含"
|
||||||
|
+ (isJudgeAllKey ? "所有" : "部分") + "关键词" + arrayToString(keys);
|
||||||
|
resultText = String.valueOf(result);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对元素内容进行处理,并断言处理后的文本内容中不包含指定的关键词。
|
||||||
|
* 可设置元素的文本内容是否需要判断传入的所有关键词,
|
||||||
|
* 具体参数介绍可参考{@link #assertTextContainKey(Element, boolean, String...)}方法
|
||||||
|
*
|
||||||
|
* @param element {@link Element}对象
|
||||||
|
* @param dispose 对元素内容的处理方法,传入的参数为{@link Element}对象,返回的参数为字符串
|
||||||
|
* @param isJudgeAllKey 是否需要完全判断所有关键词
|
||||||
|
* @param keys 关键词组
|
||||||
|
* @return 断言结果
|
||||||
|
* @throws TimeoutException 元素无法操作时抛出的异常
|
||||||
|
* @throws NoSuchElementException 元素不存在或下标不正确时抛出的异常
|
||||||
|
*/
|
||||||
|
public boolean assertTextNotContainKey(Element element, Function<Element, String> dispose, boolean isJudgeAllKey, String... keys) {
|
||||||
|
//判断是否传入关键词
|
||||||
|
boolean result = true;
|
||||||
|
String text = "";
|
||||||
|
if (keys != null && keys.length != 0) {
|
||||||
|
text = dispose.apply(element);
|
||||||
|
result = judgetText(text, isJudgeAllKey, true, keys);
|
||||||
|
}
|
||||||
|
|
||||||
|
logText = "断言“" + element.getElementData().getName() + "”元素处理后的文本内容(" + text +")包含"
|
||||||
|
+ (isJudgeAllKey ? "所有" : "部分") + "关键词" + arrayToString(keys);
|
||||||
|
resultText = String.valueOf(result);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用于断言元素的内容与预期的文本一致
|
* 用于断言元素的内容与预期的文本一致
|
||||||
* @param element {@link Element}对象
|
* @param element {@link Element}对象
|
||||||
|
@ -235,7 +306,8 @@ public class AssertEvent extends AbstractEvent {
|
||||||
//判断是否传入关键词
|
//判断是否传入关键词
|
||||||
text = text == null ? "" : text;
|
text = text == null ? "" : text;
|
||||||
|
|
||||||
boolean result = judgetText(textEvent.getText(element), true, false, text);
|
// boolean result = judgetText(textEvent.getText(element), true, false, text);
|
||||||
|
boolean result = assertTextContainKey(element, true, text);
|
||||||
|
|
||||||
logText = "断言“" + element.getElementData().getName() + "”元素的文本内容为“" + text + "”";
|
logText = "断言“" + element.getElementData().getName() + "”元素的文本内容为“" + text + "”";
|
||||||
resultText = String.valueOf(result);
|
resultText = String.valueOf(result);
|
||||||
|
@ -255,7 +327,8 @@ public class AssertEvent extends AbstractEvent {
|
||||||
//判断是否传入关键词
|
//判断是否传入关键词
|
||||||
text = text == null ? "" : text;
|
text = text == null ? "" : text;
|
||||||
|
|
||||||
boolean result = judgetText(textEvent.getText(element), true, true, text);
|
// boolean result = judgetText(textEvent.getText(element), true, true, text);
|
||||||
|
boolean result = assertTextNotContainKey(element, true, text);
|
||||||
|
|
||||||
logText = "断言“" + element.getElementData().getName() + "”元素的文本内容不为“" + text + "”";
|
logText = "断言“" + element.getElementData().getName() + "”元素的文本内容不为“" + text + "”";
|
||||||
resultText = String.valueOf(result);
|
resultText = String.valueOf(result);
|
||||||
|
|
|
@ -47,6 +47,7 @@ public class JsEvent extends AbstractEvent {
|
||||||
*/
|
*/
|
||||||
public JsEvent(AbstractBrower brower) {
|
public JsEvent(AbstractBrower brower) {
|
||||||
super(brower);
|
super(brower);
|
||||||
|
js = (JavascriptExecutor) brower.getDriver();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -3,7 +3,6 @@ package pres.auxiliary.work.selenium.event;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Random;
|
|
||||||
|
|
||||||
import org.openqa.selenium.Keys;
|
import org.openqa.selenium.Keys;
|
||||||
import org.openqa.selenium.NoSuchElementException;
|
import org.openqa.selenium.NoSuchElementException;
|
||||||
|
@ -160,7 +159,9 @@ public class TextEvent extends AbstractEvent {
|
||||||
* @return 输入的内容
|
* @return 输入的内容
|
||||||
* @throws TimeoutException 元素无法操作时抛出的异常
|
* @throws TimeoutException 元素无法操作时抛出的异常
|
||||||
* @throws NoSuchElementException 元素不存在或下标不正确时抛出的异常
|
* @throws NoSuchElementException 元素不存在或下标不正确时抛出的异常
|
||||||
|
* @deprecated 下个版本删除该方法,改为使用{@link #getImageText(Element)}与{@link #input(Element, String)}方法结合代替
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public String codeInput(Element textElement, Element codeImageElement) {
|
public String codeInput(Element textElement, Element codeImageElement) {
|
||||||
actionOperate(codeImageElement, null);
|
actionOperate(codeImageElement, null);
|
||||||
// 判断验证码信息是否加载,加载后,获取其Rectang对象
|
// 判断验证码信息是否加载,加载后,获取其Rectang对象
|
||||||
|
@ -191,58 +192,39 @@ public class TextEvent extends AbstractEvent {
|
||||||
|
|
||||||
return resultText;
|
return resultText;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 该方法用于将一个指定的整数随机填写到传入的控件组中<br>
|
* 用于对“数字+英文”类型的图片内容进行识别的方法,根据图片元素位置,识别图片中的内容。
|
||||||
* <b><i>建议在指定值远远大于控件的数量时再使用该方法,否则将会出现不可预期的问题</i></b>
|
* 注意,该方法识别成功的概率不高,在“数字+英文”的模式下,经常将数字识别为英文。
|
||||||
*
|
* @param element 图片元素
|
||||||
* @param num 指定的整数
|
* @return 识别图片的结果
|
||||||
* @param textElements 通过查找页面得到的一组控件元素对象
|
|
||||||
* @return 由于涉及到多个文本框,故其返回值有多个,将以“值1,值2,值3...”的形式进行返回
|
|
||||||
* @deprecated 当前方法有些BUG,请勿调用,下个版本修复
|
|
||||||
* @throws TimeoutException 元素无法操作时抛出的异常
|
|
||||||
* @throws NoSuchElementException 元素不存在或下标不正确时抛出的异常
|
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
public String getImageText(Element element) {
|
||||||
public String avgIntergeInput(int num, Element... elements) {
|
actionOperate(element, null);
|
||||||
//TODO 存在BUG,需要修改
|
// 判断验证码信息是否加载,加载后,获取其Rectang对象
|
||||||
//定义存储控件数量及需要随机的数量
|
Rectangle r = webElement.getRect();
|
||||||
int contrlNum = elements.length;
|
// 构造截图对象,并创建截图
|
||||||
String inputNumText = "";
|
Screenshot sc = new Screenshot(brower.getDriver(), new File("Temp"));
|
||||||
String[] inputNum = new String[contrlNum];
|
File image = null;
|
||||||
|
try {
|
||||||
// 向下取整获得平均数
|
image = sc.creatImage("code");
|
||||||
int avgNum = num / contrlNum;
|
} catch (WebDriverException e) {
|
||||||
// 向上取整获得差值
|
e.printStackTrace();
|
||||||
int diffNum = (int) Math.ceil(avgNum / 10.0);
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
//求取通过随机得出的值之和,用于计算最终其随机值之和与实际值的差值
|
// 设置图片识别的语言包存放位置
|
||||||
int sum = 0;
|
RecognitionImage.setTessdataPath(new File(TESSDATA));
|
||||||
//循环,生成控件个数个随机值,其随机值在给定数值的均值之前
|
// 识别图片,并存储至结果中
|
||||||
for (int i = 0; i < contrlNum; i++) {
|
resultText = RecognitionImage.judgeImage(image, r.x, r.y, r.width, r.height);
|
||||||
//注意:2 * diffNum为以下算式的简写:
|
|
||||||
//minNum = avgNum - diffNum;
|
|
||||||
//maxNum = avgNum + diffNum;
|
|
||||||
//int ranNum = new Random().nextInt(maxNum - minNum + 1) + minNum;
|
|
||||||
int ranNum = new Random().nextInt(2 * diffNum + 1) + (avgNum - diffNum);
|
|
||||||
sum += ranNum;
|
|
||||||
inputNum[i] = String.valueOf(ranNum);
|
|
||||||
}
|
|
||||||
|
|
||||||
//由于数值是随机的,可能会出现随机值相加不为指定值,故需要补上差值,但由于差值通过算法后不会很大,故可随机附加到一个控件值上
|
logText = "识别“" + element.getElementData().getName() + "”图片中内容,内容为:"
|
||||||
if ( (diffNum = sum - num) != 0 ) {
|
+ resultText;
|
||||||
inputNum[new Random().nextInt(contrlNum)] = String.valueOf(Integer.valueOf(inputNum[new Random().nextInt(contrlNum)]) - diffNum);
|
|
||||||
}
|
|
||||||
|
|
||||||
//将随机值填写至控件中
|
return resultText;
|
||||||
for (int i = 0; i < contrlNum; i++) {
|
|
||||||
inputNumText += (input(elements[i], inputNum[i]) + ",");
|
|
||||||
}
|
|
||||||
|
|
||||||
return inputNumText.substring(0, inputNumText.length() - 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用于向控件中上传指定的文件。
|
* 用于向控件中上传指定的文件。
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue