feat: 步骤测试(在设备上单步试执行验证选择器)
This commit is contained in:
@@ -920,6 +920,7 @@ var _stepEditor={
|
||||
card.draggable=true;
|
||||
card.dataset.idx=idx;
|
||||
card.dataset.stepId=step.id||'';
|
||||
card.dataset.stepType=step.type;
|
||||
if(this._selected&&this._selected.indexOf(step.id)>=0)card.classList.add('selected');
|
||||
// head
|
||||
var head=document.createElement('div');
|
||||
@@ -1145,6 +1146,50 @@ var _stepEditor={
|
||||
_makeStep:function(lib){
|
||||
return {id:_newStepId(),type:lib.type,label:lib.label,params:JSON.parse(JSON.stringify(lib.params))};
|
||||
},
|
||||
// 测试此步骤:在选中设备上试执行当前步骤,验证选择器
|
||||
_testStep:function(btn){
|
||||
var card=btn.closest('.step-card');
|
||||
if(!card)return;
|
||||
var type=card.dataset.stepType||'';
|
||||
var params={};
|
||||
card.querySelectorAll('[data-key]').forEach(function(inp){
|
||||
if(inp.type==='checkbox')params[inp.dataset.key]=inp.checked;
|
||||
else if(inp.type==='number')params[inp.dataset.key]=parseFloat(inp.value)||0;
|
||||
else params[inp.dataset.key]=inp.value;
|
||||
});
|
||||
this._pendingTest={type:type,label:'测试',params:params};
|
||||
this._showTestDevicePicker();
|
||||
},
|
||||
_showTestDevicePicker:function(){
|
||||
document.getElementById('test-modal-title').textContent='测试步骤 - 选择设备';
|
||||
document.getElementById('test-modal-body').innerHTML=
|
||||
'<div class="el-device-grid"><div class="egd-title">选择在哪个设备上试执行</div><div id="test-device-list">加载中...</div></div>';
|
||||
document.getElementById('test-overlay').classList.add('show');
|
||||
var self=this;
|
||||
apiGet('/api/uiauto/devices').then(function(r){
|
||||
var list=document.getElementById('test-device-list');
|
||||
if(!list)return;
|
||||
if(!r||!r.ok){list.innerHTML='<div class="se-empty">'+esc((r&&r.error)||'获取设备失败')+'</div>';return;}
|
||||
list.innerHTML=(r.devices||[]).map(function(d){
|
||||
return '<div class="el-device-card" onclick="_stepEditor._runTestStep(\''+esc(d.serial)+'\')">'+
|
||||
'<div class="edc-icon">📱</div>'+
|
||||
'<div class="edc-info"><div class="edc-serial">'+esc(d.serial)+'</div>'+
|
||||
'<div class="edc-model">'+esc(d.model||d.product||'')+'</div></div></div>';
|
||||
}).join('')||'<div class="se-empty">无可用设备</div>';
|
||||
});
|
||||
},
|
||||
_runTestStep:async function(serial){
|
||||
var step=this._pendingTest;
|
||||
var body=document.getElementById('test-modal-body');
|
||||
if(!step||!body)return;
|
||||
body.innerHTML='<div class="se-empty">正在 '+esc(serial)+' 上执行(adb + u2 连接约需几秒)...<div class="hint">请稍候,期间不要操作该设备</div></div>';
|
||||
var r=await apiPost('/api/steps/test',{serial:serial,step:step});
|
||||
if(!r)return;
|
||||
var icon=r.result==='命中'?'✅':(r.result==='未找到'?'❌':'▶');
|
||||
body.innerHTML='<div class="se-empty" style="padding:20px">'+icon+' <strong>'+esc(r.result||'已执行')+'</strong>'+
|
||||
'<div class="hint" style="margin-top:8px">'+esc(r.msg||'')+'</div>'+
|
||||
'<button class="btn btn-primary" style="margin-top:14px" onclick="closeTestModal()">完成</button></div>';
|
||||
},
|
||||
addStep:function(type){
|
||||
var lib=_findLib(type);
|
||||
if(!lib)return;
|
||||
|
||||
Reference in New Issue
Block a user