我正在使用Selenium编写一些UI测试,并且使用Dojo工具包创建了JavaScript树控件。JavaScript模拟通过代码右键单击
我已经使用Dojo提供的示例为树的每个节点实现了一个上下文菜单,但是我需要Selenium测试来“调用”树节点上的右键单击,但是我无法使其工作。测试不会通过JavaScript模拟右键单击事件,并且不显示上下文菜单。
有没有人在使用Dojo和Selenium调用右键菜单上的任何经验?或者有什么想法如何做到这一点?
我正在使用Selenium编写一些UI测试,并且使用Dojo工具包创建了JavaScript树控件。JavaScript模拟通过代码右键单击
我已经使用Dojo提供的示例为树的每个节点实现了一个上下文菜单,但是我需要Selenium测试来“调用”树节点上的右键单击,但是我无法使其工作。测试不会通过JavaScript模拟右键单击事件,并且不显示上下文菜单。
有没有人在使用Dojo和Selenium调用右键菜单上的任何经验?或者有什么想法如何做到这一点?
尝试此相反,原因是什么事情也不太工作是,上下文菜单,其实是必然的oncontextmenu事件。
function contextMenuClick(element){
var evt = element.ownerDocument.createEvent('MouseEvents');
var RIGHT_CLICK_BUTTON_CODE = 2; // the same for FF and IE
evt.initMouseEvent('contextmenu', true, true,
element.ownerDocument.defaultView, 1, 0, 0, 0, 0, false,
false, false, false, RIGHT_CLICK_BUTTON_CODE, null);
if (document.createEventObject){
// dispatch for IE
return element.fireEvent('onclick', evt)
}
else{
// dispatch for firefox + others
return !element.dispatchEvent(evt);
}
}
伟大的问题!
我做了一些研究,而且好像你可以火象is shown here鼠标事件,并通过button
或which
属性设置为2(documented here)它单击鼠标右键。
也许这代码将工作:
function rightClick(element){
var evt = element.ownerDocument.createEvent('MouseEvents');
var RIGHT_CLICK_BUTTON_CODE = 2; // the same for FF and IE
evt.initMouseEvent('click', true, true,
element.ownerDocument.defaultView, 1, 0, 0, 0, 0, false,
false, false, false, RIGHT_CLICK_BUTTON_CODE, null);
if (document.createEventObject){
// dispatch for IE
return element.fireEvent('onclick', evt)
}
else{
// dispatch for firefox + others
return !element.dispatchEvent(evt);
}
}
这里有一个更正确的版本,如果你不关心在上下文菜单被解雇了
function fireContextMenu(el) {
var evt = el.ownerDocument.createEvent("HTMLEvents")
evt.initEvent('contextmenu', true, true) // bubbles = true, cancelable = true
if (document.createEventObject) {
return el.fireEvent('oncontextmenu', evt)
}
else {
return !el.dispatchEvent(evt)
}
}
如果你这样做,我们可能要使用以前的一个,修复了它的行为在IE浏览器,并填充screenX,screenY,clientX,clientY等适当
只是良好的措施,这里是参数有点DOCO的:
var myEvt = document.createEvent('MouseEvents');
myEvt.initMouseEvent(
'click' // event type
,true // can bubble?
,true // cancelable?
,window // the event's abstract view (should always be window)
,1 // mouse click count (or event "detail")
,100 // event's screen x coordinate
,200 // event's screen y coordinate
,100 // event's client x coordinate
,200 // event's client y coordinate
,false // whether or not CTRL was pressed during event
,false // whether or not ALT was pressed during event
,false // whether or not SHIFT was pressed during event
,false // whether or not the meta key was pressed during event
,1 // indicates which button (if any) caused the mouse event (1 = primary button)
,null // relatedTarget (only applicable for mouseover/mouseout events)
);
+1在这方面的帮助 – Thariama 2012-03-29 14:24:41
我在firefox和chrome中尝试这个,但是调度contextmenu事件并不会让浏览器打开上下文菜单。触发事件是因为我的oncontextmenu回调被触发,但上下文菜单仍然丢失。任何人都有想法,因为我使用了上面的所有代码示例?
Booo-Yaaa做到了这一点,谢谢Ieiyou。 – Mark 2009-01-12 01:06:04