feat: 步骤测试(在设备上单步试执行验证选择器)
This commit is contained in:
@@ -920,6 +920,7 @@ var _stepEditor={
|
|||||||
card.draggable=true;
|
card.draggable=true;
|
||||||
card.dataset.idx=idx;
|
card.dataset.idx=idx;
|
||||||
card.dataset.stepId=step.id||'';
|
card.dataset.stepId=step.id||'';
|
||||||
|
card.dataset.stepType=step.type;
|
||||||
if(this._selected&&this._selected.indexOf(step.id)>=0)card.classList.add('selected');
|
if(this._selected&&this._selected.indexOf(step.id)>=0)card.classList.add('selected');
|
||||||
// head
|
// head
|
||||||
var head=document.createElement('div');
|
var head=document.createElement('div');
|
||||||
@@ -1145,6 +1146,50 @@ var _stepEditor={
|
|||||||
_makeStep:function(lib){
|
_makeStep:function(lib){
|
||||||
return {id:_newStepId(),type:lib.type,label:lib.label,params:JSON.parse(JSON.stringify(lib.params))};
|
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){
|
addStep:function(type){
|
||||||
var lib=_findLib(type);
|
var lib=_findLib(type);
|
||||||
if(!lib)return;
|
if(!lib)return;
|
||||||
|
|||||||
Reference in New Issue
Block a user