提交 88787a85 authored 作者: 黄承天's avatar 黄承天

增加快速模式机制 增加操作系统自判断 SeleniumExecutor增加一个手动停止测试api

上级 87aa25c9
...@@ -37,6 +37,11 @@ public class Project { ...@@ -37,6 +37,11 @@ public class Project {
*/ */
private String url; private String url;
/**
* 是否为快速模式
*/
private Boolean fastmode;
/** /**
* 输入参数 * 输入参数
*/ */
......
...@@ -80,6 +80,8 @@ public class SeleniumExecutor { ...@@ -80,6 +80,8 @@ public class SeleniumExecutor {
private Actions actions; private Actions actions;
private Boolean isRunning = false;
/** /**
* 当前进行的窗口页 * 当前进行的窗口页
*/ */
...@@ -91,6 +93,7 @@ public class SeleniumExecutor { ...@@ -91,6 +93,7 @@ public class SeleniumExecutor {
private String currentUrl; private String currentUrl;
public Report execute(Project project) { public Report execute(Project project) {
isRunning = true;
historyUrls.clear(); historyUrls.clear();
urlQueue.clear(); urlQueue.clear();
clickElementQueue.clear(); clickElementQueue.clear();
...@@ -103,14 +106,18 @@ public class SeleniumExecutor { ...@@ -103,14 +106,18 @@ public class SeleniumExecutor {
String os = Strings.EMPTY; String os = Strings.EMPTY;
currentUrl = project.getUrl(); currentUrl = project.getUrl();
currentWindow = driver.getWindowHandle(); currentWindow = driver.getWindowHandle();
while (nonNull(currentUrl)) { try {
Measure measure = testUrl(currentUrl); while (nonNull(currentUrl)) {
if (nonNull(measure)) { Measure measure = testUrl(currentUrl);
measures.add(measure); if (nonNull(measure)) {
measures.add(measure);
}
currentUrl = urlQueue.poll();
} }
currentUrl = urlQueue.poll(); driver.quit();
} catch (Exception e) {
log.error("发生预料外的异常.测试结束:" + e);
} }
driver.quit();
return new Report( return new Report(
null, null,
project.getId(), project.getId(),
...@@ -121,6 +128,10 @@ public class SeleniumExecutor { ...@@ -121,6 +128,10 @@ public class SeleniumExecutor {
); );
} }
public void quit() {
isRunning = false;
}
private Measure testUrl(String currentUrl) { private Measure testUrl(String currentUrl) {
Measure measure = new Measure(); Measure measure = new Measure();
measure.setUrl(currentUrl); measure.setUrl(currentUrl);
...@@ -186,32 +197,41 @@ public class SeleniumExecutor { ...@@ -186,32 +197,41 @@ public class SeleniumExecutor {
private List<ElementDetail> traversal() { private List<ElementDetail> traversal() {
List<ElementDetail> elementDetails = Lists.newArrayList(); List<ElementDetail> elementDetails = Lists.newArrayList();
while (!inputElementQueue.isEmpty()) { while (!inputElementQueue.isEmpty()) {
ElementEntry elementEntry = inputElementQueue.poll(); if (isRunning) {
ElementFeature feature = elementEntry.getFeature(); ElementEntry elementEntry = inputElementQueue.poll();
if (!currentHistoryFeatures.contains(feature)) { ElementFeature feature = elementEntry.getFeature();
ElementDetail elementDetail = actInput(elementEntry); if (!currentHistoryFeatures.contains(feature)) {
if (!isSkipped(elementDetail)) { ElementDetail elementDetail = actInput(elementEntry);
elementDetails.add(elementDetail);
}
}
}
while (!clickElementQueue.isEmpty()) {
ElementEntry elementEntry = clickElementQueue.poll();
ElementFeature feature = elementEntry.getFeature();
if (fastMode) {
if (!totalHistoryFeatures.contains(feature.getText())){
ElementDetail elementDetail = actClick(elementEntry);
if (!isSkipped(elementDetail)) { if (!isSkipped(elementDetail)) {
elementDetails.add(elementDetail); elementDetails.add(elementDetail);
} }
} }
} else { } else {
if (!currentHistoryFeatures.contains(feature)) { break;
ElementDetail elementDetail = actClick(elementEntry); }
if (!isSkipped(elementDetail)) { }
elementDetails.add(elementDetail); while (!clickElementQueue.isEmpty()) {
if (isRunning) {
ElementEntry elementEntry = clickElementQueue.poll();
ElementFeature feature = elementEntry.getFeature();
if (fastMode) {
if (!totalHistoryFeatures.contains(feature.getText())) {
ElementDetail elementDetail = actClick(elementEntry);
if (!isSkipped(elementDetail)) {
elementDetails.add(elementDetail);
}
}
} else {
if (!currentHistoryFeatures.contains(feature)) {
ElementDetail elementDetail = actClick(elementEntry);
if (!isSkipped(elementDetail)) {
elementDetails.add(elementDetail);
}
} }
} }
} else {
log.info("测试已主动关闭...");
break;
} }
} }
return elementDetails; return elementDetails;
...@@ -233,10 +253,9 @@ public class SeleniumExecutor { ...@@ -233,10 +253,9 @@ public class SeleniumExecutor {
long startTime = System.currentTimeMillis(); long startTime = System.currentTimeMillis();
log.info("input操作"); log.info("input操作");
if (!inputs.isEmpty()) { if (!inputs.isEmpty()) {
Input input = inputs.get(0); Input input = inputs.remove(0);
element.sendKeys(input.getValue()); element.sendKeys(input.getValue());
element.submit(); element.submit();
inputs.remove(0);
} }
success = true; success = true;
long endTime = System.currentTimeMillis(); long endTime = System.currentTimeMillis();
......
...@@ -6,6 +6,9 @@ import org.openqa.selenium.chrome.ChromeDriver; ...@@ -6,6 +6,9 @@ import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions; import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver; import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.logging.LogType;
import org.openqa.selenium.logging.LoggingPreferences;
import org.openqa.selenium.remote.CapabilityType;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -13,31 +16,41 @@ import java.io.File; ...@@ -13,31 +16,41 @@ import java.io.File;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.Objects; import java.util.Objects;
import java.util.logging.Level;
public class WebDriverUtil { public class WebDriverUtil {
private static final Logger logger = LoggerFactory.getLogger(WebDriverUtil.class); private static final Logger logger = LoggerFactory.getLogger(WebDriverUtil.class);
/* 公共的 */
public final static String CHROME_EXE = System.getProperty("user.dir")+File.separator+"chromedriver";
public final static String FIRE_FOX_EXE = "/opt/hct" +File.separator+ "geckodriver"; private static final String WINDOWS = "Windows";
/* 公共的 */
public final static String CHROME = System.getProperty("user.dir") + File.separator + "chromedriver";
public final static String IE_EXE = System.getProperty("user.dir") +File.separator+ "IEDriverServer.exe"; public final static String FIRE_FOX = System.getProperty("user.dir") + File.separator + "geckodriver";
public final static String IE = System.getProperty("user.dir") + File.separator + "IEDriverServer";
public static WebDriver getWebDriver(String browser) { public static WebDriver getWebDriver(String browser) {
String end = "";
String os = System.getProperty("os.name");
if (os.contains(WINDOWS)){
end = ".exe";
}
if (Objects.equals(browser.toLowerCase(), Browser.FIREFOX)) { if (Objects.equals(browser.toLowerCase(), Browser.FIREFOX)) {
System.setProperty("webdriver.firefox.driver", WebDriverUtil.FIRE_FOX_EXE); System.setProperty("webdriver.firefox.driver", WebDriverUtil.FIRE_FOX + end);
return new FirefoxDriver(); return new FirefoxDriver();
} else if (Objects.equals(browser.toLowerCase(), Browser.CHROME)) { } else if (Objects.equals(browser.toLowerCase(), Browser.CHROME)) {
System.setProperty("webdriver.chrome.driver", WebDriverUtil.CHROME_EXE); System.setProperty("webdriver.chrome.driver", WebDriverUtil.CHROME + end);
ChromeOptions options = new ChromeOptions(); ChromeOptions options = new ChromeOptions();
LoggingPreferences logPrefs = new LoggingPreferences();
logPrefs.enable(LogType.BROWSER, Level.ALL);
options.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);
options.addArguments("–headless"); options.addArguments("–headless");
options.addArguments("–disable-gpu"); options.addArguments("–disable-gpu");
options.addArguments("–no-sandbox"); options.addArguments("–no-sandbox");
return new ChromeDriver(options); return new ChromeDriver(options);
} else if (Objects.equals(browser.toLowerCase(), Browser.IE)) { } else if (Objects.equals(browser.toLowerCase(), Browser.IE)) {
System.setProperty("webdriver.ie.driver", WebDriverUtil.IE_EXE); System.setProperty("webdriver.ie.driver", WebDriverUtil.IE + end);
return new InternetExplorerDriver(); return new InternetExplorerDriver();
} else { } else {
throw new RuntimeException("该浏览器不存在:" + browser); throw new RuntimeException("该浏览器不存在:" + browser);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论