From 4bc0090f54866fa02c4b0fb8792a55b13977ea35 Mon Sep 17 00:00:00 2001 From: Yanis Wang Date: Mon, 20 Mar 2017 19:41:47 +0800 Subject: [PATCH] ## ver 2.4.7 (2017-3-20) 1. Fix: insert var failed when add new var in iframe context 2. Add: support get data-testid before get id 3. Add: add new feature eval jscode in browser side --- CHANGE.md | 6 +++ chrome-extension/img/jscode.png | Bin 0 -> 1529 bytes chrome-extension/js/foreground.js | 69 +++++++++++++++++++++++++----- chrome-extension/js/mobile.js | 8 ++-- chrome-extension/manifest.json | 3 +- i18n/en.js | 6 ++- i18n/zh-cn.js | 6 ++- i18n/zh-tw.js | 6 ++- lib/init.js | 2 +- lib/start.js | 4 ++ package.json | 2 +- tool/uirecorder.crx | Bin 135441 -> 137440 bytes 12 files changed, 91 insertions(+), 21 deletions(-) create mode 100644 chrome-extension/img/jscode.png diff --git a/CHANGE.md b/CHANGE.md index 88fa772..1171b24 100644 --- a/CHANGE.md +++ b/CHANGE.md @@ -1,6 +1,12 @@ UI Recorder change log ==================== +## ver 2.4.7 (2017-3-20) + +1. Fix: insert var failed when add new var in iframe context +2. Add: support get data-testid before get id +3. Add: add new feature eval jscode in browser side + ## ver 2.4.6 (2017-3-18) 1. Add: add localhost hosts tip for mac system diff --git a/chrome-extension/img/jscode.png b/chrome-extension/img/jscode.png new file mode 100644 index 0000000000000000000000000000000000000000..643faa597e0147fa6a028b429448464d78ec4536 GIT binary patch literal 1529 zcmViiWf*?WrKerjt?LGZ z0l|OLJDi7?ANL{ zsgPbVOa?Z}OGHtCgUl(5nydzwc2_R>fricD_R8LMJ9fNOeVpBlc16|L;%$x0_xf(; zU9@8Cu)wodyg&D`PmZvg)uwN*VSxdS?fm^5%USzJd8 z0T8^)-!6_*t`Yt5`-Krk0JAsrM|J+wZeMI2OBPNBKw^TF^WYt0tUrb^y71$B+z!d= zw{!&JU)^(6m?Z-M@7OunZY3tb8%S0niJ-eb0-5ROqJzbGviN7t^x|0)ya<#3^#u8k z)CCR_Tzg-bC^fDOmUxl^Fqq)=r7I*r1I7^XHyj{|7-;ScK<0LgT??wpkA zLI=@jjKT$pJ2(J|nU?BP29TjR5DP(LRK8CH(B3xyv#0$?ssIGv^0$g+PV(9z$cCgk z**GW7W2c#BiU9SyEiI`6kcF&qW!ZL;3_hDrAE1)O(VupB^!BIC!l zUYMd37%T#kGeDWRh#0suph2U9#H3kwLzJPp-3ZReKxjs$)z<~dN?cJp<+S#j@Yk$a)i8T1XF(Z` z0m1j=s@tLjev;RPrtUz@ZA`dIXm=q>}gMPij~*tfGTc&YxdH zGh?wNToY&xV$q$6`l`oK{NgHvey)athFedch2C%u=H)9eR22oe88{ymQ21U$Z{yD8 zWAdj=fKEv*?U5y@|L9}PJAA?d!5MHzG$R_=uuw@g#Ewk&p=8-I1nc%dc6;DIc?Ol6 z{aE_f1x)o23x z4{dAdKwm^dcThzq<^Mq~7)3Xc66NK2Zx3Ww8f2%-QvGvtCg3xFrxlT0z%oV1SI5r- z{@owa9i2QT_*%XPz31c1rgH|=;FlZMug%Uq=yFOZ7?)u&KUfJO@Y8h$->Cpv?jDcX zWu;WskZ)%fqMc>+zR&g?<$r>zG|r?r(9=7X1&5&^5LZ^pbs zzm>){z(I`5TD{1nhNW>(w!`qgRuX1B_5u_{0#$$Uy^S3Ly3o{ fIDc!~zXA*Z)F%X!Vn6e#00000NkvXXu0mjfx8BCQ literal 0 HcmV?d00001 diff --git a/chrome-extension/js/foreground.js b/chrome-extension/js/foreground.js index b5b3696..66e1174 100644 --- a/chrome-extension/js/foreground.js +++ b/chrome-extension/js/foreground.js @@ -153,7 +153,7 @@ var relativePath = ''; var tagName = target.nodeName.toLowerCase(); var tempPath; - var idValue = target.getAttribute && mapPathAttrs.id && target.getAttribute('id'); + var idValue = target.getAttribute && mapPathAttrs.id && (target.getAttribute('data-testid') || target.getAttribute('id')); var nameValue = target.getAttribute && mapPathAttrs.name && target.getAttribute('name'); var typeValue = target.getAttribute && target.getAttribute('type'); var valueValue = target.getAttribute && target.getAttribute('value'); @@ -213,7 +213,7 @@ var body = target.ownerDocument.body; while(current !== null){ if(current.nodeName !== 'HTML'){ - var idValue = current.getAttribute && current.getAttribute('id'); + var idValue = current.getAttribute && (current.getAttribute('data-testid') || current.getAttribute('id')); if(idValue && reAttrValueBlack.test(idValue) === false && checkUniqueSelector(body, '#'+idValue, isAllDom)){ return { node: current, @@ -759,6 +759,9 @@ var target = elements[0]; target.focus(); var varinfo = event.varinfo; + if(varinfo.isNew){ + testVars[varinfo.name] = varinfo.value; + } target.value = getVarStr(eval('\`'+varinfo.template+'\`')); GlobalEvents.emit('showDomPath', path); saveCommand('insertVar', { @@ -772,6 +775,16 @@ } }); + // 执行JS + GlobalEvents.on('eval', function(event){ + var frameId = getFrameId(); + if(frameId === event.frame){ + var code = event.code; + eval(code); + saveCommand('eval', code); + } + }); + // 更新变量 GlobalEvents.on('updateVar', function(event){ var frameId = getFrameId(); @@ -1598,8 +1611,8 @@ '
DomPath:
', '
'+__('attr_switch')+'data-id
', '
'+__('attr_black')+'
', - '', - '' + '', + '' ]; divDomToolsPannel.innerHTML = arrHTML.join(''); var diffX = 0, diffY =0; @@ -1720,6 +1733,17 @@ }); }); break; + case 'uirecorder-jscode': + hideDialog(); + showSelector(function(domInfo, requirePause){ + showJSCodeDialog(domInfo, function(code){ + GlobalEvents.emit('eval', { + frame: domInfo.frame, + code: code + }); + }); + }); + break; case 'uirecorder-jump': showJumpDailog(); break; @@ -1764,7 +1788,7 @@ '

', '
', '', - '' + '' ]; divDomDialog.innerHTML = arrHTML.join(''); document.body.appendChild(divDomDialog); @@ -1788,12 +1812,10 @@ break; } }); - divDomDialog.addEventListener('keyup', function(event){ + divDomDialog.addEventListener('keydown', function(event){ var keyCode = event.keyCode; - switch(keyCode){ - case 13: - okCallback(); - break; + if(keyCode === 13 && (event.ctrlKey || event.metaKey)){ + okCallback(); } }); document.addEventListener('keyup', function(event){ @@ -2211,6 +2233,33 @@ }); } + function showJSCodeDialog(domInfo, callback){ + var strHtml = '
'; + setGlobalWorkMode('pauseAll'); + var domCode; + showDialog(__('dialog_jscode_title'), strHtml, { + onInit: function(){ + domCode = document.getElementById('uirecorder-code'); + domCode.select(); + domCode.focus(); + }, + onOk: function(){ + var code = domCode.value; + if(code){ + callback(code); + hideDialog(); + } + else{ + domCode.focus(); + alert(__('dialog_jscode_tip')); + } + }, + onCancel: function(){ + setGlobalWorkMode('record'); + } + }); + } + function showJumpDailog(){ var arrHtmls = [ '