gpt4 book ai didi

seleniums "clickAt()"方法背后的 JavaScript 代码?

转载 作者:行者123 更新时间:2023-11-29 15:04:17 24 4
gpt4 key购买 nike

我想做的正是 seleniums“clickAt()”方法正在做的事情。它不同于 seleniums 和普通的 javascript 命令“click()”。

因为“clickAt”正在用于 ajax 测试,而正常的“click”方法不是。

假设我想在 ID 为 myid 的元素上执行 clickAt

我该怎么做?

最佳答案

我想你要找的是这个:

/* Fire a mouse event in a browser-compatible manner */

BrowserBot.prototype.triggerMouseEvent = function(element, eventType, canBubble, clientX, clientY, button) {
clientX = clientX ? clientX : 0;
clientY = clientY ? clientY : 0;

LOG.debug("triggerMouseEvent assumes setting screenX and screenY to 0 is ok");
var screenX = 0;
var screenY = 0;

canBubble = (typeof(canBubble) == undefined) ? true : canBubble;
var evt;
if (element.fireEvent && element.ownerDocument && element.ownerDocument.createEventObject) { //IE
evt = createEventObject(element, this.controlKeyDown, this.altKeyDown, this.shiftKeyDown, this.metaKeyDown);
evt.detail = 0;
evt.button = button ? button : 1; // default will be the left mouse click ( http://www.javascriptkit.com/jsref/event.shtml )
evt.relatedTarget = null;
if (!screenX && !screenY && !clientX && !clientY && !this.controlKeyDown && !this.altKeyDown && !this.shiftKeyDown && !this.metaKeyDown) {
element.fireEvent('on' + eventType);
}
else {
evt.screenX = screenX;
evt.screenY = screenY;
evt.clientX = clientX;
evt.clientY = clientY;

// when we go this route, window.event is never set to contain the event we have just created.
// ideally we could just slide it in as follows in the try-block below, but this normally
// doesn't work. This is why I try to avoid this code path, which is only required if we need to
// set attributes on the event (e.g., clientX).
try {
window.event = evt;
}
catch(e) {
// getting an "Object does not support this action or property" error. Save the event away
// for future reference.
// TODO: is there a way to update window.event?

// work around for http://jira.openqa.org/browse/SEL-280 -- make the event available somewhere:
selenium.browserbot.getCurrentWindow().selenium_event = evt;
}
element.fireEvent('on' + eventType, evt);
}
}
else {
evt = document.createEvent('MouseEvents');
if (evt.initMouseEvent)
{
// see http://developer.mozilla.org/en/docs/DOM:event.button and
// http://developer.mozilla.org/en/docs/DOM:event.initMouseEvent for button ternary logic logic
//Safari
evt.initMouseEvent(eventType, canBubble, true, document.defaultView, 1, screenX, screenY, clientX, clientY,
this.controlKeyDown, this.altKeyDown, this.shiftKeyDown, this.metaKeyDown, button ? button : 0, null);
}
else {
LOG.warn("element doesn't have initMouseEvent; firing an event which should -- but doesn't -- have other mouse-event related attributes here, as well as controlKeyDown, altKeyDown, shiftKeyDown, metaKeyDown");
evt.initEvent(eventType, canBubble, true);

evt.shiftKey = this.shiftKeyDown;
evt.metaKey = this.metaKeyDown;
evt.altKey = this.altKeyDown;
evt.ctrlKey = this.controlKeyDown;
if(button)
{
evt.button = button;
}
}
element.dispatchEvent(evt);
}
};

这来自 Selenium 源代码,可在以下位置获得:

http://selenium.googlecode.com/svn/trunk/javascript/selenium-core/scripts/selenium-browserbot.js

关于seleniums "clickAt()"方法背后的 JavaScript 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5500011/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com