From 78cb16fd194077af63b784acccd5fe955dbbcff7 Mon Sep 17 00:00:00 2001 From: guocan Date: Mon, 12 May 2025 10:11:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=BA=E6=99=AF=E6=89=A7=E8=A1=8Cbug?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/UiSceneStepsServiceImpl.java | 114 ++++++++++-------- 1 file changed, 61 insertions(+), 53 deletions(-) diff --git a/test-test/src/main/java/com/test/test/service/impl/UiSceneStepsServiceImpl.java b/test-test/src/main/java/com/test/test/service/impl/UiSceneStepsServiceImpl.java index b9878ee..28bfaff 100644 --- a/test-test/src/main/java/com/test/test/service/impl/UiSceneStepsServiceImpl.java +++ b/test-test/src/main/java/com/test/test/service/impl/UiSceneStepsServiceImpl.java @@ -63,7 +63,7 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService { * @param automationId * @return */ - public Map executeStep(Long automationId,String triggerMode) { + public Map executeStep(Long automationId, String triggerMode) { Map 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 assertions = gson.fromJson( assertionJson, - new TypeToken>(){}.getType() + new TypeToken>() { + }.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 validateAndGetSteps(Long automationId) { List 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 steps, Long reportId) { - System.setProperty("webdriver.chrome.driver", chromeDriverPath); - WebDriver driver = new ChromeDriver(); - SeleniumUtils seleniumUtils = new SeleniumUtils(driver); + private void executeAllSteps(List 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 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 extractbeforeSetting(List 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 assertionQOList = new ArrayList<>(); + List 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 filterBydataExtractionQOList(List settingList, SeleniumUtils seleniumUtils) { + public Map filterBydataExtractionQOList(List settingList, SeleniumUtils seleniumUtils) { List uiHighSettingVOS = settingList.stream() .filter(setting -> setting.getOperateType().equals("3") && setting.getIsDisabled() == 0) .toList(); - Map variableStorage = new HashMap<>(); + Map 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 extractafterSetting(List 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 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 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 { } - - } \ No newline at end of file