![JAR search and dependency download from the Maven repository](/logo.png)
org.openqa.selenium.internal.injectableSelenium.js Maven / Gradle / Ivy
The newest version!
var browserbot = {
getTagName : function(element) {
var tagName;
if (element && element.tagName && element.tagName.toLowerCase) {
tagName = element.tagName.toLowerCase();
}
return tagName;
},
replaceText : function(element, stringValue) {
this.triggerEvent(element, 'focus', false);
this.triggerEvent(element, 'select', true);
var maxLengthAttr = element.getAttribute("maxLength");
var actualValue = stringValue;
if (maxLengthAttr != null) {
var maxLength = parseInt(maxLengthAttr);
if (stringValue.length > maxLength) {
actualValue = stringValue.substr(0, maxLength);
}
}
if (this.getTagName(element) == "body") {
if (element.ownerDocument && element.ownerDocument.designMode) {
var designMode = new String(element.ownerDocument.designMode).toLowerCase();
if (designMode = "on") {
// this must be a rich text control!
element.innerHTML = actualValue;
}
}
} else {
element.value = actualValue;
}
// DGF this used to be skipped in chrome URLs, but no longer. Is xpcnativewrappers to blame?
try {
this.triggerEvent(element, 'change', true);
} catch (e) {
}
},
getKeyCodeFromKeySequence : function(keySequence) {
var match = /^\\(\d{1,3})$/.exec(keySequence);
if (match != null) {
return match[1];
}
match = /^.$/.exec(keySequence);
if (match != null) {
return match[0].charCodeAt(0);
}
// this is for backward compatibility with existing tests
// 1 digit ascii codes will break however because they are used for the digit chars
match = /^\d{2,3}$/.exec(keySequence);
if (match != null) {
return match[0];
}
throw "invalid keySequence";
},
createEventObject : function(element, controlKeyDown, altKeyDown, shiftKeyDown, metaKeyDown) {
var evt = element.ownerDocument.createEventObject();
evt.shiftKey = shiftKeyDown;
evt.metaKey = metaKeyDown;
evt.altKey = altKeyDown;
evt.ctrlKey = controlKeyDown;
return evt;
},
triggerEvent : function(element, eventType, canBubble, controlKeyDown, altKeyDown, shiftKeyDown, metaKeyDown) {
canBubble = (typeof(canBubble) == undefined) ? true : canBubble;
if (element.fireEvent && element.ownerDocument && element.ownerDocument.createEventObject) { // IE
var evt = this.createEventObject(element, controlKeyDown, altKeyDown, shiftKeyDown, metaKeyDown);
element.fireEvent('on' + eventType, evt);
} else {
var evt = document.createEvent('HTMLEvents');
try {
evt.shiftKey = shiftKeyDown;
evt.metaKey = metaKeyDown;
evt.altKey = altKeyDown;
evt.ctrlKey = controlKeyDown;
} catch (e) {
// Nothing sane to do
}
evt.initEvent(eventType, canBubble, true);
element.dispatchEvent(evt);
}
},
triggerKeyEvent : function(element, eventType, keySequence, canBubble, controlKeyDown, altKeyDown, shiftKeyDown, metaKeyDown) {
var keycode = this.getKeyCodeFromKeySequence(keySequence);
canBubble = (typeof(canBubble) == undefined) ? true : canBubble;
if (element.fireEvent && element.ownerDocument && element.ownerDocument.createEventObject) { // IE
var keyEvent = this.createEventObject(element, controlKeyDown, altKeyDown, shiftKeyDown, metaKeyDown);
keyEvent.keyCode = keycode;
element.fireEvent('on' + eventType, keyEvent);
} else {
var evt;
if (window.KeyEvent) {
evt = document.createEvent('KeyEvents');
evt.initKeyEvent(eventType, true, true, window, controlKeyDown, altKeyDown, shiftKeyDown, metaKeyDown, keycode, keycode);
} else {
evt = document.createEvent('UIEvents');
evt.shiftKey = shiftKeyDown;
evt.metaKey = metaKeyDown;
evt.altKey = altKeyDown;
evt.ctrlKey = controlKeyDown;
evt.initUIEvent(eventType, true, true, window, 1);
evt.keyCode = keycode;
evt.which = keycode;
}
element.dispatchEvent(evt);
}
},
triggerMouseEvent : function(element, eventType, canBubble, clientX, clientY, button) {
clientX = clientX ? clientX : 0;
clientY = clientY ? clientY : 0;
var screenX = 0;
var screenY = 0;
canBubble = (typeof(canBubble) == undefined) ? true : canBubble;
if (element.fireEvent && element.ownerDocument && element.ownerDocument.createEventObject) { //IE
var evt = this.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) {
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) {
// work around for http://jira.openqa.org/browse/SEL-280 -- make the event available somewhere:
}
element.fireEvent('on' + eventType, evt);
}
} else {
var 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 {
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);
}
},
doFireEvent : function(element, eventName) {
/**
* Explicitly simulate an event, to trigger the corresponding "onevent"
* handler.
*
* @param locator an element locator
* @param eventName the event name, e.g. "focus" or "blur"
*/
this.triggerEvent(element, eventName, false);
},
getClientXY : function(element, coordString) {
// Parse coordString
var coords = null;
var x;
var y;
if (coordString) {
coords = coordString.split(/,/);
x = Number(coords[0]);
y = Number(coords[1]);
} else {
x = y = 0;
}
// Get position of element,
// Return 2 item array with clientX and clientY
return [this.getElementPositionLeft(element) + x, this.getElementPositionTop(element) + y];
},
getElementPositionLeft : function(element) {
var x = element.offsetLeft;
var elementParent = element.offsetParent;
while (elementParent != null)
{
if (document.all)
{
if ((elementParent.tagName != "TABLE") && (elementParent.tagName != "BODY"))
{
x += elementParent.clientLeft;
}
}
else // Netscape/DOM
{
if (elementParent.tagName == "TABLE")
{
var parentBorder = parseInt(elementParent.border);
if (isNaN(parentBorder))
{
var parentFrame = elementParent.getAttribute('frame');
if (parentFrame != null)
{
x += 1;
}
}
else if (parentBorder > 0)
{
x += parentBorder;
}
}
}
x += elementParent.offsetLeft;
elementParent = elementParent.offsetParent;
}
return x;
},
getElementPositionTop : function(element) {
/**
* Retrieves the vertical position of an element
*
* @param locator an element locator pointing to an element OR an element itself
* @return number of pixels from the edge of the frame.
*/
var y = 0;
while (element != null)
{
if (document.all)
{
if ((element.tagName != "TABLE") && (element.tagName != "BODY"))
{
y += element.clientTop;
}
}
else // Netscape/DOM
{
if (element.tagName == "TABLE")
{
var parentBorder = parseInt(element.border);
if (isNaN(parentBorder))
{
var parentFrame = element.getAttribute('frame');
if (parentFrame != null)
{
y += 1;
}
}
else if (parentBorder > 0)
{
y += parentBorder;
}
}
}
y += element.offsetTop;
// Netscape can get confused in some cases, such that the height of the parent is smaller
// than that of the element (which it shouldn't really be). If this is the case, we need to
// exclude this element, since it will result in too large a 'top' return value.
if (element.offsetParent && element.offsetParent.offsetHeight && element.offsetParent.offsetHeight < element.offsetHeight)
{
// skip the parent that's too small
element = element.offsetParent.offsetParent;
}
else
{
// Next up...
element = element.offsetParent;
}
}
return y;
},
triggerMouseEventAt : function(element, eventName, coordString) {
var clientXY = this.getClientXY(element, coordString)
this.triggerMouseEvent(element, eventName, true, clientXY[0], clientXY[1]);
},
doKeyDown : function(element, keySequence, controlKeyDown, altKeyDown, shiftKeyDown, metaKeyDown) {
/**
* Simulates a user pressing a key (without releasing it yet).
*
* @param locator an element locator
* @param keySequence Either be a string("\" followed by the numeric keycode
* of the key to be pressed, normally the ASCII value of that key), or a single
* character. For example: "w", "\119".
*/
this.triggerKeyEvent(element, 'keydown', keySequence, true,
controlKeyDown,
altKeyDown,
shiftKeyDown,
metaKeyDown);
},
doKeyUp : function(element, keySequence, controlKeyDown, altKeyDown, shiftKeyDown, metaKeyDown) {
/**
* Simulates a user releasing a key.
*
* @param locator an element locator
* @param keySequence Either be a string("\" followed by the numeric keycode
* of the key to be pressed, normally the ASCII value of that key), or a single
* character. For example: "w", "\119".
*/
this.triggerKeyEvent(element, 'keyup', keySequence, true,
controlKeyDown,
altKeyDown,
shiftKeyDown,
metaKeyDown);
}
};
© 2015 - 2025 Weber Informatics LLC | Privacy Policy