WatiN FireEvent不在FireFox中传递事件属性

时间:2011-02-14 10:10:21

标签: c# firefox drag-and-drop mouseevent watin

虽然已经删除了logged as a bug in sourceforge

我正在使用带有关联jssh的FireFox 3.6。

我可以在Firebug中看到没有设置事件属性。我正试图拖放下面的代码

var mouseDownEvent = new NameValueCollection 
                         {{"button", "1"}, {"clientX", "0"}, {"clientY", "0"}};
firstStoryRow.FireEventNoWait("onmousedown", mouseDownEvent);

传递这些属性有workarounds但不是很好。

有人知道这是否是WatiN中的真正限制或我做错了什么?

1 个答案:

答案 0 :(得分:3)

这确实是FireFox实施中的一个缺点。鼠标事件将忽略所有给定的参数/值。这应该是固定的,并不是那么难。我将在SourceForge上重新打开这个问题。

为了完成这项工作,您可以运行此代码,这是WatiN实际为您做的事情:

var jscriptref = firstStoryRow.GetJavascriptElementReference();

var fireeventcode = string.Format("var event = {0}.ownerDocument.createEvent('MouseEvents');",jscriptref);

// Params for the initMouseEvent:
// 'type', bubbles, cancelable, windowObject, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget )
fireeventcode += "event.initMouseEvent('mousedown', true, true, null, 0, 0, 0, 0, 0, false, false, false, false, 1, null);";
fireeventcode += string.Format("var res = {0}.dispatchEvent(event);", jscriptref);
fireeventcode += "if(res){true;}else{false;};";

// make it a NoWait call by wrapping it in a timer call.
fireeventcode = JSUtils.WrapCommandInTimer(fireeventcode);

var result = browser.Eval(fireeventcode);

如果结果=='true'一切顺利。 希望这对现在有所帮助,但这需要在下一个版本中修复。

的Jeroen