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

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

上级 87aa25c9
......@@ -37,6 +37,11 @@ public class Project {
*/
private String url;
/**
* 是否为快速模式
*/
private Boolean fastmode;
/**
* 输入参数
*/
......
......@@ -80,6 +80,8 @@ public class SeleniumExecutor {
private Actions actions;
private Boolean isRunning = false;
/**
* 当前进行的窗口页
*/
......@@ -91,6 +93,7 @@ public class SeleniumExecutor {
private String currentUrl;
public Report execute(Project project) {
isRunning = true;
historyUrls.clear();
urlQueue.clear();
clickElementQueue.clear();
......@@ -103,14 +106,18 @@ public class SeleniumExecutor {
String os = Strings.EMPTY;
currentUrl = project.getUrl();
currentWindow = driver.getWindowHandle();
while (nonNull(currentUrl)) {
Measure measure = testUrl(currentUrl);
if (nonNull(measure)) {
measures.add(measure);
try {
while (nonNull(currentUrl)) {
Measure measure = testUrl(currentUrl);
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(
null,
project.getId(),
......@@ -121,6 +128,10 @@ public class SeleniumExecutor {
);
}
public void quit() {
isRunning = false;
}
private Measure testUrl(String currentUrl) {
Measure measure = new Measure();
measure.setUrl(currentUrl);
......@@ -186,32 +197,41 @@ public class SeleniumExecutor {
private List<ElementDetail> traversal() {
List<ElementDetail> elementDetails = Lists.newArrayList();
while (!inputElementQueue.isEmpty()) {
ElementEntry elementEntry = inputElementQueue.poll();
ElementFeature feature = elementEntry.getFeature();
if (!currentHistoryFeatures.contains(feature)) {
ElementDetail elementDetail = actInput(elementEntry);
if (!isSkipped(elementDetail)) {
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 (isRunning) {
ElementEntry elementEntry = inputElementQueue.poll();
ElementFeature feature = elementEntry.getFeature();
if (!currentHistoryFeatures.contains(feature)) {
ElementDetail elementDetail = actInput(elementEntry);
if (!isSkipped(elementDetail)) {
elementDetails.add(elementDetail);
}
}
} else {
if (!currentHistoryFeatures.contains(feature)) {
ElementDetail elementDetail = actClick(elementEntry);
if (!isSkipped(elementDetail)) {
elementDetails.add(elementDetail);
break;
}
}
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;
......@@ -233,10 +253,9 @@ public class SeleniumExecutor {
long startTime = System.currentTimeMillis();
log.info("input操作");
if (!inputs.isEmpty()) {
Input input = inputs.get(0);
Input input = inputs.remove(0);
element.sendKeys(input.getValue());
element.submit();
inputs.remove(0);
}
success = true;
long endTime = System.currentTimeMillis();
......
......@@ -6,6 +6,9 @@ import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
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.LoggerFactory;
......@@ -13,31 +16,41 @@ import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Objects;
import java.util.logging.Level;
public class WebDriverUtil {
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) {
String end = "";
String os = System.getProperty("os.name");
if (os.contains(WINDOWS)){
end = ".exe";
}
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();
} 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();
LoggingPreferences logPrefs = new LoggingPreferences();
logPrefs.enable(LogType.BROWSER, Level.ALL);
options.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);
options.addArguments("–headless");
options.addArguments("–disable-gpu");
options.addArguments("–no-sandbox");
return new ChromeDriver(options);
} 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();
} else {
throw new RuntimeException("该浏览器不存在:" + browser);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论