场景执行bug修改

This commit is contained in:
2025-05-12 10:11:05 +08:00
parent c99f639976
commit 78cb16fd19

View File

@@ -63,7 +63,7 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService {
* @param automationId
* @return
*/
public Map<String, Object> executeStep(Long automationId,String triggerMode) {
public Map<String, Object> executeStep(Long automationId, String triggerMode) {
Map<String, Object> result = new HashMap<>();
result.put("msg", "");
result.put("id", 0L);
@@ -94,9 +94,12 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService {
//创建报告步骤表
createSceneStepsReport(orderNumber, step, reportId);
}
System.setProperty("webdriver.chrome.driver", chromeDriverPath);
WebDriver driver = new ChromeDriver();
SeleniumUtils seleniumUtils = new SeleniumUtils(driver);
try {
// 3. 执行所有步骤
executeAllSteps(steps, reportId);
executeAllSteps(steps, reportId,seleniumUtils);
log.info("场景执行成功: {}", automationId);
uiReport.setConsoleStr("OK");
uiReport.setStatus(3);
@@ -136,7 +139,8 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService {
try {
List<AssertionReportVO> assertions = gson.fromJson(
assertionJson,
new TypeToken<List<AssertionReportVO>>(){}.getType()
new TypeToken<List<AssertionReportVO>>() {
}.getType()
);
int stepAssertionCount = assertions.size();
int stepSuccessCount = (int) assertions.stream()
@@ -158,7 +162,7 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService {
uiReport.setSuccessAssertion("0/0");
String globalAssertionResult = successAssertions.get() + "/" + totalAssertions.get();
uiReport.setSuccessAssertion(globalAssertionResult);
uiReport.setScenesSucceedNumber(scenesSucceedNumber);
uiReport.setScenesErrorNumber(scenesErrorNumber);
uiReport.setScenesNotNumber(0);
@@ -168,9 +172,12 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService {
uiReport.setFaiiRate(
stepsErrorNumber == 0 ? "0%" :
String.format("%.2f%%", (double) stepsErrorNumber / steps.size() * 100)
);
if (1 == uiReport.getStatus()){
uiReport.setStatus(4);
}
uiReportService.updateUiReport(uiReport);
//修改ui_automation
@@ -184,6 +191,9 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService {
uiAutomation1.setPassRate(stepsSucceedNumber == 0 ? "0%" :
String.format("%.2f%%", (double) stepsSucceedNumber / steps.size() * 100));
uiAutomationMapper.updateUiAutomation(uiAutomation1);
//关闭浏览器
seleniumUtils.quit();
}
return result;
}
@@ -196,7 +206,7 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService {
*/
private List<UiSceneSteps> validateAndGetSteps(Long automationId) {
List<UiSceneSteps> steps = uiSceneStepsMapper.selectUiSceneStepsById(automationId);
steps = steps.stream().filter(e -> e.getIsDisabled() == 0).collect(Collectors.toList());
steps = steps.stream().filter(e -> 0 == e.getIsDisabled() ).collect(Collectors.toList());
if (CollectionUtils.isEmpty(steps)) {
throw new IllegalArgumentException("步骤不能为空");
}
@@ -230,10 +240,7 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService {
*
* @param steps
*/
private void executeAllSteps(List<UiSceneSteps> steps, Long reportId) {
System.setProperty("webdriver.chrome.driver", chromeDriverPath);
WebDriver driver = new ChromeDriver();
SeleniumUtils seleniumUtils = new SeleniumUtils(driver);
private void executeAllSteps(List<UiSceneSteps> steps, Long reportId,SeleniumUtils seleniumUtils) {
Integer orderNumber = 0;
UiSceneStepsReport uiSceneStepsReport = new UiSceneStepsReport();
uiSceneStepsReport.setReportId(reportId);
@@ -249,7 +256,7 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService {
executeSingleStep(step, seleniumUtils, uiSceneStepsReports.get(0).getId(), uiHighSettingVOList);
}
//关闭浏览器
seleniumUtils.quit();
// seleniumUtils.quit();
}
private void executeSingleStep(UiSceneSteps step, SeleniumUtils seleniumUtils,
@@ -300,7 +307,7 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService {
execution, uiHighSettingVOList);
if (!shouldContinue) {
//关闭浏览器
seleniumUtils.quit();
// seleniumUtils.quit();
throw new IllegalArgumentException("步骤执行失败,根据设置终止场景执行");
}
}
@@ -412,7 +419,7 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService {
Map<String, Object> stringObjectMap = filterByAssertionQOList(afterSettingList, seleniumUtils);
//断言失败是否终止
String continueExecution1 = (String) stringObjectMap.get("continueExecution");
if (continueExecution1.equals("1")){
if (continueExecution1.equals("1")) {
continueExecution = false;
report.setLogInfo("");
report.setExecutionFlag("2");
@@ -433,8 +440,6 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService {
}
/**
* 提取前置操作
*
@@ -443,12 +448,13 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService {
*/
private List<UiHighSettingVO> extractbeforeSetting(List<UiHighSettingVO> settings) {
return settings.stream()
.filter(e -> "1".equals(e.getSettingType()) && e.getIsDisabled() == 0)
.filter(e -> "1".equals(e.getSettingType()) && 0 == e.getIsDisabled() )
.collect(Collectors.toList()); // 返回默认设置
}
/**
* 断言
*
* @param settingList
* @param seleniumUtils
* @return
@@ -469,7 +475,7 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService {
}
for (UiHighSettingVO uiHighSettingVO : uiHighSettingVOS) {
AssertionConfigQO assertion = uiHighSettingVO.getAssertionQOList();
List<AssertionQO> assertionQOList = new ArrayList<>();
List<AssertionQO> assertionQOList = new ArrayList<>();
assertionQOList.addAll(assertion.getPopupTexts());
assertionQOList.addAll(assertion.getElementAssertions());
assertionQOList.addAll(assertion.getDropdownBoxes());
@@ -480,7 +486,7 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService {
continue;
}
AssertionReportVO report = new AssertionReportVO();
report.setName("1".equals(assertionQO.getIsFailedAbort())?"assert":"verify");
report.setName("1".equals(assertionQO.getIsFailedAbort()) ? "assert" : "verify");
report.setIsSuccess("1"); // 默认成功
try {
@@ -565,9 +571,10 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService {
/**
* 处理元素断言
* @param assertionQO 断言配置
*
* @param assertionQO 断言配置
* @param seleniumUtils Selenium工具类
* @param report 断言报告
* @param report 断言报告
* @return 断言是否成功
*/
private boolean handleElementAssertion(AssertionQO assertionQO,
@@ -728,9 +735,10 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService {
/**
* 处理下拉框断言
* @param assertionQO 断言配置
*
* @param assertionQO 断言配置
* @param seleniumUtils Selenium工具类
* @param report 断言报告
* @param report 断言报告
* @return 断言是否成功
*/
private boolean handleDropdownAssertion(AssertionQO assertionQO,
@@ -826,9 +834,10 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService {
/**
* 处理网页标题断言
* @param assertionQO 断言配置
*
* @param assertionQO 断言配置
* @param seleniumUtils Selenium工具类
* @param report 断言报告
* @param report 断言报告
* @return 断言是否成功
*/
private boolean handleTitleAssertion(AssertionQO assertionQO,
@@ -859,14 +868,15 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService {
/**
* 获取数据提取集合
*
* @param settingList
* @return
*/
public Map<String,Object> filterBydataExtractionQOList(List<UiHighSettingVO> settingList, SeleniumUtils seleniumUtils) {
public Map<String, Object> filterBydataExtractionQOList(List<UiHighSettingVO> settingList, SeleniumUtils seleniumUtils) {
List<UiHighSettingVO> uiHighSettingVOS = settingList.stream()
.filter(setting -> setting.getOperateType().equals("3") && setting.getIsDisabled() == 0)
.toList();
Map<String,Object> variableStorage = new HashMap<>();
Map<String, Object> variableStorage = new HashMap<>();
if (CollectionUtils.isEmpty(uiHighSettingVOS)) {
return variableStorage;
}
@@ -882,8 +892,8 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService {
}
try {
String variableName = extraction.getValue();
String extractedValue = extractData(extraction,seleniumUtils);
variableStorage.put(variableName, extractedValue);
String extractedValue = extractData(extraction, seleniumUtils);
variableStorage.put(variableName, extractedValue);
log.info("Extracted '{}' = {}", variableName, extractedValue);
} catch (NoSuchElementException e) {
log.info("Extracted '" + extraction.getValue() + "' = NoSuchElementException");
@@ -900,11 +910,12 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService {
/**
* 获取数据提取集合具体实现
*
* @param extraction
* @param seleniumUtils
* @return
*/
private String extractData(DataExtractionQO extraction,SeleniumUtils seleniumUtils) {
private String extractData(DataExtractionQO extraction, SeleniumUtils seleniumUtils) {
if ("1".equals(extraction.getInformationType())) {
return seleniumUtils.extractWindowInformation(extraction.getWindowType());
} else if ("2".equals(extraction.getInformationType())) {
@@ -924,28 +935,27 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService {
elementLoc = extraction.getOperateLocValue();//值
}
element = seleniumUtils.findElement(locType, elementLoc);
switch (extraction.getElementType()) {
case "1": // 普通对象
return extraction.getElementAttribute(); // 直接返回属性值
case "2": // 元素文本
return element.getText();
case "3": // 元素值
return element.getAttribute("value");
case "4": // 元素属性
return element.getAttribute(extraction.getElementAttribute());
case "5": // CSS属性
return element.getCssValue(extraction.getElementAttribute());
case "6": // 匹配 xpath 的元素数量(storeXpathCount)
return String.valueOf(seleniumUtils.findElements(locType,elementLoc).size());
default:
return "";
}
switch (extraction.getElementType()) {
case "1": // 普通对象
return extraction.getElementAttribute(); // 直接返回属性值
case "2": // 元素文本
return element.getText();
case "3": // 元素值
return element.getAttribute("value");
case "4": // 元素属性
return element.getAttribute(extraction.getElementAttribute());
case "5": // CSS属性
return element.getCssValue(extraction.getElementAttribute());
case "6": // 匹配 xpath 的元素数量(storeXpathCount)
return String.valueOf(seleniumUtils.findElements(locType, elementLoc).size());
default:
return "";
}
}
return "";
}
/**
* 获取(前置//后置)等待时间
*
@@ -978,7 +988,7 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService {
*/
private List<UiHighSettingVO> extractafterSetting(List<UiHighSettingVO> settings) {
return settings.stream()
.filter(e -> "2".equals(e.getSettingType()) && e.getIsDisabled() == 0)
.filter(e -> "2".equals(e.getSettingType()) &&0 == e.getIsDisabled())
.collect(Collectors.toList()); // 返回默认设置
}
@@ -990,7 +1000,7 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService {
*/
private UiHighSettingVO extractErrorSetting(List<UiHighSettingVO> settings) {
return settings.stream()
.filter(e -> "3".equals(e.getSettingType()) && e.getIsDisabled() == 0)
.filter(e -> "3".equals(e.getSettingType()))
.findFirst()
.orElse(new UiHighSettingVO()); // 返回默认设置
}
@@ -1004,7 +1014,7 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService {
*/
private UiHighSettingVO extractOtherSetting(List<UiHighSettingVO> settings) {
return settings.stream()
.filter(e -> "4".equals(e.getSettingType()) && e.getIsDisabled() == 0)
.filter(e -> "4".equals(e.getSettingType()))
.findFirst()
.orElse(new UiHighSettingVO()); // 返回默认设置
}
@@ -1020,7 +1030,7 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService {
*/
private void openWebPage(UiSceneSteps step, SeleniumUtils seleniumUtils) {
//追加页面在新的页面打开url不勾选覆盖当前url 0不追加 1追加
Integer isAppendPage = step.getIsAppendPage(); // 0=当前页1=新标签页
Integer isAppendPage = step.getIsAppendPage() == null ? 0 : step.getIsAppendPage(); // 0=当前页1=新标签页
String url = step.getUrl();
log.info("打开网页:{}, 模式:{}", url, isAppendPage == 1 ? "新标签页" : "当前页");
if (isAppendPage != null && isAppendPage == 1) {
@@ -1494,6 +1504,4 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService {
}
}