Skip to content

Commit

Permalink
## ver 2.4.7 (2017-3-20)
Browse files Browse the repository at this point in the history
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
  • Loading branch information
itestauipi committed Mar 20, 2017
1 parent 08e0269 commit 4bc0090
Show file tree
Hide file tree
Showing 12 changed files with 91 additions and 21 deletions.
6 changes: 6 additions & 0 deletions CHANGE.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Binary file added chrome-extension/img/jscode.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
69 changes: 59 additions & 10 deletions chrome-extension/js/foreground.js
Original file line number Diff line number Diff line change
Expand Up @@ -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');
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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', {
Expand All @@ -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();
Expand Down Expand Up @@ -1598,8 +1611,8 @@
'<div style="padding:5px;color:#666;font-size:16px;"><strong>DomPath: </strong><span id="uirecorder-path"></span></div>',
'<div style="padding:5px;color:#999;font-size:10px;">'+__('attr_switch')+'<span id="uirecorder-attrs"><span class="on">data-id</span></span></div>',
'<div style="padding:5px;color:#999;font-size:10px;">'+__('attr_black')+'<input id="uirecorder-attrblack" value="'+strAttrValueBlack+'" placeholder="'+__('attr_black_tip')+'" size="72" style="border:1px solid #ccc;padding:3px;background:#f1f1f1" /></div>',
'<div><span class="uirecorder-button"><a name="uirecorder-hover"><img src="'+baseUrl+'img/hover.png" alt="">'+__('button_hover_text')+'</a></span><span class="uirecorder-button"><a name="uirecorder-sleep"><img src="'+baseUrl+'img/sleep.png" alt="">'+__('button_sleep_text')+'</a></span><span class="uirecorder-button"><a name="uirecorder-expect"><img src="'+baseUrl+'img/expect.png" alt="">'+__('button_expect_text')+'</a></span><span class="uirecorder-button"><a name="uirecorder-vars"><img src="'+baseUrl+'img/vars.png" alt="">'+__('button_vars_text')+'</a></span><span class="uirecorder-button"><a name="uirecorder-jump"><img src="'+baseUrl+'img/jump.png" alt="">'+__('button_jump_text')+'</a></span><span class="uirecorder-button"><a name="uirecorder-end"><img src="'+baseUrl+'img/end.png" alt="">'+__('button_end_text')+'</a></span></div>',
'<style>#uirecorder-tools-pannel{position:fixed;z-index:2147483647;padding:20px;width:750px;box-sizing:border-box;border:1px solid #ccc;line-height:1;background:rgba(241,241,241,0.9);box-shadow: 5px 5px 10px #888888;bottom:10px;left:10px;cursor:move;}#uirecorder-path{border-bottom: dashed 1px #ccc;padding:2px;color:#FF7159;font-size:12px;}.uirecorder-button{cursor:pointer;margin: 5px;}.uirecorder-button a{text-decoration: none;color:#333333;font-family: arial, sans-serif;font-size: 12px;color: #777;text-shadow: 1px 1px 0px white;background: -webkit-linear-gradient(top, #ffffff 0%,#dfdfdf 100%);border-radius: 3px;box-shadow: 0 1px 3px 0px rgba(0,0,0,0.4);padding: 5px 7px;}.uirecorder-button a:hover{background: -webkit-linear-gradient(top, #ffffff 0%,#eee 100%);box-shadow: 0 1px 3px 0px rgba(0,0,0,0.4);}.uirecorder-button a:active{background: -webkit-linear-gradient(top, #dfdfdf 0%,#f1f1f1 100%);box-shadow: 0px 1px 1px 1px rgba(0,0,0,0.2) inset, 0px 1px 1px 0 rgba(255,255,255,1);}.uirecorder-button a img{display:inline-block;padding-right: 8px;position: relative;top: 2px;vertical-align:baseline;width:auto;height:auto;}#uirecorder-attrs span{text-align: center; border-radius:4px;padding:3px 5px;font-size:12px;text-decoration: none;margin:0px 3px;display: inline-block;cursor: pointer;}#uirecorder-attrs span.on{color:#777;background-color:#f3f3f3;box-shadow: 0 1px 3px 0px rgba(0,0,0,0.3);}#uirecorder-attrs span.off{color:#bbb;background-color: #eee;box-shadow: 0 1px 3px 0px rgba(0,0,0,0.2);}</style>'
'<div><span class="uirecorder-button"><a name="uirecorder-hover"><img src="'+baseUrl+'img/hover.png" alt="">'+__('button_hover_text')+'</a></span><span class="uirecorder-button"><a name="uirecorder-sleep"><img src="'+baseUrl+'img/sleep.png" alt="">'+__('button_sleep_text')+'</a></span><span class="uirecorder-button"><a name="uirecorder-expect"><img src="'+baseUrl+'img/expect.png" alt="">'+__('button_expect_text')+'</a></span><span class="uirecorder-button"><a name="uirecorder-vars"><img src="'+baseUrl+'img/vars.png" alt="">'+__('button_vars_text')+'</a></span><span class="uirecorder-button"><a name="uirecorder-jscode"><img src="'+baseUrl+'img/jscode.png" alt="">'+__('button_jscode_text')+'</a></span><span class="uirecorder-button"><a name="uirecorder-jump"><img src="'+baseUrl+'img/jump.png" alt="">'+__('button_jump_text')+'</a></span><span class="uirecorder-button"><a name="uirecorder-end"><img src="'+baseUrl+'img/end.png" alt="">'+__('button_end_text')+'</a></span></div>',
'<style>#uirecorder-tools-pannel{position:fixed;z-index:2147483647;padding:20px;width:850px;box-sizing:border-box;border:1px solid #ccc;line-height:1;background:rgba(241,241,241,0.9);box-shadow: 5px 5px 10px #888888;bottom:10px;left:10px;cursor:move;}#uirecorder-path{border-bottom: dashed 1px #ccc;padding:2px;color:#FF7159;font-size:12px;}.uirecorder-button{cursor:pointer;margin: 5px;}.uirecorder-button a{text-decoration: none;color:#333333;font-family: arial, sans-serif;font-size: 12px;color: #777;text-shadow: 1px 1px 0px white;background: -webkit-linear-gradient(top, #ffffff 0%,#dfdfdf 100%);border-radius: 3px;box-shadow: 0 1px 3px 0px rgba(0,0,0,0.4);padding: 5px 7px;}.uirecorder-button a:hover{background: -webkit-linear-gradient(top, #ffffff 0%,#eee 100%);box-shadow: 0 1px 3px 0px rgba(0,0,0,0.4);}.uirecorder-button a:active{background: -webkit-linear-gradient(top, #dfdfdf 0%,#f1f1f1 100%);box-shadow: 0px 1px 1px 1px rgba(0,0,0,0.2) inset, 0px 1px 1px 0 rgba(255,255,255,1);}.uirecorder-button a img{display:inline-block;padding-right: 8px;position: relative;top: 2px;vertical-align:baseline;width:auto;height:auto;}#uirecorder-attrs span{text-align: center; border-radius:4px;padding:3px 5px;font-size:12px;text-decoration: none;margin:0px 3px;display: inline-block;cursor: pointer;}#uirecorder-attrs span.on{color:#777;background-color:#f3f3f3;box-shadow: 0 1px 3px 0px rgba(0,0,0,0.3);}#uirecorder-attrs span.off{color:#bbb;background-color: #eee;box-shadow: 0 1px 3px 0px rgba(0,0,0,0.2);}</style>'
];
divDomToolsPannel.innerHTML = arrHTML.join('');
var diffX = 0, diffY =0;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -1764,7 +1788,7 @@
'<h2 id="uirecorder-dialog-title"></h2>',
'<div id="uirecorder-dialog-content"></div>',
'<div style="padding-bottom:10px;text-align:center;"><span class="uirecorder-button"><a name="uirecorder-ok"><img src="'+baseUrl+'img/ok.png" alt="">'+__('dialog_ok')+'</a></span><span class="uirecorder-button"><a name="uirecorder-cancel"><img src="'+baseUrl+'img/cancel.png" alt="">'+__('dialog_cancel')+'</a></span></div>',
'<style>#uirecorder-dialog{display:none;position:fixed;z-index:2147483647;padding:20px;top:50%;left:50%;width:480px;margin-left:-240px;margin-top:-160px;box-sizing:border-box;border:1px solid #ccc;background:rgba(241,241,241,1);box-shadow: 5px 5px 10px #888888;}#uirecorder-dialog h2{padding-bottom:10px;border-bottom: solid 1px #ccc;margin-bottom:10px;color:#333;}#uirecorder-dialog ul{list-style:none;padding:0;}#uirecorder-dialog li{padding: 5px 0 5px 30px;margin:0;}#uirecorder-dialog li label{display:inline-block;width:100px;color:#666}#uirecorder-dialog li input,#uirecorder-dialog li select,#uirecorder-dialog li textarea{display:inline-block;font-size:16px;border:1px solid #ccc;border-radius:2px;padding:5px;}#uirecorder-dialog li input,#uirecorder-dialog li textarea{width:250px;}</style>'
'<style>#uirecorder-dialog{display:none;position:fixed;z-index:2147483647;padding:20px;top:50%;left:50%;min-width:480px;margin-left:-240px;margin-top:-160px;box-sizing:border-box;border:1px solid #ccc;background:rgba(241,241,241,1);box-shadow: 5px 5px 10px #888888;}#uirecorder-dialog h2{padding-bottom:10px;border-bottom: solid 1px #ccc;margin-bottom:10px;color:#333;}#uirecorder-dialog ul{list-style:none;padding:0;}#uirecorder-dialog li{padding: 5px 0 5px 30px;margin:0;}#uirecorder-dialog li label{display:inline-block;width:100px;color:#666}#uirecorder-dialog li input,#uirecorder-dialog li select,#uirecorder-dialog li textarea{display:inline-block;font-size:16px;border:1px solid #ccc;border-radius:2px;padding:5px;}#uirecorder-dialog li input,#uirecorder-dialog li textarea{width:250px;}</style>'
];
divDomDialog.innerHTML = arrHTML.join('');
document.body.appendChild(divDomDialog);
Expand All @@ -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){
Expand Down Expand Up @@ -2211,6 +2233,33 @@
});
}

function showJSCodeDialog(domInfo, callback){
var strHtml = '<ul><li><label>'+__('dialog_jscode_code')+'</label><textarea placeholder="'+__('dialog_jscode_tip')+'" id="uirecorder-code" style="vertical-align:top;height:100px;width:400px;white-space:nowrap; overflow:scroll;"></textarea></li></ul>';
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 = [
'<ul>',
Expand Down
8 changes: 3 additions & 5 deletions chrome-extension/js/mobile.js
Original file line number Diff line number Diff line change
Expand Up @@ -130,12 +130,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){
Expand Down
3 changes: 2 additions & 1 deletion chrome-extension/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@
"img/fail.png",
"img/text.png",
"img/alert.png",
"img/back.png"
"img/back.png",
"img/jscode.png"
],
"background": {
"scripts": [ "js/background.js" ]
Expand Down
6 changes: 5 additions & 1 deletion i18n/en.js
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
"button_sleep_text": "Add Sleep",
"button_expect_text": "Add Expect",
"button_vars_text": "Use Var",
"button_jscode_text": "Run JS",
"button_jump_text": "Jump to",
"button_end_text": "End Record",
"button_text_text": "Input Text",
Expand Down Expand Up @@ -105,6 +106,9 @@
"dialog_alert_title": "Alert Cmd: ",
"dialog_alert_option": "Alert option: ",
"dialog_alert_option_accpet": "Accpet",
"dialog_alert_option_dismiss": "Dismiss"
"dialog_alert_option_dismiss": "Dismiss",
"dialog_jscode_title": "Run JS",
"dialog_jscode_code": "JS Code",
"dialog_jscode_tip": "Please input jscode run in browser side,E.g.: document.title='test';"
}
}
6 changes: 5 additions & 1 deletion i18n/zh-cn.js
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
"button_sleep_text": "添加延迟",
"button_expect_text": "添加断言",
"button_vars_text": "使用变量",
"button_jscode_text": "执行JS",
"button_jump_text": "脚本跳转",
"button_end_text": "结束录制",
"button_text_text": "输入文字",
Expand Down Expand Up @@ -105,6 +106,9 @@
"dialog_alert_title": "Alert命令: ",
"dialog_alert_option": "Alert选项: ",
"dialog_alert_option_accpet": "接受",
"dialog_alert_option_dismiss": "拒绝"
"dialog_alert_option_dismiss": "拒绝",
"dialog_jscode_title": "执行JS",
"dialog_jscode_code": "JS代码",
"dialog_jscode_tip": "请输入浏览器端执行的JS代码,例如: document.title='test';"
}
}
6 changes: 5 additions & 1 deletion i18n/zh-tw.js
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
"button_sleep_text": "添加延遲",
"button_expect_text": "添加斷言",
"button_vars_text": "使用變量",
"button_jscode_text": "執行JS",
"button_jump_text": "腳本跳轉",
"button_end_text": "結束錄制",
"button_text_text": "輸入文字",
Expand Down Expand Up @@ -105,6 +106,9 @@
"dialog_alert_title": "Alert命令: ",
"dialog_alert_option": "Alert選項: ",
"dialog_alert_option_accpet": "接受",
"dialog_alert_option_dismiss": "拒絕"
"dialog_alert_option_dismiss": "拒絕",
"dialog_jscode_title": "執行JS",
"dialog_jscode_code": "JS代碼",
"dialog_jscode_tip": "請輸入瀏覽器端執行的JS代碼,例如: document.title='test';"
}
}
2 changes: 1 addition & 1 deletion lib/init.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ function initConfig(options){
if(!mobile){
config.recorder = config.recorder || {};
recorder = config.recorder;
recorder.pathAttrs = recorder.pathAttrs || 'data-test,data-id,data-name,type,data-type,role,data-role,data-value';
recorder.pathAttrs = recorder.pathAttrs || 'data-id,data-name,type,data-type,role,data-role,data-value';
recorder.attrValueBlack = recorder.attrValueBlack || '';
recorder.hideBeforeExpect = recorder.hideBeforeExpect || '';
webdriver.browsers = webdriver.browsers || 'chrome, ie 11';
Expand Down
4 changes: 4 additions & 0 deletions lib/start.js
Original file line number Diff line number Diff line change
Expand Up @@ -593,6 +593,10 @@ function startRecorder(options){
isPageError(code).should.be.false;
}).then(doNext).catch(catchError) || doNext();
break;
case 'eval':
pushTestCode('eval', '', data.replace(/\n/g, ' \\n '), 'return driver.eval(\''+escapeStr(data)+'\');');
checkerBrowser && checkerBrowser.eval(data).then(doNext).catch(catchError) || doNext();
break;
case 'mouseMove':
arrCodes = [];
arrCodes.push('return driver.sleep(300).wait(\''+escapeStr(data.path)+'\', 30000)');
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "uirecorder",
"version": "2.4.6",
"version": "2.4.7",
"description": "A tool for record ui test case",
"main": "./index",
"bin": {
Expand Down
Binary file modified tool/uirecorder.crx
Binary file not shown.

0 comments on commit 4bc0090

Please sign in to comment.