ui测试前后端问题修复
This commit is contained in:
@@ -1,9 +1,11 @@
|
|||||||
package com.test.test.controller;
|
package com.test.test.controller;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import com.test.common.utils.SeleniumUtils;
|
import com.test.common.utils.SeleniumUtils;
|
||||||
import com.test.test.domain.UiAutomation;
|
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.UiAutomationDataQO;
|
||||||
import com.test.test.domain.qo.UiAutomationQO;
|
import com.test.test.domain.qo.UiAutomationQO;
|
||||||
import com.test.test.service.IUiAutomationService;
|
import com.test.test.service.IUiAutomationService;
|
||||||
|
|||||||
@@ -50,10 +50,10 @@ public class UiSceneStepsQO extends BaseEntity
|
|||||||
private String operateObject;
|
private String operateObject;
|
||||||
|
|
||||||
/** 元素库名称 */
|
/** 元素库名称 */
|
||||||
private Integer operateGroupId;
|
private Long operateGroupId;
|
||||||
|
|
||||||
/** 元素id */
|
/** 元素id */
|
||||||
private Integer operateElementId;
|
private Long operateElementId;
|
||||||
|
|
||||||
/** 元素定位类型 */
|
/** 元素定位类型 */
|
||||||
private String operateLocType;
|
private String operateLocType;
|
||||||
|
|||||||
@@ -44,10 +44,10 @@ public class UiSceneStepsVO
|
|||||||
private String operateObject;
|
private String operateObject;
|
||||||
|
|
||||||
/** 元素库名称 */
|
/** 元素库名称 */
|
||||||
private Integer operateGroupId;
|
private Long operateGroupId;
|
||||||
|
|
||||||
/** 元素id */
|
/** 元素id */
|
||||||
private Integer operateElementId;
|
private Long operateElementId;
|
||||||
|
|
||||||
/** 元素定位类型 */
|
/** 元素定位类型 */
|
||||||
private String operateLocType;
|
private String operateLocType;
|
||||||
|
|||||||
@@ -99,18 +99,19 @@ public class UiSceneStepsServiceImpl implements IUiSceneStepsService {
|
|||||||
createSceneStepsReport(orderNumber, step, reportId);
|
createSceneStepsReport(orderNumber, step, reportId);
|
||||||
}
|
}
|
||||||
System.setProperty("webdriver.chrome.driver", chromeDriverPath);
|
System.setProperty("webdriver.chrome.driver", chromeDriverPath);
|
||||||
// 2. 创建一个临时目录作为 user-data-dir
|
|
||||||
String uniqueUserDataDir="/tmp/chrome-"+ UUID.randomUUID();
|
|
||||||
|
|
||||||
// 3. 配置 ChromeOptions
|
// 配置 ChromeOptions
|
||||||
ChromeOptions options = new ChromeOptions();
|
ChromeOptions options = new ChromeOptions();
|
||||||
options.addArguments("--headless"); // 改用传统无头模式(非 `--headless=new`)
|
options.addArguments("--headless");
|
||||||
options.addArguments("--incognito"); // 无痕模式,不使用 user-data-dir
|
options.addArguments("--no-sandbox");
|
||||||
options.addArguments("--no-sandbox"); // Docker/Linux 可能需要
|
options.addArguments("--disable-dev-shm-usage");
|
||||||
options.addArguments("--disable-dev-shm-usage"); // 避免 /dev/shm 不足
|
options.addArguments("--remote-allow-origins=*");
|
||||||
options.addArguments("--remote-allow-origins=*"); // Chrome 11+ 需要
|
options.addArguments("--disable-gpu");
|
||||||
// options.addArguments("--user-data-dir=" + uniqueUserDataDir); // 关键:唯一目录
|
options.addArguments("--disable-extensions");
|
||||||
// 4. 启动 Chrome
|
options.addArguments("--disable-plugins");
|
||||||
|
options.addArguments("--disable-software-rasterizer");
|
||||||
|
|
||||||
|
// 创建 ChromeDriver
|
||||||
WebDriver driver = new ChromeDriver(options);
|
WebDriver driver = new ChromeDriver(options);
|
||||||
|
|
||||||
SeleniumUtils seleniumUtils = new SeleniumUtils(driver);
|
SeleniumUtils seleniumUtils = new SeleniumUtils(driver);
|
||||||
|
|||||||
@@ -953,13 +953,12 @@ export default {
|
|||||||
// 其他设置
|
// 其他设置
|
||||||
case '4':
|
case '4':
|
||||||
if (item.otherSettingsQO != null) {
|
if (item.otherSettingsQO != null) {
|
||||||
this.saveForm.waitElementTime = item.otherSettingsQO.waitElementTime
|
this.saveForm.waitElementTime = item.otherSettingsQO.waitElementTime || 15000
|
||||||
this.saveForm.screenshotConfiguration = item.otherSettingsQO.screenshotConfiguration
|
this.saveForm.screenshotConfiguration = item.otherSettingsQO.screenshotConfiguration || 2
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
},
|
},
|
||||||
saveForm: {
|
saveForm: {
|
||||||
handler(newVal, oldVal) {
|
handler(newVal, oldVal) {
|
||||||
@@ -977,8 +976,10 @@ export default {
|
|||||||
// 其他设置
|
// 其他设置
|
||||||
var param4 = {
|
var param4 = {
|
||||||
settingType: '4',
|
settingType: '4',
|
||||||
|
otherSettingsQO: {
|
||||||
waitElementTime: this.saveForm.waitElementTime,
|
waitElementTime: this.saveForm.waitElementTime,
|
||||||
screenshotConfiguration: this.saveForm.screenshotConfiguration,
|
screenshotConfiguration: this.saveForm.screenshotConfiguration
|
||||||
|
}
|
||||||
}
|
}
|
||||||
newList.push(param4)
|
newList.push(param4)
|
||||||
this.$emit('changeSetting', newList)
|
this.$emit('changeSetting', newList)
|
||||||
|
|||||||
@@ -32,7 +32,6 @@
|
|||||||
<div v-if="scope.row.status === '3'">已完成</div>
|
<div v-if="scope.row.status === '3'">已完成</div>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table-column>
|
|
||||||
<el-table-column prop="label" label="标签" min-width="150" align="center" />
|
<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="createBy" label="创建人" min-width="150" align="center" sortable />
|
||||||
<el-table-column prop="dutyBy" label="责任人" min-width="150" align="center" sortable />
|
<el-table-column prop="dutyBy" label="责任人" min-width="150" align="center" sortable />
|
||||||
|
|||||||
@@ -101,12 +101,20 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- 元素定位 -->
|
<!-- 元素定位 -->
|
||||||
<div v-show="saveForm.operateObject === '2'" class="operateObject-wrap">
|
<div v-show="saveForm.operateObject === '2'" class="operateObject-wrap">
|
||||||
<el-select v-model="saveForm.operateLocType" class="select" @change="getOperateLoc">
|
<el-select v-model="saveForm.operateLocType" class="select">
|
||||||
<el-option v-for="item in groupList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
<el-option label="id" value="id"></el-option>
|
||||||
</el-select>
|
<el-option label="name" value="name"></el-option>
|
||||||
<el-select v-model="saveForm.operateLocValue" class="select">
|
<el-option label="className" value="className"></el-option>
|
||||||
<el-option v-for="item in elementList" :key="item.id" :label="item.name" :value="item.id"></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-select>
|
||||||
|
<el-input v-model="saveForm.operateLocValue" placeholder="请输入元素名称" class="select"></el-input>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -155,12 +163,20 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- 元素定位 -->
|
<!-- 元素定位 -->
|
||||||
<div v-show="saveForm.operateObject === '2'" class="operateObject-wrap">
|
<div v-show="saveForm.operateObject === '2'" class="operateObject-wrap">
|
||||||
<el-select v-model="saveForm.operateLocType" class="select" @change="getOperateLoc">
|
<el-select v-model="saveForm.operateLocType" class="select">
|
||||||
<el-option v-for="item in groupList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
<el-option label="id" value="id"></el-option>
|
||||||
</el-select>
|
<el-option label="name" value="name"></el-option>
|
||||||
<el-select v-model="saveForm.operateLocValue" class="select">
|
<el-option label="className" value="className"></el-option>
|
||||||
<el-option v-for="item in elementList" :key="item.id" :label="item.name" :value="item.id"></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-select>
|
||||||
|
<el-input v-model="saveForm.operateLocValue" placeholder="请输入元素名称" class="select"></el-input>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -216,12 +232,20 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- 元素定位 -->
|
<!-- 元素定位 -->
|
||||||
<div v-show="saveForm.operateObject === '2'" class="operateObject-wrap">
|
<div v-show="saveForm.operateObject === '2'" class="operateObject-wrap">
|
||||||
<el-select v-model="saveForm.operateLocType" class="select" @change="getOperateLoc">
|
<el-select v-model="saveForm.operateLocType" class="select">
|
||||||
<el-option v-for="item in groupList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
<el-option label="id" value="id"></el-option>
|
||||||
</el-select>
|
<el-option label="name" value="name"></el-option>
|
||||||
<el-select v-model="saveForm.operateLocValue" class="select">
|
<el-option label="className" value="className"></el-option>
|
||||||
<el-option v-for="item in elementList" :key="item.id" :label="item.name" :value="item.id"></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-select>
|
||||||
|
<el-input v-model="saveForm.operateLocValue" placeholder="请输入元素名称" class="select"></el-input>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -249,12 +273,20 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- 元素定位 -->
|
<!-- 元素定位 -->
|
||||||
<div v-show="saveForm.operateObject === '2'" class="operateObject-wrap">
|
<div v-show="saveForm.operateObject === '2'" class="operateObject-wrap">
|
||||||
<el-select v-model="saveForm.operateLocType" class="select" @change="getOperateLoc">
|
<el-select v-model="saveForm.operateLocType" class="select">
|
||||||
<el-option v-for="item in groupList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
<el-option label="id" value="id"></el-option>
|
||||||
</el-select>
|
<el-option label="name" value="name"></el-option>
|
||||||
<el-select v-model="saveForm.operateLocValue" class="select">
|
<el-option label="className" value="className"></el-option>
|
||||||
<el-option v-for="item in elementList" :key="item.id" :label="item.name" :value="item.id"></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-select>
|
||||||
|
<el-input v-model="saveForm.operateLocValue" placeholder="请输入元素名称" class="select"></el-input>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -289,12 +321,20 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- 元素定位 -->
|
<!-- 元素定位 -->
|
||||||
<div v-show="saveForm.operateObject === '2'" class="operateObject-wrap">
|
<div v-show="saveForm.operateObject === '2'" class="operateObject-wrap">
|
||||||
<el-select v-model="saveForm.operateLocType" class="select" @change="getOperateLoc">
|
<el-select v-model="saveForm.operateLocType" class="select">
|
||||||
<el-option v-for="item in groupList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
<el-option label="id" value="id"></el-option>
|
||||||
</el-select>
|
<el-option label="name" value="name"></el-option>
|
||||||
<el-select v-model="saveForm.operateLocValue" class="select">
|
<el-option label="className" value="className"></el-option>
|
||||||
<el-option v-for="item in elementList" :key="item.id" :label="item.name" :value="item.id"></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-select>
|
||||||
|
<el-input v-model="saveForm.operateLocValue" placeholder="请输入元素名称" class="select"></el-input>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
@@ -463,7 +503,7 @@ export default {
|
|||||||
// 判断步骤类型
|
// 判断步骤类型
|
||||||
switch (newVal.stepType) {
|
switch (newVal.stepType) {
|
||||||
case '1': // 提交表单
|
case '1': // 提交表单
|
||||||
this.typeTitle = '针对属性type="submit”的元素,用于提交表单数据'
|
this.typeTitle = '针对属性type="submit"的元素,用于提交表单数据'
|
||||||
break
|
break
|
||||||
case '2': // 下拉框操作
|
case '2': // 下拉框操作
|
||||||
this.typeTitle = '对下拉选项进行操作,可实现单选,多选,以及取消选择的操作'
|
this.typeTitle = '对下拉选项进行操作,可实现单选,多选,以及取消选择的操作'
|
||||||
|
|||||||
Reference in New Issue
Block a user