提交 f716a04c authored 作者: 孙洁清's avatar 孙洁清

Merge branch 'master' of git.yfzx.zjtys.com.cn:hct/auto-test

package com.zjty.autotest.common.action;
/**
* <p>Description : autotest
* <p>Date : 2020/3/24 15:35
* <p>@author : C
*/
public interface InputType {
String ORDER = "序号";
}
......@@ -13,6 +13,7 @@ import lombok.extern.slf4j.Slf4j;
import org.openqa.selenium.*;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.*;
......@@ -29,6 +30,15 @@ import static java.util.Objects.nonNull;
@Service
public class SeleniumExecutor {
@Value("${selenium.executor.wait-after-click}")
private Long waitTime;
@Value("${selenium.executor.screenshot.url-host}")
private String screenshotPrefixHost;
@Value("${selenium.executor.screenshot.url-port}")
private String screenshotPrefixPort;
private WebDriver driver;
private List<Input> inputs = Lists.newArrayList();
......@@ -110,7 +120,7 @@ public class SeleniumExecutor {
if (!success) {
String screenshotName = alterUrlName(currentUrl);
screenshot(screenshotName);
screenshot = String.format("http://localhost:13500/screenshots/%s", screenshotName);
screenshot = String.format("http://%s:%s/screenshots/%s", screenshotPrefixHost, screenshotPrefixPort, screenshotName);
}
log.info("遍历完毕...");
measure = new Measure(
......@@ -143,11 +153,13 @@ public class SeleniumExecutor {
if (isEnabledAndDisplayed(element)) {
log.info("操作第{}个元素 ------ text:[{}] ----- tag:[{}]", elementIndex + 1, element.getText(), element.getTagName());
if (isEnabledInput(element)) {
inputValue(element, inputs);
} else if (isEnabledClick(element)) {
element.click();
Input input = inputs.remove(0);
element.sendKeys(input.getValue());
}
element.click();
if (waitTime > 0) {
sleep();
}
sleep();
//一旦页面发生过跳转 通过重新打开回到原来的页面后需要重新获取元素
Boolean pageChanged = checkPage();
if (pageChanged) {
......@@ -187,6 +199,8 @@ public class SeleniumExecutor {
boolean newPage = !historyUrls.contains(driver.getCurrentUrl());
if (newPage) {
urlQueue.add(driver.getCurrentUrl());
//去重防止重复添加
urlQueue = queueDuplicateRemoval(urlQueue);
}
return true;
} else {
......@@ -194,10 +208,18 @@ public class SeleniumExecutor {
}
}
private Queue<String> queueDuplicateRemoval(Queue<String> queue) {
HashSet<String> set = Sets.newHashSet(queue);
return Queues.newLinkedBlockingDeque(set);
}
@SuppressWarnings("unused")
private String getMainUrl(String url) {
return url.substring(0, url.indexOf(url));
int end = url.indexOf("?");
return url.substring(0, end);
}
@SuppressWarnings("unused")
private void inputValue(WebElement element, List<Input> inputs) {
Predicate<Input> inputMatch = input -> Objects.equals(element.getAttribute(input.getAttrName()), input.getAttrValue());
Optional<Input> inputOptional = inputs.stream().filter(inputMatch).findAny();
......@@ -229,9 +251,10 @@ public class SeleniumExecutor {
getAllElements(driver);
}
@SuppressWarnings("unused")
private void sleep() {
try {
Thread.sleep(2000L);
Thread.sleep(waitTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
......@@ -244,11 +267,14 @@ public class SeleniumExecutor {
}
private void getSubElements(WebElement element) {
List<WebElement> results = element.findElements(By.xpath("*"));
if (results.isEmpty()) {
elements.add(element);
} else {
results.forEach(this::getSubElements);
try {
List<WebElement> results = element.findElements(By.xpath("*"));
if (results.isEmpty()) {
elements.add(element);
} else {
results.forEach(this::getSubElements);
}
} catch (StaleElementReferenceException ignored) {
}
}
......@@ -256,25 +282,20 @@ public class SeleniumExecutor {
return Objects.equals(element.getTagName(), INPUT);
}
private Boolean isEnabledClick(WebElement element) {
return Objects.equals(element.getTagName(), BUTTON)
|| Objects.equals(element.getTagName(), A)
|| Objects.equals(element.getTagName(), SPAN);
}
private Boolean isEnabledAndDisplayed(WebElement element) {
return element.isEnabled() && element.isDisplayed();
}
private String alterUrlName(String fileName) {
// /\?*:"<>|
return fileName.replace("/", "")
.replace("\\", "")
.replace("#", "")
.replace("?", "")
.replace("*", "")
.replace(":", "")
.replace("<", "")
.replace(".", "")
.replace(">", "")
.replace("|", "");
}
......
......@@ -14,3 +14,11 @@ uploadUnFile=E:/opt/auto/test/zr/
# spring-http-\u6587\u4EF6\u4E0A\u4F20\u76F8\u5173\u914D\u7F6E
spring.servlet.multipart.max-file-size=500MB
spring.servlet.multipart.max-request-size=500MB
# Selenium每次点击操作后的等待时间(毫秒)(0为不等待)
selenium.executor.wait-after-click=0
# 提供截图URL的地址前缀(ip)
selenium.executor.screenshot.url-host=localhost
# 提供截图URL的地址前缀(ip)
selenium.executor.screenshot.url-port=13500
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论