开发者

WatiN FireEvent not passing event properties in FireFox

开发者 https://www.devze.com 2023-02-10 03:25 出处:网络
This had been logged as a bug in sourceforge though now deleted. I\'m using FireFox 3.6 with associated jssh.

This had been logged as a bug in sourceforge though now deleted.

I'm using FireFox 3.6 with associated jssh.

I can see in Firebug that the Event Properties are not being set. I'm trying to drag and drop with code below

var mouseDownEvent = new NameValueCollection 
                         {{"button", "1"}, {"clientX", "0"}, {"clientY", "0"}};
firstStoryRow.FireEventNoW开发者_StackOverflow中文版ait("onmousedown", mouseDownEvent);

There are workarounds for passing these properties but not they're not nice.

Does anyone know if this is an genuine limitation within WatiN or something I'm doing wrong?


This is indeed a shortcoming in the FireFox implementation. All the given parameters/values are ignored for mouse events. This should be fixed and is not that hard. I will reopen the issue on SourceForge.

To make this work you could run this code, which is what WatiN is actually doing for you:

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);

If result == 'true' all went well. Hope this will help for now, but this needs to be fixed in the next release.

Jeroen

0

精彩评论

暂无评论...
验证码 换一张
取 消