From 956fde0026af2dca64b57f8fecdb92a177f68a3d Mon Sep 17 00:00:00 2001 From: Patrick Gansterer Date: Wed, 6 Mar 2013 14:31:25 +0100 Subject: [PATCH] Add Utils.getMainDocumentElement for Firefox driver When the document is SVG instead of HTML the eventlistener for the unload event needs to be added to documentElement instead of body. This new function returns the corresponding element. --- javascript/firefox-driver/js/utils.js | 21 ++++++++++++++----- .../firefox-driver/js/wrappedElement.js | 2 +- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/javascript/firefox-driver/js/utils.js b/javascript/firefox-driver/js/utils.js index 29a7e3970c3f4..4557493c4012d 100644 --- a/javascript/firefox-driver/js/utils.js +++ b/javascript/firefox-driver/js/utils.js @@ -148,7 +148,7 @@ Utils.getActiveElement = function(doc) { // Default to the body if (!element) { - element = doc.body; + element = Utils.getMainDocumentElement(doc); } return element; @@ -1176,8 +1176,8 @@ Utils.getPageUnloadedIndicator = function(element) { var unloadFunction = function() { toReturn.wasUnloaded = true }; toReturn.callback = unloadFunction; - element.ownerDocument.body.addEventListener('unload', - unloadFunction, false); + var mainDocumentElement = Utils.getMainDocumentElement(element.ownerDocument); + mainDocumentElement.addEventListener('unload', unloadFunction, false); // This is a Firefox specific event - See: // https://developer.mozilla.org/En/Using_Firefox_1.5_caching @@ -1191,8 +1191,9 @@ Utils.removePageUnloadEventListener = function(element, pageUnloadData) { if (pageUnloadData.callback) { // Remove event listeners... if (element.ownerDocument) { - if (element.ownerDocument.body) { - element.ownerDocument.body.removeEventListener('unload', + var mainDocumentElement = Utils.getMainDocumentElement(element.ownerDocument); + if (mainDocumentElement) { + mainDocumentElement.removeEventListener('unload', pageUnloadData.callback, false); } if (element.ownerDocument.defaultView) { @@ -1227,3 +1228,13 @@ Utils.convertNSIArrayToNative = function(arrayToConvert) { return returnArray; }; + +Utils.isSVG = function(doc) { + return doc.documentElement && doc.documentElement.nodeName == 'svg'; +}; + +Utils.getMainDocumentElement = function(doc) { + if (Utils.isSVG(doc)) + return doc.documentElement; + return doc.body; +}; diff --git a/javascript/firefox-driver/js/wrappedElement.js b/javascript/firefox-driver/js/wrappedElement.js index 1e08cc13190c7..2a9dc72872ac0 100644 --- a/javascript/firefox-driver/js/wrappedElement.js +++ b/javascript/firefox-driver/js/wrappedElement.js @@ -388,7 +388,7 @@ WebElement.getElementLocationOnceScrolledIntoView = function( respond.session.getDocument()); var theDoc = element.ownerDocument; - theDoc.body.focus(); + Utils.getMainDocumentElement(theDoc).focus(); var elementLocation = Utils.getLocationOnceScrolledIntoView(element); respond.value = {