セレン/ webdriverを持つ簡単な作業ではありません。私は非常に似たようなことをして、それを働かせました(私はすぐにそれをリリースします)。基本は、JavaScriptイベントハンドラとJavaからのデータのポーリングです。
はJavaScript:
var events = [];
var eventQueue = [];
var eventHistory = {};
var processing = false;
var nativeEvents = {
'submit': 'HTMLEvents',
'keypress': 'KeyEvents',
'click': 'MouseEvents',
'dblclick': 'MouseEvents',
'dragstart': 'MouseEvents',
'dragend': 'MouseEvents',
}
for(var eventName in nativeEvents) {
document.addEventListener(eventName, processEvent, true);
};
processEvent = function(event) {
if(event.triggeredManually) {
return true;
}
if(event.type in nativeEvents) {
storeEvent(event);
event.stopPropagation();
event.preventDefault();
return false;
}
}
storeEvent = function(event) {
ev = convertEvent(event);
if(processing) {
eventQueue.push(ev);
} else {
events.push(ev);
}
}
convertEvent = function(event) {
var ev = {};
var id = new Date().getTime() + ":" + Math.random();
ev['id'] = id;
ev['type'] = event.type;
ev['target'] = event.target;
ev['button'] = event.button;
ev['charCode'] = event.charCode;
ev['keyCode'] = event.keyCode;
ev['altKey'] = event.altKey;
ev['ctrlKey'] = event.ctrlKey;
ev['shiftKey'] = event.shiftKey;
ev['clientX'] = event.clientX;
ev['clientY'] = event.clientY;
ev['offsetX'] = event.offsetX;
ev['offsetY'] = event.offsetY;
eventHistory[id] = ev;
return ev;
}
これらの機能は、ユーザーイベントを検出して保存するためのものです。 Javaでイベントを取得し、その後イベントをトリプルするには、以下のものが必要です。 unload
イベントがすべてのブラウザで安全に動作していないため、ページのアンロードにはこれが必要です。
getEvents = function() {
processing = true;
events = events.concat(eventQueue);
eventQueue = [];
setTimeout(resetEvents, 10);
return events;
};
resetEvents = function() {
events = [];
processing = false;
};
triggerEvents = function(idsAsJson) {
// trigger pending events
var ids = JSON.parse(idsAsJson);
for (var i = 0; i < ids.length; i++) {
var event = eventHistory[ids[i]];
if(event) {
var evObj = null;
var evObjType = null;
var bubbling = true;
var cancelable = false;
if(event['type'] in nativeEvents) {
evObjType = nativeEvents[event['type']];
evObj = document.createEvent(evObjType);
// more info: http://www.howtocreate.co.uk/tutorials/javascript/domevents
if(evObjType == 'KeyEvents') {
evObj.initKeyEvent(event['type'], bubbling, cancelable, window, event['ctrlKey'], event['altKey'], event['shiftKey'], false, event['keyCode'], event['charCode']);
} else if(evObjType == 'MouseEvents') {
evObj.initMouseEvent(event['type'], bubbling, cancelable, window, 1, event['offsetX'], event['offsetY'], event['clientX'], event['clientY'], event['ctrlKey'], event['altKey'], event['shiftKey'], false, event['button'], null);
} else {
evObj.initEvent(event['type'], bubbling, cancelable);
}
evObj.triggeredManually = true;
event['target'].dispatchEvent(evObj);
}
}
}
};
は、その後、あなたはgetEvents()
機能をループするJavaコードを必要とし、あなたが必要なものを保存することができます。その後、ユーザインタラクションを処理するには、triggerEvents()
関数を実行する必要があります。
あなたがキャプチャし、保存し、triggger /ブラウザ上で、これらの保存されたイベントを再生することができています、私は同じのためにあなたの調査結果や提案をお聞かせください。私はそれに非常に感謝しています。どうもありがとう。 – SmartSolution
まだ準備ができていません。 Github:['Abmash'](https://github.com/alp82/abmash)で開発状況に従うことができます。録音/トリガー/リプレイアプリケーションは「Abmash Recorder」としてリリースされます。あなたがしたい場合は、私は電子メールで私に連絡することができます(私のGithubページを参照してください) – Alp