ui测试前后端问题修复

This commit is contained in:
2025-05-27 09:18:47 +08:00
parent e7248e613a
commit 2965095148
7 changed files with 90 additions and 47 deletions

View File

@@ -1,9 +1,11 @@
package com.test.test.controller;
import java.util.List;
import java.util.Map;
import com.test.common.utils.SeleniumUtils;
import com.test.test.domain.UiAutomation;
import com.test.test.domain.UiReport;
import com.test.test.domain.qo.UiAutomationDataQO;
import com.test.test.domain.qo.UiAutomationQO;
import com.test.test.service.IUiAutomationService;

View File

@@ -50,10 +50,10 @@ public class UiSceneStepsQO extends BaseEntity
private String operateObject;
/** 元素库名称 */
private Integer operateGroupId;
private Long operateGroupId;
/** 元素id */
private Integer operateElementId;
private Long operateElementId;
/** 元素定位类型 */
private String operateLocType;

View File

@@ -44,10 +44,10 @@ public class UiSceneStepsVO
private String operateObject;
/** 元素库名称 */
private Integer operateGroupId;
private Long operateGroupId;
/** 元素id */
private Integer operateElementId;
private Long operateElementId;
/** 元素定位类型 */
private String operateLocType;

View File

@@ -99,18 +99,19 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService {
createSceneStepsReport(orderNumber, step, reportId);
}
System.setProperty("webdriver.chrome.driver", chromeDriverPath);
// 2. 创建一个临时目录作为 user-data-dir
String uniqueUserDataDir="/tmp/chrome-"+ UUID.randomUUID();
// 3. 配置 ChromeOptions
// 配置 ChromeOptions
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless"); // 改用传统无头模式(非 `--headless=new`
options.addArguments("--incognito"); // 无痕模式,不使用 user-data-dir
options.addArguments("--no-sandbox"); // Docker/Linux 可能需要
options.addArguments("--disable-dev-shm-usage"); // 避免 /dev/shm 不足
options.addArguments("--remote-allow-origins=*"); // Chrome 11+ 需要
// options.addArguments("--user-data-dir=" + uniqueUserDataDir); // 关键:唯一目录
// 4. 启动 Chrome
options.addArguments("--headless");
options.addArguments("--no-sandbox");
options.addArguments("--disable-dev-shm-usage");
options.addArguments("--remote-allow-origins=*");
options.addArguments("--disable-gpu");
options.addArguments("--disable-extensions");
options.addArguments("--disable-plugins");
options.addArguments("--disable-software-rasterizer");
// 创建 ChromeDriver
WebDriver driver = new ChromeDriver(options);
SeleniumUtils seleniumUtils = new SeleniumUtils(driver);

View File

@@ -953,13 +953,12 @@ export default {
// 其他设置
case '4':
if (item.otherSettingsQO != null) {
this.saveForm.waitElementTime = item.otherSettingsQO.waitElementTime
this.saveForm.screenshotConfiguration = item.otherSettingsQO.screenshotConfiguration
this.saveForm.waitElementTime = item.otherSettingsQO.waitElementTime || 15000
this.saveForm.screenshotConfiguration = item.otherSettingsQO.screenshotConfiguration || 2
}
break
}
})
},
saveForm: {
handler(newVal, oldVal) {
@@ -977,8 +976,10 @@ export default {
// 其他设置
var param4 = {
settingType: '4',
waitElementTime: this.saveForm.waitElementTime,
screenshotConfiguration: this.saveForm.screenshotConfiguration,
otherSettingsQO: {
waitElementTime: this.saveForm.waitElementTime,
screenshotConfiguration: this.saveForm.screenshotConfiguration
}
}
newList.push(param4)
this.$emit('changeSetting', newList)

View File

@@ -32,7 +32,6 @@
<div v-if="scope.row.status === '3'">已完成</div>
</template>
</el-table-column>
</el-table-column>
<el-table-column prop="label" label="标签" min-width="150" align="center" />
<el-table-column prop="createBy" label="创建人" min-width="150" align="center" sortable />
<el-table-column prop="dutyBy" label="责任人" min-width="150" align="center" sortable />

View File

@@ -101,12 +101,20 @@
</div>
<!-- 元素定位 -->
<div v-show="saveForm.operateObject === '2'" class="operateObject-wrap">
<el-select v-model="saveForm.operateLocType" class="select" @change="getOperateLoc">
<el-option v-for="item in groupList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
<el-select v-model="saveForm.operateLocValue" class="select">
<el-option v-for="item in elementList" :key="item.id" :label="item.name" :value="item.id"></el-option>
<el-select v-model="saveForm.operateLocType" class="select">
<el-option label="id" value="id"></el-option>
<el-option label="name" value="name"></el-option>
<el-option label="className" value="className"></el-option>
<el-option label="tagName" value="tagName"></el-option>
<el-option label="linkText" value="linkText"></el-option>
<el-option label="partialLinkText" value="partialLinkText"></el-option>
<el-option label="css" value="css"></el-option>
<el-option label="xpath" value="xpath"></el-option>
<el-option label="table" value="table"></el-option>
<el-option label="value" value="value"></el-option>
<el-option label="index" value="index"></el-option>
</el-select>
<el-input v-model="saveForm.operateLocValue" placeholder="请输入元素名称" class="select"></el-input>
</div>
</div>
</el-form-item>
@@ -155,12 +163,20 @@
</div>
<!-- 元素定位 -->
<div v-show="saveForm.operateObject === '2'" class="operateObject-wrap">
<el-select v-model="saveForm.operateLocType" class="select" @change="getOperateLoc">
<el-option v-for="item in groupList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
<el-select v-model="saveForm.operateLocValue" class="select">
<el-option v-for="item in elementList" :key="item.id" :label="item.name" :value="item.id"></el-option>
<el-select v-model="saveForm.operateLocType" class="select">
<el-option label="id" value="id"></el-option>
<el-option label="name" value="name"></el-option>
<el-option label="className" value="className"></el-option>
<el-option label="tagName" value="tagName"></el-option>
<el-option label="linkText" value="linkText"></el-option>
<el-option label="partialLinkText" value="partialLinkText"></el-option>
<el-option label="css" value="css"></el-option>
<el-option label="xpath" value="xpath"></el-option>
<el-option label="table" value="table"></el-option>
<el-option label="value" value="value"></el-option>
<el-option label="index" value="index"></el-option>
</el-select>
<el-input v-model="saveForm.operateLocValue" placeholder="请输入元素名称" class="select"></el-input>
</div>
</div>
</el-form-item>
@@ -216,12 +232,20 @@
</div>
<!-- 元素定位 -->
<div v-show="saveForm.operateObject === '2'" class="operateObject-wrap">
<el-select v-model="saveForm.operateLocType" class="select" @change="getOperateLoc">
<el-option v-for="item in groupList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
<el-select v-model="saveForm.operateLocValue" class="select">
<el-option v-for="item in elementList" :key="item.id" :label="item.name" :value="item.id"></el-option>
<el-select v-model="saveForm.operateLocType" class="select">
<el-option label="id" value="id"></el-option>
<el-option label="name" value="name"></el-option>
<el-option label="className" value="className"></el-option>
<el-option label="tagName" value="tagName"></el-option>
<el-option label="linkText" value="linkText"></el-option>
<el-option label="partialLinkText" value="partialLinkText"></el-option>
<el-option label="css" value="css"></el-option>
<el-option label="xpath" value="xpath"></el-option>
<el-option label="table" value="table"></el-option>
<el-option label="value" value="value"></el-option>
<el-option label="index" value="index"></el-option>
</el-select>
<el-input v-model="saveForm.operateLocValue" placeholder="请输入元素名称" class="select"></el-input>
</div>
</div>
</el-form-item>
@@ -249,12 +273,20 @@
</div>
<!-- 元素定位 -->
<div v-show="saveForm.operateObject === '2'" class="operateObject-wrap">
<el-select v-model="saveForm.operateLocType" class="select" @change="getOperateLoc">
<el-option v-for="item in groupList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
<el-select v-model="saveForm.operateLocValue" class="select">
<el-option v-for="item in elementList" :key="item.id" :label="item.name" :value="item.id"></el-option>
<el-select v-model="saveForm.operateLocType" class="select">
<el-option label="id" value="id"></el-option>
<el-option label="name" value="name"></el-option>
<el-option label="className" value="className"></el-option>
<el-option label="tagName" value="tagName"></el-option>
<el-option label="linkText" value="linkText"></el-option>
<el-option label="partialLinkText" value="partialLinkText"></el-option>
<el-option label="css" value="css"></el-option>
<el-option label="xpath" value="xpath"></el-option>
<el-option label="table" value="table"></el-option>
<el-option label="value" value="value"></el-option>
<el-option label="index" value="index"></el-option>
</el-select>
<el-input v-model="saveForm.operateLocValue" placeholder="请输入元素名称" class="select"></el-input>
</div>
</div>
</el-form-item>
@@ -289,12 +321,20 @@
</div>
<!-- 元素定位 -->
<div v-show="saveForm.operateObject === '2'" class="operateObject-wrap">
<el-select v-model="saveForm.operateLocType" class="select" @change="getOperateLoc">
<el-option v-for="item in groupList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
<el-select v-model="saveForm.operateLocValue" class="select">
<el-option v-for="item in elementList" :key="item.id" :label="item.name" :value="item.id"></el-option>
<el-select v-model="saveForm.operateLocType" class="select">
<el-option label="id" value="id"></el-option>
<el-option label="name" value="name"></el-option>
<el-option label="className" value="className"></el-option>
<el-option label="tagName" value="tagName"></el-option>
<el-option label="linkText" value="linkText"></el-option>
<el-option label="partialLinkText" value="partialLinkText"></el-option>
<el-option label="css" value="css"></el-option>
<el-option label="xpath" value="xpath"></el-option>
<el-option label="table" value="table"></el-option>
<el-option label="value" value="value"></el-option>
<el-option label="index" value="index"></el-option>
</el-select>
<el-input v-model="saveForm.operateLocValue" placeholder="请输入元素名称" class="select"></el-input>
</div>
</div>
</el-form-item>
@@ -463,7 +503,7 @@ export default {
// 判断步骤类型
switch (newVal.stepType) {
case '1': // 提交表单
this.typeTitle = '针对属性type="submit的元素,用于提交表单数据'
this.typeTitle = '针对属性type="submit"的元素,用于提交表单数据'
break
case '2': // 下拉框操作
this.typeTitle = '对下拉选项进行操作,可实现单选,多选,以及取消选择的操作'